Akkoma 3.20.1 配置参数详解
Akkoma 3.20.1 配置体系逐层拆解:三层配置文件、instance gen 生成的 Endpoint/实例/数据库/上传/前端/密钥各参数组实测解说、文件与数据库双轨配置迁移机制,以及改参重启生效的全链路 API 验证。
Akkoma 3.20.1 配置参数详解
目标:把 Akkoma 3.20.1 的配置体系讲透——配置文件如何分层、
instance gen生成的每一项参数是什么意思、改了如何生效。全部参数解说基于 2026-11-02 实测部署实例的真实配置文件(config/prod.secret.exs)、仓库默认配置(config/config.exs)与 API 实测回显,不是文档转抄。部署过程见 《Akkoma 3.20.1 Docker Compose 部署指南》,配置迁移命令的完整 CLI 语境见 《Akkoma 3.20.1 常用 CLI 命令与工具详解》。
一、环境信息
- 组件与版本:Akkoma 3.20.1(stable 分支
bc62dd80,运行时自报3.20.1-0-gbc62dd8),Elixir 1.15.4 / OTP 26 / PostgreSQL 14.24。 - 取证实例:本地实测实例「Akkoma Test」,Web 入口 127.0.0.1:8129,配置文件为部署篇第九章
mix pleroma.instance gen生成、按官方流程改名而来的config/prod.secret.exs(实测 2615 字节)。 - 参照文件:仓库默认配置
config/config.exs(27453 字节)与参数说明书config/description.exs(106305 字节,机器可读的全量参数描述,管理端 UI 与mix pleroma.docs都从它生成)。
二、配置体系:三层文件与加载顺序
2.1 文件角色
| 文件 | 角色 | 是否入库/提交 |
|---|---|---|
config/config.exs | 全量默认值与注释(随代码走,升级会被覆盖) | 仓库文件,不改 |
config/description.exs | 每个参数的机器可读描述(类型/默认值/文档) | 仓库文件,不改 |
config/prod.secret.exs | 实例真实配置,instance gen 生成,覆盖默认值 | 含密钥,严禁外传 |
Elixir 按 MIX_ENV=prod 编译 release 时读取 config/prod.secret.exs,其键值逐项覆盖 config.exs 的默认值;没写的键保持默认。因此实例配置只需写「与默认不同」的部分——实测 prod.secret.exs 全文只有 80 余行。
2.2 实测实例的完整 prod.secret.exs(密钥已截断)
import Config
config :pleroma, Pleroma.Web.Endpoint,
url: [host: "localhost", scheme: "https", port: 8129],
http: [ip: {0, 0, 0, 0}, port: 4000],
secret_key_base: "UtdpSo+7fTs81usHeTZfR7fI3aFwdpGbqegyhh2x2P5gIAzXVpuCrn0hD/3JhaU9",
live_view: [signing_salt: "D92Lp4MJ"],
signing_salt: "9Apvw9TC"
config :pleroma, :instance,
name: "Akkoma Test",
email: "root@localhost",
notify_email: "root@localhost",
limit: 5000,
registrations_open: true
config :pleroma, :media_proxy,
enabled: false,
redirect_on_failure: true
config :pleroma, Pleroma.Repo,
adapter: Ecto.Adapters.Postgres,
username: "akkoma",
password: "akkoma",
database: "akkoma",
hostname: "db"
config :web_push_encryption, :vapid_details,
subject: "mailto:root@localhost",
public_key: "BJKHWBRTLqfAFZSJnM64pnMLNkIKyLlaxTnGhOyjmOO6YpmDnZqdW77xTEvQb7EeYnYzOOei19QBGU8XMTG9gxQ",
private_key: "wlp1HvL5Wx7Z7So3z82THRLQv70KzgEy3Vw39TOvacE"
config :pleroma, :database, rum_enabled: false
config :pleroma, :instance, static_dir: "/opt/akkoma/static"
config :pleroma, Pleroma.Uploaders.Local, uploads: "/opt/akkoma/uploads"
config :joken, default_signer: "8DxYWUOeRED1PHeigVzCJHy25iV1DEHnNnxMBwjRRuhQEzPg20Qmm8KkWNfqOe0J"
config :pleroma, configurable_from_database: false
config :pleroma, Pleroma.Upload,
filters: [Pleroma.Upload.Filter.Exiftool.ReadDescription, Pleroma.Upload.Filter.Exiftool.StripMetadata],
base_url: ""
config :pleroma, :instance,
description: "Akkoma 测试实例:quzuo.net 配置实测"
最后一段是部署完成后手工追加的实例描述修改(见第十章生效验证)。以下章节逐项解说。
三、Endpoint 与网络参数(config :pleroma, Pleroma.Web.Endpoint)
| 参数 | 实测值 | 解说 |
|---|---|---|
url: [host:] | localhost | 实例对外域名,决定 AP 对象 ID、用户地址等一切外链前缀。生产必须填真实域名,否则 https://localhost:8129/users/root 这类地址会写进数据库(实测建 root 用户时 INSERT 语句里的 ap_id/uri 就是 localhost 前缀) |
url: [scheme:] | https | 对外协议前缀,与监听无关;放 HTTPS 反代后保持 https |
url: [port:] | 8129 | 对外端口,仅参与 URL 拼接;4000 端口标准反代场景应写 port: 443 或省略 |
http: [ip:] | {0, 0, 0, 0} | 实际监听地址。默认 127.0.0.1,bind 挂载部署必须改 0.0.0.0,否则宿主端口映射打不通(部署篇排障 #6) |
http: [port:] | 4000 | 实际监听端口(服务内部),与 url.port 相互独立 |
secret_key_base | 随机 64 字符 | Phoenix 会话加密根密钥,instance gen 自动生成;泄露=可伪造会话,丢失=所有登录态失效 |
signing_salt / live_view signing_salt | 随机 8 字符 | 签名盐,同上自动生成 |
server: Cowboy 响应头(实测 curl -sI 回显节选)证明 HTTP 层由 Cowboy 直接承载,无 nginx 依赖:
HTTP/1.1 200 OK
access-control-allow-credentials: true
access-control-allow-origin: *
cache-control: max-age=0, private, must-revalidate
content-security-policy: upgrade-insecure-requests;style-src 'self' 'nonce-0mTOjrzCzBmbML-';font-src 'self';script-src 'self' 'nonce-0mTOjrzCzBmbML-';connect-src 'self' https://localhost:8129 wss://localhost:8129;media-src 'self' https:;img-src 'self' data: blob: https:;default-src 'none';base-uri 'none';frame-ancestors 'none';manifest-src 'self';
server: Cowboy
x-frame-options: DENY
x-request-id: GOQaX40jZi8FzC4AAAJF
CSP/x-frame-options/referrer-policy 等安全头由 config :pleroma, :http 与 Phoenix 默认中间件产生,connect-src 里的 wss://localhost:8129 即 url 参数联动——改 url 后 WebSocket 地址自动跟随。
四、:instance 参数组(实例门面)
实测生成值与仓库默认值对照(默认值摘自 config/config.exs L197 起):
| 参数 | 默认值(config.exs) | 实测实例值 | 解说 |
|---|---|---|---|
name | "Akkoma" | "Akkoma Test" | 实例显示名,出现在 /api/v1/instance 的 title |
email | example@example.com | root@localhost | 管理员联系邮箱,API 公开可见 |
notify_email | noreply@example.com | root@localhost | 发件人地址;配好 SMTP 后才有意义 |
description | "Akkoma: The cooler fediverse server" | 见第十章 | 实例简介(可 HTML),API 的 description 字段 |
short_description | nil | 未设 | 纯文本短简介,未设时 API 回落用 description |
limit | 5_000 | 5000 | 本地贴文长度上限,API 映射为 max_toot_chars |
description_limit | 5_000 | 未设(=默认) | 用户 bio 长度上限 |
remote_limit | 100_000 | 未设 | 远端贴文解析上限 |
upload_limit | 16_000_000 | 未设 | 上传总上限(字节),API 实测回显 16000000 |
avatar_upload_limit | 2_000_000 | 未设 | 头像上限 |
background_upload_limit / banner_upload_limit | 4_000_000 | 未设 | 背景/头图上限 |
languages | ["en"] | 未设 | 实例语言列表 |
poll_limits | %{max_options: 20, max_option_chars: 200, min_expiration: 0, max_expiration: 365*24*60*60} | 未设 | 投票限制,API 原样透出(实测回显一致) |
registrations_open | true | true | 是否开放注册;关闭后配合 mix pleroma.user invite 发邀请 |
invites_enabled | false | 未设 | 邀请制开关 |
static_dir | — | /opt/akkoma/static | 静态目录(前端、自定义 emoji、robots.txt 落点),instance gen 按 --static-dir 写入 |
五、数据库参数
config :pleroma, Pleroma.Repo,
adapter: Ecto.Adapters.Postgres,
username: "akkoma",
password: "akkoma",
database: "akkoma",
hostname: "db"
hostname: "db" 是编排内部服务名解析(部署篇第四章),暴露到公网前应与数据库口令一起改掉。config :pleroma, :database, rum_enabled: false 对应 instance gen 的 --rum N 选项:RUM 索引加速高频搜索但增大写入开销,中小实例保持 false。
3.20.1 无 Redis 参数可配:对源码全文检索 redis 零命中,任务队列由 Oban(PostgreSQL 内建)承担,缓存由应用内 Cachex 承担。
六、上传与媒体参数
config :pleroma, Pleroma.Upload,
filters: [Pleroma.Upload.Filter.Exiftool.ReadDescription, Pleroma.Upload.Filter.Exiftool.StripMetadata],
base_url: ""
config :pleroma, Pleroma.Uploaders.Local, uploads: "/opt/akkoma/uploads"
uploader默认Pleroma.Uploaders.Local(未写即默认),文件落uploads目录;换 S3 时按prod.secret.exs里预留的注释块改Pleroma.Uploaders.S3+config :ex_aws, :s3凭证。filters两项对应instance gen的--strip-uploads-metadata Y(ExifTool 剥离 EXIF)与--read-uploads-description Y(读图片描述作为 alt text),依赖构建时安装的 exiftool。base_url: ""留空 = 媒体走本站路径;S3/CDN 部署才填公网前缀。media_proxy实测被instance gen设为enabled: false(默认配置里是 enabled),即远程图片直连原站加载;redirect_on_failure: true表示代理失败时 302 到原地址。
七、前端参数(config :pleroma, :frontends)
config.exs L743-806 的默认结构(实测摘录):
config :pleroma, :frontends,
primary: %{"name" => "pleroma-fe", "ref" => "stable"},
admin: %{"name" => "admin-fe", "ref" => "stable"},
mastodon: %{"name" => "mastodon-fe", "ref" => "akkoma"},
pickable: [
"pleroma-fe/stable"
],
swagger: %{
"name" => "swagger-ui",
"ref" => "stable",
"enabled" => false
},
available: %{
"pleroma-fe" => %{
"name" => "pleroma-fe",
"blind_trust" => true,
"git" => "https://akkoma.dev/AkkomaGang/akkoma-fe",
"bugtracker" => "https://akkoma.dev/AkkomaGang/akkoma-fe/issues",
"build_url" =>
"https://akkoma-updates.s3-website.fr-par.scw.cloud/frontend/${ref}/akkoma-fe.zip",
"ref" => "stable",
"build_dir" => "dist"
},
...
}
解说:
primary:/web主界面用哪个前端;admin:/pleroma/admin管理端;mastodon:Mastodon 风格前端(不能设为 primary,注释原文 "Mastodon-Fe cannot be set as a primary")。pickable:允许用户在设置里自助切换的前端白名单。swagger.enabled:默认 false,打开后提供 OpenAPI 交互文档。available:已知前端的下载元数据,build_url模板中${ref}被替换为版本号;安装名用 available 的键(mastodon-fe),用仓库名masto-fe会触发 "without a bugtracker; refusing install"(部署篇排障 #5)。- 安装落盘路径固定为
static/frontends/<name>/<ref>,实测目录树:
static/frontends/:
admin-fe
mastodon-fe
pleroma-fe
八、密钥与安全参数
| 参数 | 解说 |
|---|---|
config :joken, default_signer | JWT 签名密钥(实测随机 64 字符),用于 API token;泄露=可伪造任意用户 token |
config :web_push_encryption, :vapid_details | Web Push 密钥对,instance gen 自动生成;public_key 实测同时出现在 /api/v1/instance 的 pleroma.vapid_public_key |
config :pleroma, :http_security, sts: true | HSTS,默认注释未开(prod.secret.exs 预留注释 "Enable Strict-Transport-Security once SSL is working"),证书就绪后再放开 |
configurable_from_database | 实测默认 false;置 true 后管理端 UI 与 mix pleroma.config 的数据库配置层生效(第九章) |
九、文件配置与数据库配置的双轨机制
Akkoma 的配置可以在「文件」与「数据库」间迁移,由 mix pleroma.config 子命令族操作(完整实测见 CLI 篇):
# 启用数据库配置前必须先在文件里打开总闸
config :pleroma, configurable_from_database: true
mix pleroma.config migrate_to_db:把文件配置整体搬进数据库,此后以库内值为准。mix pleroma.config migrate_from_db [--env=prod] [-d] [--path=/tmp]:把库内配置导出回文件config/env.exported_from_db.secret.exs。mix pleroma.config dump [group [key]]/groups/delete [--force]/[--force] reset:查看、删除、清空库内配置。mix pleroma.config dump_to_file pleroma mrf_simple /tmp/mrf_simple.json+load_from_file:以 JSON 批量改复杂参数(如 MRF),官方原文提示 "This will overwrite any existing value in the database, and can cause crashes if you do not have exactly the correct formatting."mix pleroma.config filter_whitelisted:清除未被:database_config_whitelist白名单放行的库内配置。
实测边界行为:总闸为 false 时任何 config 子命令直接拒绝——
=== config groups (db-configurable=false) ===
ConfigDB not enabled. Please check the value of :configurable_from_database in your configuration.
官方文档同时提示:改配置后多数项需要重启实例生效,管理端可访问 /api/v1/pleroma/admin/restart 软重启。
十、参数生效实测验证(改 description 全链路)
操作:在 prod.secret.exs 追加 config :pleroma, :instance, description: "Akkoma 测试实例:quzuo.net 配置实测",然后重启应用服务:
Container akkoma-3.20.1-app Restarting
Container akkoma-3.20.1-app Started
改前 /api/v1/instance 实测回显(节选):
{"description":"Akkoma: The cooler fediverse server","title":"Akkoma Test","max_toot_chars":5000,"upload_limit":16000000,"registrations":true}
改后同一接口实测回显:
{"version": "2.7.2 (compatible; Akkoma 3.20.1-0-gbc62dd8)", "description": "Akkoma 测试实例:quzuo.net 配置实测", "title": "Akkoma Test", "max_toot_chars": 5000, "upload_limit": 16000000, "registrations": true}
结论:文件配置改动必须重启才生效(软重启亦可),生效后立即反映到 Mastodon 兼容 API;/nodeinfo/2.0.json 的 metadata.nodeName/nodeDescription 同步(实测含 "nodeName":"Akkoma Test" 与 postFormats 五种格式 ["text/plain","text/html","text/markdown","text/bbcode","text/x.misskeymarkdown"])。
十一、常见坑小结
url.host先想清楚再 gen:域名会烧进历史数据的 AP ID,事后改域名需要 MRF/迁移工具补救。http.ip默认 127.0.0.1:容器/反代部署必改0.0.0.0,但改完务必用宿主端口映射或反代限制暴露面。configurable_from_database与文件配置互踩:开库配置后文件同名项被库值覆盖,排障时先mix pleroma.config dump看库里存了什么。- 改配置不重启不生效:文件层没有任何热加载(实测第十章);库配置层部分项即时生效、部分仍需重启。
- 密钥文件权限:
instance gen生成即 0640,prod.secret.exs含secret_key_base/default_signer/VAPID 私钥,禁止提交仓库(文件头注释原文 "should not be committed to a repo")。
十二、小结与关联
Akkoma 的配置哲学是「一次 gen、少量覆盖、双轨可选」:instance gen 生成密钥与骨架,实例差异集中在 prod.secret.exs 八十余行内;需要管理端在线调参时再打开 configurable_from_database 走数据库层。参数全集与逐项文档在仓库 config/description.exs(106KB 机器可读),管理 UI 即由它渲染。
- 选型与架构背景:《Akkoma 3.20.1 介绍与选型指南》
- 部署全流程实测:《Akkoma 3.20.1 Docker Compose 部署指南》
- 配置迁移与全部 CLI 任务:《Akkoma 3.20.1 常用 CLI 命令与工具详解》