CryptPad 2026.5.1 配置参数详解
CryptPad 2026.5.1 服务端 config.js 与客户端 application_config 两域参数逐项详解:官方默认值、load-config 强制逻辑、/api/config 实测回显、SSO 插件配置与生产配置模板。
CryptPad 2026.5.1 配置参数详解
目标:逐项讲清 CryptPad 2026.5.1 的服务端配置文件(
config/config.js)与客户端应用配置(customize/application_config.js)两域参数的含义、官方默认值与实测行为,并给出可直接套用的生产配置模板。全部默认值取自 2026.5.1 官方源码(config/config.example.js、lib/load-config.js、www/common/application_config_internal.js),实测行为均在本机部署的 2026.5.1 实例上验证(实测环境见 《CryptPad 2026.5.1 Docker Compose 部署指南》)。
一、环境信息
- 实例版本:CryptPad 2026.5.1(版本标签
version-2026.5.1,运行时 Node.js v24.16.0); - 参数取证文件:
config/config.example.js(340 行)、lib/load-config.js(默认值强制逻辑)、config/sso.example.js(SSO 样例)、www/common/application_config_internal.js(客户端 AppConfig 内部默认); - 实测验证手段:
/api/config接口实测回显、首启自动生成的config.js逐行核对、修改后重启观察行为; - 部署形态:官方 Compose 方案,配置文件路径
/opt/cryptpad/config/config.js(源码安装对应<安装目录>/config/config.js,下文统一按此路径书写)。
二、前置条件
- 已有一套可运行的 CryptPad 2026.5.1 实例(部署见部署指南篇);
- 明确两个配置域的分工:服务端行为(域名、端口、存储、配额、日志)改
config/config.js;界面与应用行为(可用应用清单、页脚链接、白板配色)改customize/application_config.js;两域互不覆盖; - 改服务端配置需要重启服务生效;改客户端配置随静态资源下发,重建构建产物后生效(重启服务即可,启动流程每次会重跑前端构建)。
三、参数查看与修改方式
3.1 服务端配置的加载链路(源码实测)
服务端启动时由 lib/load-config.js 加载配置,加载规则实测核对如下:
- 默认读取
../config/config.js;环境变量CRYPTPAD_CONFIG可指定其他绝对路径; config.js不存在时回退加载config/config.example.js并打印提示:Config not found, loading the example config. You can customize the configuration by copying config/config.example.js to <configPath>;config.js存在但语法错误时服务直接终止(实测错误文案:config/config.js is faulty. See stacktrace below for more information. Terminating.);- 加载后对关键参数做默认值强制(
load-config.js源码逻辑):inactiveTime非正数→90;archiveRetentionTime非正数→90;maxUploadSize非正数→20 MB;defaultStorageLimit非正数→50 MB;premiumUploadSize非正数或小于maxUploadSize时直接删除该键。
⚠️ 注意一个官方注释与代码不一致的点:
config.example.js中archiveRetentionTime的注释写「defaults to 15 days」,但load-config.js实际强制默认为 90 天。以代码为准:未配置时归档保留 90 天。
3.2 查看当前生效值的三种方法
方法一,/api/config 接口(客户端实际下发的运行时配置,实测回显):
curl -s http://localhost:8145/api/config
define(function(){;
return {
"requireConf": {
"waitSeconds": 600,
"urlArgs": "ver=2026.5.1-1792616523994"
},
"removeDonateButton": false,
"httpUnsafeOrigin": "http://localhost:8145",
"adminKeys": [],
"moderatorKeys": [],
"inactiveTime": 90,
"defaultStorageLimit": 52428800,
"maxUploadSize": 20971520,
"premiumUploadSize": false,
"restrictRegistration": false,
"httpSafeOrigin": "http://127.0.0.1:8145",
"enableEmbedding": false,
"listMyInstance": false,
"sso": false
};
});
方法二,直接读配置文件:grep -vE '^\s*(//|/\*|\*)' /opt/cryptpad/config/config.js | grep -v '^\s*$';
方法三,管理面板:注册管理员账户后访问 /admin/,配额、注册开关、实例信息等可在界面查看与修改。
3.3 修改方式
服务端:编辑 /opt/cryptpad/config/config.js 后重启服务进程。注意首启自动生成的 config.js 若未持久化,重建部署后会随实例状态一起丢失,生产应把配置目录固定挂载(方法见部署指南篇第八章)。
客户端:cp /opt/cryptpad/customize.dist/application_config.js /opt/cryptpad/customize/application_config.js 后按需修改——这是官方注释推荐的标准做法(源文件注释原文:把 customize.dist/application_config.js 复制到 customize/ 再改)。
四、参数总览
4.1 服务端 config.js 参数一览(默认值来源:config.example.js 与 load-config.js 实查)
| 参数 | 官方默认 | 分类 |
|---|---|---|
httpUnsafeOrigin | 'http://localhost:3000' | 双域与监听 |
httpSafeOrigin | 未注释(派生为主域主机+httpSafePort) | 双域与监听 |
httpAddress | 示例值 '0.0.0.0' | 双域与监听 |
httpPort | 3000(注释) | 双域与监听 |
httpSafePort | 3001 = httpPort + 1(注释) | 双域与监听 |
websocketPort | 3003(注释) | 双域与监听 |
maxWorkers | CPU 核数(注释) | 双域与监听 |
otpSessionExpiration | 7×24(小时,注释) | 会话与账户 |
enforceMFA | false(注释) | 会话与账户 |
logIP | false(注释) | 隐私合规 |
adminKeys | [](示例显式给出) | 管理 |
restrictRegistration | false(/api/config 实测) | 管理 |
adminEmail | 'i.did.not.read.my.config@cryptpad.fr'(load-config 提示逻辑) | 管理 |
inactiveTime | 90 天(load-config 强制) | 存储生命周期 |
archiveRetentionTime | 90 天(load-config 强制;example 注释写 15 天) | 存储生命周期 |
accountRetentionTime | 365(注释态) | 存储生命周期 |
disableIntegratedEviction | false(注释态) | 存储生命周期 |
maxUploadSize | 20 MB(load-config 强制) | 上传与配额 |
premiumUploadSize | 未设置(load-config 删除无效值) | 上传与配额 |
defaultStorageLimit | 50 MB(load-config 强制) | 上传与配额 |
filePath | './datastore/' | 数据目录 |
archivePath | './data/archive' | 数据目录 |
pinPath | './data/pins' | 数据目录 |
taskPath | './data/tasks' | 数据目录 |
blockPath | './block' | 数据目录 |
blobPath | './blob' | 数据目录 |
blobStagingPath | './data/blobstage' | 数据目录 |
decreePath | './data/decrees' | 数据目录 |
logPath | './data/logs' | 数据目录 |
logToStdout | false(示例显式给出) | 日志 |
logLevel | 'info'(示例显式给出) | 日志 |
logFeedback | false(示例显式给出) | 日志 |
verbose | false(示例显式给出) | 日志 |
installMethod | 'docker'(示例显式给出) | 其他 |
4.2 客户端 application_config 参数一览(默认值来源:application_config_internal.js 实查)
| 参数 | 官方默认 | 作用 |
|---|---|---|
availablePadTypes | ['drive','teams','sheet','doc','presentation','pad','kanban','code','form','poll','whiteboard','file','contacts','slide','convert','diagram'] | 首页可创建的应用清单 |
registeredOnlyTypes | ['file','contacts','notifications','support'] | 仅注册用户可用的应用 |
hiddenTypes | ['drive','teams','contacts','todo','file','accounts','calendar','poll','convert'] | 不在创建弹窗展示的类型 |
premiumTypes | 注释态 ['doc','presentation'] | 视为「高级」的应用(需自定义配额才可见) |
enableEarlyAccess | false | 早期访问功能开关 |
availableLanguages | 注释态(示例 ['en','fr','de']) | 实例可用语言 |
imprint / privacy / terms / roadmap / status | false | 页脚法务/状态页链接 |
source | true | 「关于」菜单源码链接(AGPL 合规项) |
hostDescription | {} | 首页社区实例说明文案 |
notificationTimeout | 5000(毫秒) | 通知显示时长 |
disableUserlistNotifications | false | 用户进出通知开关 |
whiteboardPalette | 17 色数组 | 白板默认色板 |
appBackgroundColor | '#666' | 居中内容应用背景色 |
enableTemplates | true | 模板功能开关 |
enableHistory | true | 历史版本按钮开关 |
loginSalt | '' | 密码哈希盐(见 5.2 警示) |
minimumPasswordLength | 8 | 密码最小长度 |
badStateTimeout | 30000(毫秒) | 同步失败中断会话时限 |
supportLanguages | 未设置(示例 ['en','fr']) | 工单面板支持语言 |
surveyURL | 未设置 | 首页问卷链接(设 '' 隐藏) |
五、核心参数分类详解(服务端)
5.1 双域与监听
CryptPad 的安全模型建立在「主域 + 沙箱域」双源之上(架构说明见 《CryptPad 介绍与选型指南》第三章):
| 参数 | 说明与实测行为 |
|---|---|
httpUnsafeOrigin | 客户端访问实例的主域 URL。生产必须 HTTPS 默认端口(官方注释:https://cryptpad.fr 形态)。实测注入 http://localhost:8145 后 /api/config 原样下发 |
httpSafeOrigin | 沙箱域 URL,必须与主域不同源(官方注释强调,否则沙箱体系失效)。显式设置后服务不再在 httpSafePort 起监听,沙箱内容由反代把沙箱域名转发主服务端口实现(实测:设置后 3001 无监听,见部署指南篇 4.6 排障);未设置时进入开发模式,派生沙箱源为主域主机 + httpSafePort |
httpAddress | node 监听地址。示例值 '0.0.0.0'(官方注释默认监听 localhost);本机反代用 127.0.0.1 更收敛,跨机反代需 0.0.0.0,实测默认即 0.0.0.0 |
httpPort | 主 HTTP 端口,默认 3000 |
httpSafePort | 开发模式沙箱监听端口,默认 httpPort + 1(3001) |
websocketPort | WebSocket(Netflux 协作通道)端口,默认 3003;生产由反代把 /cryptpad_websocket 路径转发到此端口(实测 101 握手成功,见部署指南篇 4.5) |
maxWorkers | CPU 密集任务(加密、转码)的 worker 进程数;官方注释说明大核数宿主可限流,默认每核一个 |
5.2 会话与账户安全
| 参数 | 默认 | 说明 |
|---|---|---|
otpSessionExpiration | 7*24(小时) | OTP 二次验证会话有效期,默认 7 天(官方注释) |
enforceMFA | false | 设 true 后强制所有注册用户启用 TOTP 多因素(官方注释) |
loginSalt(客户端域) | '' | ⚠️ 官方注释原文警示:密码以 scrypt 加用户名加盐,该值追加到用户名上使彩虹表攻击无法跨实例复用;只能在实例首次创建时设定,事后修改会导致全部现有用户无法登录 |
minimumPasswordLength(客户端域) | 8 | 注册密码最小长度 |
5.3 隐私与合规
logIP(默认 false):开启后每条 WebSocket 连接记录「连接 ID + 用户公钥 + IP」,官方注释明确该选项用于满足特定司法辖区留日志要求,且要求日志级别为 info 或更低。默认关闭符合 CryptPad「最小化可收集信息」的定位;开启与否应取决于合规义务而非运维习惯。
5.4 管理参数
| 参数 | 说明与实测行为 |
|---|---|
adminKeys | 管理面板访问白名单,元素为用户「设置页」里查到的公钥签名串,格式 ["[user@example.com/<公钥串>]"]。实测新实例 /api/config 下发 adminKeys: [];部署日志中的 /install/#<令牌> 链接注册的第一个账户可直接在面板中自助添加 |
restrictRegistration | 限制开放注册。/api/config 实测默认 false;关闭注册后仅管理员可建账户 |
adminEmail | 官方预留提醒机制:未修改时启动日志会提示 You can configure the administrator email (adminEmail) in your config/config.js file(load-config 源码实测) |
5.5 存储生命周期
| 参数 | 默认 | 说明与实测 |
|---|---|---|
inactiveTime | 90 天 | 未被任何注册用户「钉住」的文档,闲置超过该天数后可被清理(官方注释;/api/config 实测下发 90) |
archiveRetentionTime | 90 天 | 删除数据进归档区后的保留天数;⚠️ example 注释写 15 天、load-config.js 代码强制 90 天,以代码为准 |
accountRetentionTime | 365(注释态) | 闲置账户数据保留天数;注释掉即永久保留(官方注释) |
disableIntegratedEviction | false(注释态) | 自 3.23.0 起服务端自动周期执行不活跃数据清理;设 true 可改为纯手动跑 scripts/evict-inactive.js(脚本用法见 《CryptPad 2026.5.1 常用 CLI 命令与工具详解》) |
5.6 上传与配额
| 参数 | 默认 | 说明与实测 |
|---|---|---|
maxUploadSize | 20 MB | 单文件上传上限(/api/config 实测 20971520);生产放大后需同步调反代 client_max_body_size |
premiumUploadSize | 未设置 | 付费套餐用户的上传上限;load-config.js 实测:非正数或 ≤ maxUploadSize 时该键被删除,/api/config 显示 false |
defaultStorageLimit | 50 MB | 未付费用户默认存储配额(/api/config 实测 52428800 字节) |
5.7 数据目录
九个路径参数官方默认值如下(全部相对 CryptPad 安装目录;按部署指南篇部署时这些目录已映射为持久化存储,对照关系见其 5.1 节):
| 参数 | 默认值 | 内容 |
|---|---|---|
filePath | './datastore/' | 协作文档主存储(每文档一文件,官方注释:目录不存在会自动创建) |
archivePath | './data/archive' | 删除数据归档区(恢复用 scripts/restore-archived.js) |
pinPath | './data/pins' | 用户钉住文档的引用记录 |
taskPath | './data/tasks' | 定时任务队列 |
blockPath | './block' | 用户认证块 |
blobPath | './blob' | 加密文件块存储 |
blobStagingPath | './data/blobstage' | 上传未完成块的暂存区 |
decreePath | './data/decrees' | 服务端操作 decree 日志 |
logPath | './data/logs' | NDJSON 磁盘日志(按 UTC 日期分目录,实测目录形如 data/logs/26/) |
5.8 日志参数
| 参数 | 默认 | 说明 |
|---|---|---|
logToStdout | false | 日志是否同时打 stdout(排障时建议临时开启,配合服务日志实时查看) |
logLevel | 'info' | 级别从细到粗:silly, verbose, debug, feedback, info, warn, error;官方注释:info 只输出 info/warn/error |
logFeedback | false | 用户使用反馈事件是否落日志(需 logLevel 包含 feedback) |
verbose | false | 详细日志开关 |
installMethod | 'docker' | 遥测自报安装方式(官方注释:用于统计非官方安装方式占比;源码安装可改 'git') |
六、客户端应用配置详解(application_config)
修改入口是 customize/application_config.js(从 customize.dist/ 复制,见 3.3),其内部默认值定义在 www/common/application_config_internal.js。核心项:
6.1 应用可见性三件套
availablePadTypes(默认含 16 类):首页「新建」弹窗可展示的应用清单;官方注释要求永远不要从清单移除drive(否则云盘不可达);registeredOnlyTypes(默认file/contacts/notifications/support):仅注册用户可用类型,官方注释同样警告默认项不可随意删(这些功能无账户无法工作);hiddenTypes(默认 10 类):不进创建弹窗但功能仍存在的类型,默认隐藏了drive/teams/contacts/todo/file/accounts/calendar/poll/convert。
三者关系实测理解:availablePadTypes 决定「有哪些可创建」,hiddenTypes 决定「哪些不进弹窗」,registeredOnlyTypes 决定「哪些要登录」。例如默认配置下 calendar 可用但藏于独立入口。
6.2 高级与早期访问
enableEarlyAccess(false):官方注释说明新应用可能先以「早期访问」状态引入,可能含缺陷甚至导致内容丢失,默认关闭;premiumTypes(注释态['doc','presentation']):Word/演示两应用在 2026.5.1 被视为实验性,官方注释原话——默认对用户隐藏,除非经管理面板授予自定义配额,且「此行为不受官方支持,改动后官方不提供帮助」。
6.3 页脚与法务链接
imprint(版权页)、privacy(隐私政策)、terms(服务条款)、roadmap(路线图)、status(状态页)五项默认 false(不显示);source 默认 true——这是 AGPL 许可的合规项:官方注释要求向所有使用者公开源码,若对平台做过修改,须把该项指向包含修改版源码的仓库地址。三项法务链接均支持三种取值:false(隐藏)、true(用默认页)、对象形式(按语言给 URL,官方注释给出 {"default": ..., "en": ..., "fr": ...} 结构)。
6.4 界面细节
notificationTimeout(5000 ms,通知停留时长)、whiteboardPalette(17 色白板色板,可整组替换)、appBackgroundColor('#666',居中内容应用背景)、enableTemplates/enableHistory(模板与历史按钮开关,设 false 即从全部应用移除)、hostDescription(首页社区实例文案,支持按语言配置)、supportLanguages(工单面板管理员语言,示例 ['en','fr'])、surveyURL(官方问卷链接,设 '' 可隐藏)。
七、SSO 配置(可选插件)
2026.5.1 的 SSO 登录通过插件机制提供:lib/env.js 以 plugins?.SSO?.config 读取配置,基础部署形态中 lib/plugins/ 目录实测为空(仅 README),因此 /api/config 实测下发 "sso": false。安装 SSO 插件后按 config/sso.example.js 样例配置,其字段(2026.5.1 实查):
| 字段 | 样例默认 | 说明 |
|---|---|---|
enabled | false | 实例是否启用 SSO 登录 |
enforced | true | 是否禁止非 SSO 用户注册 |
cpPassword / forceCpPassword | true / true | 是否(强制)为 SSO 账户再加一层 CryptPad 密码 |
list | [] | 提供商清单,支持 type: 'oidc'(url/client_id/client_secret,可带 jwt_alg)与 type: 'saml'(url/issuer/cert/privateKey/signingCert)两种 |
八、生产配置模板
适用场景:4 GB 内存、NVMe SSD、50 人以内团队的 HTTPS 生产实例(域名以 pad.example.com / 沙箱 pad-sandbox.example.com 为例,替换为实际域名即可)。基于官方 example 全量裁剪,每个取值都可在前文找到依据:
module.exports = {
// 主域:客户端访问地址,生产必须 HTTPS
httpUnsafeOrigin: 'https://pad.example.com',
// 沙箱域:必须与主域不同源(子域即可)
httpSafeOrigin: 'https://pad-sandbox.example.com',
// 监听地址与端口(反代转发目标)
httpAddress: '127.0.0.1',
httpPort: 3000,
websocketPort: 3003,
// 管理面板白名单:值为账户设置页展示的公钥签名串
adminKeys: [
"[admin@example.com/YZgXQxKR0Rcb6r6CmxHPdAGLVludrAF2lEnkbx1vVOo=]",
],
// adminEmail: 'admin@example.com',
restrictRegistration: false,
// 存储生命周期:90 天未钉住清理;归档保留 15 天;账户闲置 365 天清理
inactiveTime: 90,
archiveRetentionTime: 15,
accountRetentionTime: 365,
// 如需手动控制清理节奏(配合 scripts/evict-inactive.js):
// disableIntegratedEviction: true,
// 上传与配额
maxUploadSize: 100 * 1024 * 1024,
defaultStorageLimit: 500 * 1024 * 1024,
// 数据目录(默认值,集中列出便于必要时迁移)
filePath: './datastore/',
archivePath: './data/archive',
pinPath: './data/pins',
taskPath: './data/tasks',
blockPath: './block',
blobPath: './blob',
blobStagingPath: './data/blobstage',
decreePath: './data/decrees',
logPath: './data/logs',
// 日志
logToStdout: true,
logLevel: 'info',
logFeedback: false,
verbose: false,
};
模板要点解读:httpAddress 收敛到 127.0.0.1 让 node 只听本机回环、由 NGINX 反代对外(官方推荐拓扑);maxUploadSize/defaultStorageLimit 按团队规模放大,放大上传上限后反代 client_max_body_size 必须同步 ≥ 100M;logToStdout: true 便于接入系统日志采集,磁盘日志仍按 logPath 落盘;archiveRetentionTime: 15 与账户清理按需取舍——保守口径可全部注释掉用代码默认(90/90/365)。
九、常见问题
Q1:改了 config.js 重启后报 config/config.js is faulty?
JS 语法错误,服务拒绝启动(load-config 实测行为:SyntaxError 直接 process.exit(1))。按日志栈定位行号修正;改前可 node -e "require('/opt/cryptpad/config/config.js')" 预检语法。
Q2:archiveRetentionTime 注释说 15 天,为什么实际是 90 天?
官方注释与代码不一致:lib/load-config.js 对非正数值强制回退 90。需要 15 天就显式写 archiveRetentionTime: 15(本篇第八、章模板已显式给出)。
Q3:设置了 httpSafeOrigin,3001 端口为什么不监听?
显式配置沙箱源即为生产模式,沙箱内容由反代把沙箱域转发到主服务端口实现;只有不配置(开发模式)才派生 httpSafePort 监听。详见部署指南篇 4.6 排障实录。
Q4:改 maxUploadSize 后大文件仍上传失败?
服务端上限放开后还要同步:反代 client_max_body_size ≥ 新上限;且 premiumUploadSize 若小于 maxUploadSize 会被 load-config 静默删除(源码实测)。
Q5:loginSalt 能不能中途加?
不能。官方注释原文警示:仅可在实例首次创建时设置,事后修改将使全部现有用户无法登录(scrypt 盐与历史凭据不匹配)。
Q6:客户端配置改了不生效?
确认改的是 customize/application_config.js(而非 customize.dist/ 原件),且文件导出结构未被破坏;重启服务触发重建构建产物后刷新浏览器缓存。