Etherpad 3.3.9 配置参数详解

Etherpad 3.3.9 配置体系分域详解:env 替换规则、127 个参数默认值与实测行为、3.3.9 新增 padRetention 实测与生产配置模板。

EtherpadEtherpad协作编辑Node.js2026/10/22

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、MINIFY5.1
数据库DB_TYPE、DB_HOST、DB_PORT、DB_NAME、DB_USER、DB_PASS5.2
认证与访问控制AUTHENTICATION_METHOD、ADMIN_PASSWORD、REQUIRE_AUTHENTICATION5.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_SIZE5.6
日志与隐私LOG_LEVEL、DISABLE_IP_LOGGING5.7
导入导出DOCX_EXPORT、SOFFICE、ALLOW_UNKNOWN_FILE_ENDS5.8
更新检查与遥测UPDATES_CHECK_INTERVAL_HOURS、PRIVACY_UPDATE_CHECK5.9

五、核心参数分类详解

5.1 服务器与站点

参数(env)默认值说明
PORT9001服务监听端口;Docker 部署改端口映射即可,一般不动
IP0.0.0.0监听地址
TITLEEtherpad站点标题(首页与浏览器标签)
SKIN_NAMEcolibris皮肤名;内置仅 colibris
SKIN_VARIANTSsuper-light-toolbar super-light-editor light-background皮肤变体(工具栏/编辑器明暗、背景色)
MINIFYtrue前端静态资源压缩
FAVICONnull自定义站点图标
SHOW_RECENT_PADStrue首页显示最近 pad 列表
EXPOSE_VERSIONfalse是否对外暴露版本信息

实测: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_TYPEdirty存储后端:dirty(内置文件 KV,仅测试)/sqlite/mysql/mariadb/postgres/redis/surrealdb 等
DB_HOST / DB_PORTundefined数据库地址/端口
DB_NAME / DB_USER / DB_PASSundefined库名/账号/密码
DB_CHARSETundefined连接字符集(MySQL/MariaDB 用 utf8mb4,PostgreSQL 留空即可)
DB_FILENAMEvar/dirty.db仅 dirty 类型使用的文件路径
DB_COLLECTIONundefined集合/表前缀(部分后端)
DB_URLundefined连接串形式(与分项参数二选一)

实测:生产形态 DB_TYPE=postgres + 连接四件套启动成功,pad 写入后可在库中查到 pad:<padID> 键;数据库连接失败时服务启动报 Error: connect ECONNREFUSED <IP>:5432 并退出重试(restart: always 下自动恢复)。

5.3 认证与访问控制

