Etherpad 3.3.9 配置参数详解
Etherpad 3.3.9 配置体系分域详解:env 替换规则、127 个参数默认值与实测行为、3.3.9 新增 padRetention 实测与生产配置模板。
Etherpad 3.3.9 配置参数详解
目标:逐项梳理 Etherpad 3.3.9 的配置体系——环境变量与 settings.json 两种配置方式的替换规则、约 130 个可配置参数按域分类详解(含义/官方默认值/实测行为)、3.3.9 新增的 padRetention 特性与一份生产配置模板。全部默认值实测提取自官方发行版内置 settings.json 模板,关键参数行为在 Ubuntu 22.04 实测验证(2026-10-22,部署形态见《Etherpad 3.3.9 Docker Compose 部署指南》)。
一、环境信息
- 操作系统:Ubuntu 22.04(x86_64)
- Etherpad:3.3.9(官方发行版部署,安装路径
/opt/etherpad-lite,配置文件/opt/etherpad-lite/settings.json) - 配置载体:官方发行版内置 settings.json 模板(约 900 行、含注释),环境变量经模板占位符注入
- 实测参数清单来源:对内置模板执行占位符提取,得到 133 条
${ENV:默认值}映射(去模板示例后约 127 个有效参数)
二、前置条件
# 服务运行中、配置文件可读
curl -s http://127.0.0.1:8134/health
ls -la /opt/etherpad-lite/settings.json
实测输出:
{"status":"pass","releaseId":"3.3.9"}
-rw-r--r-- 1 etherpad root 32850 Oct 18 18:18 settings.json
三、参数查看与修改方式
3.1 查看:三种途径
一查内置模板原文(全部参数与注释都在这里):
cat /opt/etherpad-lite/settings.json | head -30
实测输出(节选):
/**
* THIS IS THE SETTINGS FILE THAT IS COPIED INSIDE THE DOCKER CONTAINER.
*
* By default, some runtime customizations are supported (see the
* documentation).
...
* "port": "${PORT:9001}"
* "minify": "${MINIFY}"
* "skinName": "${SKIN_NAME:colibris}"
二查运行日志(启动时打印加载路径与日志级别):
grep -E "settings loaded|loglevel" <服务进程日志> | tail -2
服务日志随进程 stdout 输出,按托管方式获取(systemd 托管走 journalctl,脚本托管重定向到日志文件)。实测输出:
[INFO] settings - settings loaded from: /opt/etherpad-lite/settings.json
[WARN] settings - loglevel: INFO
三查管理台:浏览器访问 http://<IP>:8134/admin/(admin 账号登录),设置页直接展示当前生效配置(由 SHOW_SETTINGS_IN_ADMIN_PAGE 控制显示,默认 true)。
3.2 修改:环境变量优先,文件挂载兜底
方式一(推荐):Compose 的 environment: 段注入环境变量。方式二:挂载自定义 settings.json(精细参数如 padRetention 用此方式)。两种方式可叠加——挂载文件里仍可用 ${ENV:default} 占位符,替换发生在读取时。
⚠️ 排障实录:挂载的 settings.json 若语法不合法,服务启动循环失败,日志报
There was an error processing your settings file from /opt/etherpad-lite/settings.json: PropertyNameExpected at offset <数字>。实测踩坑:在注释块*/结尾后接逗号再写新属性(*/\n ,\n "padRetention": {...})会触发该错误;把新属性插到注释块之前即可。修复后重启正常。
3.3 环境变量替换规则(官方模板注释实测摘录)
| 环境变量取值 | 生效结果 |
|---|---|
"true" / "false" | 布尔 true / false |
数字字符串(如 "5432") | 数值 |
"null" | null |
"undefined" | 从配置中移除该键(数组内则变 null) |
| 其他任意字符串 | 原样字符串 |
未设置且有默认 ${V:default} | 取默认值 |
未设置且无默认 ${V} | null(官方提示未来可能变更) |
⚠️ 注意:Compose 里布尔变量必须写成字符串
"true"/"false",不能写 YAML 布尔(否则注入的是 True/False 字面量而非模板期望的替换串)。
四、参数总览
按功能域汇总 3.3.9 全部可配置参数域及代表参数(完整默认值见各域详解小节):
| 参数域 | 代表参数 | 子节 |
|---|---|---|
| 服务器与站点 | PORT、IP、TITLE、SKIN_NAME、MINIFY | 5.1 |
| 数据库 | DB_TYPE、DB_HOST、DB_PORT、DB_NAME、DB_USER、DB_PASS | 5.2 |
| 认证与访问控制 | AUTHENTICATION_METHOD、ADMIN_PASSWORD、REQUIRE_AUTHENTICATION | 5.3 |
| pad 行为 | DEFAULT_PAD_TEXT、LOWER_CASE_PAD_IDS、PAD_OPTIONS_* | 5.4 |
| pad 保留(3.3.9 新增) | padRetention(仅文件配置) | 5.5 |
| 速率与资源限制 | COMMIT_RATE_LIMIT_*、IMPORT_MAX_FILE_SIZE、SOCKETIO_MAX_HTTP_BUFFER_SIZE | 5.6 |
| 日志与隐私 | LOG_LEVEL、DISABLE_IP_LOGGING | 5.7 |
| 导入导出 | DOCX_EXPORT、SOFFICE、ALLOW_UNKNOWN_FILE_ENDS | 5.8 |
| 更新检查与遥测 | UPDATES_CHECK_INTERVAL_HOURS、PRIVACY_UPDATE_CHECK | 5.9 |
五、核心参数分类详解
5.1 服务器与站点
| 参数(env) | 默认值 | 说明 |
|---|---|---|
PORT | 9001 | 服务监听端口;Docker 部署改端口映射即可,一般不动 |
IP | 0.0.0.0 | 监听地址 |
TITLE | Etherpad | 站点标题(首页与浏览器标签) |
SKIN_NAME | colibris | 皮肤名;内置仅 colibris |
SKIN_VARIANTS | super-light-toolbar super-light-editor light-background | 皮肤变体(工具栏/编辑器明暗、背景色) |
MINIFY | true | 前端静态资源压缩 |
FAVICON | null | 自定义站点图标 |
SHOW_RECENT_PADS | true | 首页显示最近 pad 列表 |
EXPOSE_VERSION | false | 是否对外暴露版本信息 |
实测:TITLE 与 SKIN_NAME 注入后启动日志出现 Using skin "colibris" in dir: /opt/etherpad-lite/src/static/skins/colibris;ENABLE_DARK_MODE 默认 true(跟随浏览器暗色偏好,3.3.9 已修复暗色模式下编辑器外部元素的配色,官方 #8271)。
5.2 数据库
| 参数(env) | 默认值 | 说明 |
|---|---|---|
DB_TYPE | dirty | 存储后端:dirty(内置文件 KV,仅测试)/sqlite/mysql/mariadb/postgres/redis/surrealdb 等 |
DB_HOST / DB_PORT | undefined | 数据库地址/端口 |
DB_NAME / DB_USER / DB_PASS | undefined | 库名/账号/密码 |
DB_CHARSET | undefined | 连接字符集(MySQL/MariaDB 用 utf8mb4,PostgreSQL 留空即可) |
DB_FILENAME | var/dirty.db | 仅 dirty 类型使用的文件路径 |
DB_COLLECTION | undefined | 集合/表前缀(部分后端) |
DB_URL | undefined | 连接串形式(与分项参数二选一) |
实测:生产形态 DB_TYPE=postgres + 连接四件套启动成功,pad 写入后可在库中查到 pad:<padID> 键;数据库连接失败时服务启动报 Error: connect ECONNREFUSED <IP>:5432 并退出重试(restart: always 下自动恢复)。
5.3 认证与访问控制
| 参数(env) | 默认值 | 说明 |
|---|---|---|
AUTHENTICATION_METHOD | sso | sso(内置 OAuth2/OIDC,浏览器授权登录)/ apikey(传统 API key 模式,服务读取 APIKEY.txt) |
ADMIN_PASSWORD | null | 管理台 admin 账号密码(注入 users.admin,is_admin: true);null 时无管理账号 |
ADMIN_SECRET / USER_SECRET | admin / user | sso 内置 OAuth2 客户端密钥(生产必须换强随机值,默认值启动时会打 ERROR 告警) |
ADMIN_REDIRECT / USER_REDIRECT | http://localhost:9001/admin/ 等 | sso 登录后的跳转地址 |
REQUIRE_AUTHENTICATION | false | 强制所有 pad 访问先登录 |
REQUIRE_AUTHORIZATION | false | 启用模块级授权(配合 is_admin/is_user 账号体系) |
REQUIRE_SESSION | false | 仅允许持会话用户访问 |
ALLOW_PAD_DELETION_BY_ALL_USERS | false | 所有用户可删 pad(默认仅创建者 + 删除令牌) |
SUPPRESS_PAD_DELETION_TOKEN_MODAL | false | 关闭「保存 pad 删除令牌」弹窗(3.3.9 新增,#8319;令牌仍发放仍可用,仅不再弹窗) |
COOKIE_SAME_SITE | Lax | 会话 Cookie 的 SameSite 属性 |
COOKIE_SESSION_LIFETIME | 864000000 | 会话有效期(毫秒,默认 10 天) |
COOKIE_SESSION_REFRESH_INTERVAL | 86400000 | 会话刷新间隔(毫秒,默认 1 天) |
COOKIE_KEY_ROTATION_INTERVAL | 86400000 | Cookie 密钥轮换间隔(毫秒) |
TRUST_PROXY | false | 信任反向代理的 X-Forwarded-* 头(仅在可信代理后开 true) |
实测:ADMIN_PASSWORD=q1w2e3r4 注入后管理台 admin 账号可登录;AUTHENTICATION_METHOD=apikey 下 HTTP API 用 APIKEY.txt 认证(API 侧实测见《Etherpad 3.3.9 常用 CLI 命令与工具详解》6.1/6.2 节),sso 模式下同请求报 {"code":4,"message":"no or wrong API Key"}。
5.4 pad 行为
| 参数(env) | 默认值 | 说明 |
|---|---|---|
DEFAULT_PAD_TEXT | Welcome to Etherpad!…(官方欢迎文案) | 新 pad 初始文本;官方要求该变量必须存在(可为空格) |
LOWER_CASE_PAD_IDS | false | padID 强制转小写 |
PAD_OPTIONS_SHOW_CONTROLS | true | 显示编辑工具栏 |
PAD_OPTIONS_SHOW_CHAT | true | 显示聊天栏 |
PAD_OPTIONS_SHOW_LINE_NUMBERS | true | 显示行号 |
PAD_OPTIONS_NO_COLORS | false | 关闭作者修订着色 |
PAD_OPTIONS_RTL | false | 从右到左排版 |
PAD_OPTIONS_USE_MONOSPACE_FONT | false | 等宽字体 |
PAD_OPTIONS_USER_NAME / PAD_OPTIONS_USER_COLOR | null | 默认作者名/颜色 |
PAD_OPTIONS_LANG | null | 编辑器界面语言(null 跟随浏览器) |
PAD_SHORTCUTS_ENABLED_* | true(约 25 项) | 各编辑器快捷键开关(Ctrl+B/I/Z、Ctrl+S 保存、Tab、ESC 等) |
SUPPRESS_ERRORS_IN_PAD_TEXT | false | 不在 pad 内容里显示错误信息 |
EDIT_ONLY | false | 仅编辑模式(隐藏历史/聊天等入口) |
AUTOMATIC_RECONNECTION_TIMEOUT | 0 | 断线自动重连超时秒数(0=不自动重连) |
实测:LOWER_CASE_PAD_IDS="true" 注入重启后,API 创建 padID=MiXeDcase99,库中实际键为 pad:mixedcase99(大小写全部归一);DEFAULT_PAD_TEXT="Welcome to Etherpad" 生效于新建 pad 初始内容。
5.5 pad 保留(3.3.9 新增,仅文件配置)
padRetention 是 3.3.9 的新特性(官方 #8340):定期清理 N 天无人编辑的 pad,替代已停止维护的 ep_delete_after_delay 插件,且不再产生 HTML 归档副本。它没有环境变量入口,只能在 settings.json 配置:
"padRetention": {
"enabled": true,
"deleteAfterDays": 180,
"warnBeforeDays": 14,
"sweepIntervalHours": 24,
"excludeGroupPads": true,
"excludePattern": "^archive_",
"dryRun": true
}
逐项说明:enabled 总开关(默认关);deleteAfterDays 超过 N 天无编辑即删(默认建议 180);warnBeforeDays 删除前 N 天给出警告(面向通知类插件);sweepIntervalHours 扫描间隔小时数;excludeGroupPads 跳过分组 pad;excludePattern 按正则豁免 padID;dryRun 预演模式——只打日志不真删,官方默认且强烈建议先观察。
实测:挂载含上述配置的 settings.json 重启后,启动日志出现:
[INFO] padRetention - pad retention in DRY RUN (nothing is deleted): pads unedited for 180 day(s) would be deleted
确认机制生效;生产观察一段时间(日志无误伤)后将 dryRun 改 false 才真正删除。
5.6 速率与资源限制
| 参数(env) | 默认值 | 说明 |
|---|---|---|
COMMIT_RATE_LIMIT_DURATION | 1 | 提交限流窗口(秒) |
COMMIT_RATE_LIMIT_POINTS | 10 | 窗口内允许的提交点数 |
IMPORT_MAX_FILE_SIZE | 52428800 | 导入文件上限(字节,默认 50 MB) |
IMPORT_EXPORT_MAX_REQ_PER_IP | 10 | 每窗口每 IP 导入/导出请求上限 |
IMPORT_EXPORT_RATE_LIMIT_WINDOW | 90000 | 导入/导出限流窗口(毫秒,默认 90 秒) |
SOCKETIO_MAX_HTTP_BUFFER_SIZE | 1000000 | socket.io 单 HTTP 包上限(字节);大文档导入报 413 时调大 |
LOAD_TEST | false | 压测模式(放开部分限制,生产严禁开启) |
5.7 日志与隐私
| 参数(env) | 默认值 | 说明 |
|---|---|---|
LOG_LEVEL | INFO | DEBUG/INFO/WARN/ERROR;排障用 DEBUG,生产 INFO |
DISABLE_IP_LOGGING | false | 不记录作者 IP(隐私合规场景 true) |
IP_LOGGING | anonymous | IP 记录策略标识 |
DUMP_ON_UNCLEAN_EXIT | false | 非正常退出时输出阻碍退出的对象转储(配合排障,日志会提示开启) |
GDPR_AUTHOR_ERASURE_ENABLED | false | GDPR 作者匿名化端点(需配套运维流程才开) |
实测:默认 LOG_LEVEL=INFO 启动日志报 [WARN] settings - loglevel: INFO(级别与输出一致);进程退出遇到清理钩子阻塞时日志提示 Enable dumpOnUncleanExit setting to get a dump of objects preventing a clean exit。
5.8 导入导出
| 参数(env) | 默认值 | 说明 |
|---|---|---|
DOCX_EXPORT | true | 允许 docx 等格式导出 |
SOFFICE | null | LibreOffice 路径(官方部署形态已内置,导入 docx/pdf 转换用) |
ALLOW_UNKNOWN_FILE_ENDS | true | 允许导入未知扩展名文件(依赖内容嗅探) |
5.9 更新检查与遥测
| 参数(env) | 默认值 | 说明 |
|---|---|---|
UPDATES_CHECK_INTERVAL_HOURS | 6 | 新版本检查间隔(小时) |
UPDATES_SOURCE / UPDATE_SERVER | github / https://etherpad.org/ep_infos | 检查源 |
UPDATES_GITHUB_REPO | ether/etherpad | 比对的仓库 |
UPDATES_TIER | notify | 提示策略(notify 仅管理台提示) |
UPDATES_REQUIRE_ADMIN_FOR_STATUS | false | 状态接口是否要求管理员 |
PRIVACY_UPDATE_CHECK | true | 更新检查隐私横幅提示 |
PRIVACY_BANNER_ENABLED | false | 首页隐私声明横幅 |
PRIVACY_PLUGIN_CATALOG | true | 管理台在线插件目录 |
六、生产配置模板
适用场景:8-16GB 内存服务器、NVMe SSD、团队规模 50-500 人的自托管协同写作实例。结构为「Compose 环境变量 + settings.json 文件」双层:环境变量管连接与开关,settings.json 管精细策略。
服务环境变量(生产值示例,密码请换强值;注入方式按部署形态——Compose 的 environment 段、systemd 的 Environment= 或启动脚本 export):
environment:
NODE_ENV: production
ADMIN_PASSWORD: q1w2e3r4
DB_TYPE: postgres
DB_HOST: postgres
DB_PORT: "5432"
DB_NAME: etherpad
DB_USER: etherpad
DB_PASS: q1w2e3r4
DEFAULT_PAD_TEXT: "Welcome to Etherpad"
LOG_LEVEL: INFO
TRUST_PROXY: "true"
AUTHENTICATION_METHOD: apikey
LOWER_CASE_PAD_IDS: "true"
DISABLE_IP_LOGGING: "true"
/opt/etherpad/data/settings.json 追加段(挂载方式见部署指南第八节,注意新属性插在注释块之前——3.2 节排障实录):
"padRetention": {
"enabled": true,
"deleteAfterDays": 180,
"warnBeforeDays": 14,
"sweepIntervalHours": 24,
"excludeGroupPads": true,
"excludePattern": "^archive_",
"dryRun": true
},
模板要点解读:
TRUST_PROXY: "true"仅在 Nginx 等可信反代之后启用,配合代理传递真实客户端 IP;DISABLE_IP_LOGGING: "true"面向隐私合规要求;如无合规压力可保持默认以保留审计能力;padRetention先以dryRun: true上线观察扫描日志,确认无误伤后翻false;- 数据库密码等敏感值可用
${VAR}占位由 Compose 从.env注入——这与 3.3 节的模板占位符是两层机制(Compose 层先注入,Etherpad 层再替换),互不冲突; - 插件体系扩展(登录增强、Markdown、TOC 等)通过
ep_*插件安装,操作与实测见《Etherpad 3.3.9 常用 CLI 命令与工具详解》5.1 节。
七、常见问题
Q1:改了环境变量不生效
确认配置修改后按部署形态完整重建服务实例(而非仅重启进程;进程重启不重读环境变量)。布尔值是否写成了字符串 "true"(YAML 布尔会静默失效)。
Q2:启动循环失败,日志报 PropertyNameExpected at offset N
挂载的 settings.json 语法错误(常见:注释块后接逗号新属性)。按 3.2 节排障实录调整插入位置。
Q3:某参数想恢复默认
环境变量方式:删掉该变量(模板默认值即生效);文件方式:删除该键或把值改成 "undefined"(按 3.3 规则该键从配置移除,回落到代码内置默认)。
Q4:大文档导入报 413 或失败
调大 SOCKETIO_MAX_HTTP_BUFFER_SIZE(如 "10000000")并确认 IMPORT_MAX_FILE_SIZE 覆盖目标文件大小。
Q5:管理台看不到设置页
SHOW_SETTINGS_IN_ADMIN_PAGE 被设为 "false";或 ADMIN_PASSWORD 未设置导致无管理账号。
八、参考链接
- 官方配置文档:https://docs.etherpad.org/settings.html (查询日期 2026-10-22)
- 内置 settings.json 模板(参数与默认值的权威来源):https://github.com/ether/etherpad/blob/HEAD/settings.json.template (查询日期 2026-10-22)
- v3.3.9 Release Notes(padRetention / suppressPadDeletionTokenModal 等新参数):https://github.com/ether/etherpad/releases/tag/v3.3.9 (查询日期 2026-10-22)
- 站内延伸:《Etherpad 介绍与选型指南》《Etherpad 3.3.9 Docker Compose 部署指南》《Etherpad 3.3.9 常用 CLI 命令与工具详解》