参数(env)默认值说明
AUTHENTICATION_METHODssosso(内置 OAuth2/OIDC,浏览器授权登录)/ apikey(传统 API key 模式,服务读取 APIKEY.txt)
ADMIN_PASSWORDnull管理台 admin 账号密码(注入 users.admin,is_admin: true);null 时无管理账号
ADMIN_SECRET / USER_SECRETadmin / usersso 内置 OAuth2 客户端密钥(生产必须换强随机值,默认值启动时会打 ERROR 告警)
ADMIN_REDIRECT / USER_REDIRECThttp://localhost:9001/admin/ 等sso 登录后的跳转地址
REQUIRE_AUTHENTICATIONfalse强制所有 pad 访问先登录
REQUIRE_AUTHORIZATIONfalse启用模块级授权(配合 is_admin/is_user 账号体系)
REQUIRE_SESSIONfalse仅允许持会话用户访问
ALLOW_PAD_DELETION_BY_ALL_USERSfalse所有用户可删 pad(默认仅创建者 + 删除令牌)
SUPPRESS_PAD_DELETION_TOKEN_MODALfalse关闭「保存 pad 删除令牌」弹窗(3.3.9 新增,#8319;令牌仍发放仍可用,仅不再弹窗)
COOKIE_SAME_SITELax会话 Cookie 的 SameSite 属性
COOKIE_SESSION_LIFETIME864000000会话有效期(毫秒,默认 10 天)
COOKIE_SESSION_REFRESH_INTERVAL86400000会话刷新间隔(毫秒,默认 1 天)
COOKIE_KEY_ROTATION_INTERVAL86400000Cookie 密钥轮换间隔(毫秒)
TRUST_PROXYfalse信任反向代理的 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_TEXTWelcome to Etherpad!…(官方欢迎文案)新 pad 初始文本;官方要求该变量必须存在(可为空格)
LOWER_CASE_PAD_IDSfalsepadID 强制转小写
PAD_OPTIONS_SHOW_CONTROLStrue显示编辑工具栏
PAD_OPTIONS_SHOW_CHATtrue显示聊天栏
PAD_OPTIONS_SHOW_LINE_NUMBERStrue显示行号
PAD_OPTIONS_NO_COLORSfalse关闭作者修订着色
PAD_OPTIONS_RTLfalse从右到左排版
PAD_OPTIONS_USE_MONOSPACE_FONTfalse等宽字体
PAD_OPTIONS_USER_NAME / PAD_OPTIONS_USER_COLORnull默认作者名/颜色
PAD_OPTIONS_LANGnull编辑器界面语言(null 跟随浏览器)
PAD_SHORTCUTS_ENABLED_*true(约 25 项)各编辑器快捷键开关(Ctrl+B/I/Z、Ctrl+S 保存、Tab、ESC 等)
SUPPRESS_ERRORS_IN_PAD_TEXTfalse不在 pad 内容里显示错误信息
EDIT_ONLYfalse仅编辑模式(隐藏历史/聊天等入口)
AUTOMATIC_RECONNECTION_TIMEOUT0断线自动重连超时秒数(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_DURATION1提交限流窗口(秒)
COMMIT_RATE_LIMIT_POINTS10窗口内允许的提交点数
IMPORT_MAX_FILE_SIZE52428800导入文件上限(字节,默认 50 MB)
IMPORT_EXPORT_MAX_REQ_PER_IP10每窗口每 IP 导入/导出请求上限
IMPORT_EXPORT_RATE_LIMIT_WINDOW90000导入/导出限流窗口(毫秒,默认 90 秒)
SOCKETIO_MAX_HTTP_BUFFER_SIZE1000000socket.io 单 HTTP 包上限(字节);大文档导入报 413 时调大
LOAD_TESTfalse压测模式(放开部分限制,生产严禁开启)

5.7 日志与隐私

参数(env)默认值说明
LOG_LEVELINFODEBUG/INFO/WARN/ERROR;排障用 DEBUG,生产 INFO
DISABLE_IP_LOGGINGfalse不记录作者 IP(隐私合规场景 true)
IP_LOGGINGanonymousIP 记录策略标识
DUMP_ON_UNCLEAN_EXITfalse非正常退出时输出阻碍退出的对象转储(配合排障,日志会提示开启)
GDPR_AUTHOR_ERASURE_ENABLEDfalseGDPR 作者匿名化端点(需配套运维流程才开)

实测:默认 LOG_LEVEL=INFO 启动日志报 [WARN] settings - loglevel: INFO(级别与输出一致);进程退出遇到清理钩子阻塞时日志提示 Enable dumpOnUncleanExit setting to get a dump of objects preventing a clean exit。

5.8 导入导出

参数(env)默认值说明
DOCX_EXPORTtrue允许 docx 等格式导出
SOFFICEnullLibreOffice 路径(官方部署形态已内置,导入 docx/pdf 转换用)
ALLOW_UNKNOWN_FILE_ENDStrue允许导入未知扩展名文件(依赖内容嗅探)

5.9 更新检查与遥测

参数(env)默认值说明
UPDATES_CHECK_INTERVAL_HOURS6新版本检查间隔(小时)
UPDATES_SOURCE / UPDATE_SERVERgithub / https://etherpad.org/ep_infos检查源
UPDATES_GITHUB_REPOether/etherpad比对的仓库
UPDATES_TIERnotify提示策略(notify 仅管理台提示)
UPDATES_REQUIRE_ADMIN_FOR_STATUSfalse状态接口是否要求管理员
PRIVACY_UPDATE_CHECKtrue更新检查隐私横幅提示
PRIVACY_BANNER_ENABLEDfalse首页隐私声明横幅
PRIVACY_PLUGIN_CATALOGtrue管理台在线插件目录

六、生产配置模板

适用场景: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 未设置导致无管理账号。

八、参考链接

  1. 官方配置文档:https://docs.etherpad.org/settings.html (查询日期 2026-10-22)
  2. 内置 settings.json 模板(参数与默认值的权威来源):https://github.com/ether/etherpad/blob/HEAD/settings.json.template (查询日期 2026-10-22)
  3. v3.3.9 Release Notes(padRetention / suppressPadDeletionTokenModal 等新参数):https://github.com/ether/etherpad/releases/tag/v3.3.9 (查询日期 2026-10-22)
  4. 站内延伸:《Etherpad 介绍与选型指南》《Etherpad 3.3.9 Docker Compose 部署指南》《Etherpad 3.3.9 常用 CLI 命令与工具详解》