Trilium v0.106.0 配置参数详解
Trilium v0.106.0 服务端配置全解析:config.ini 六节逐项与 TRILIUM_ 环境变量分域,端口三源优先级、重启生效、安全开关实测回显,附反代场景生产配置模板。
Trilium v0.106.0 配置参数详解
目标:逐域逐项解析 Trilium v0.106.0 服务端配置——数据目录 config.ini 全部参数节(General/Network/Session/Sync/MultiFactorAuthentication/Security)与 TRILIUM_ 前缀环境变量,给出官方默认值与实测生效行为,并附生产配置模板。已在 Ubuntu 22.04 自托管部署实例(v0.106.0,端口 8139→8080)实测:端口三处来源的优先级、config.ini 热改不生效需重启、安全开关的启动日志变化均有真实回显佐证。部署过程见 《Trilium v0.106.0 Docker Compose 部署指南》。
一、环境信息
- 操作系统:Ubuntu 22.04(x86_64),Trilium v0.106.0(官方镜像,Node.js v24.21.0 运行时)。
- 实例形态:单机自托管服务,宿主端口 8139 → 服务 8080,数据目录
/opt/trilium/data。 - 参数依据三源对照:① 实例数据目录生成的
config.ini(实测与官方assets/config-sample.ini逐行一致);② 官方镜像内程序对TRILIUM_前缀环境变量的枚举(2026-10-22 实查);③ 代码内端口/优先级逻辑(v0.106.0 构建产物实查)。 - 版本基线:
app=0.106.0 db=240 sync=39(启动日志横幅实测)。
二、前置条件
- 已按 《Trilium v0.106.0 Docker Compose 部署指南》完成部署并能访问健康端点:
curl -s http://localhost:8139/api/health-check
{"status":"ok"}
- 知晓两个基本事实(均有实测依据):
- config.ini 仅在启动时读取,修改后必须重启服务才生效;
- 环境变量优先于 config.ini:同名能力的两处配置同时存在时,环境变量胜出(见 4.1 节优先级实测)。
三、参数查看与修改方式
3.1 参数配置的四个来源
Trilium 服务端的可配置项分布在四处,优先级从高到低:
| 优先级 | 来源 | 说明 |
|---|---|---|
| 1 | 环境变量(TRILIUM_*) | 部署编排注入,适合容器化与不可变基础设施 |
| 2 | 数据目录 config.ini | 服务端主配置文件,首次启动自动生成 |
| 3 | 数据库内选项(options 表) | 绝大多数 UI 设置项落在 document.db,如主题、界面语言、备份策略 |
| 4 | 程序内置默认值 | 以上三者都未设置时生效 |
注意:UI 里改的多数设置(主题、标签、备份计划等)不写入 config.ini 而是落库;config.ini 主要承载网络、会话、同步、认证与安全等"服务级"参数。
3.2 查看当前生效配置
cat /opt/trilium/data/config.ini
(v0.106.0 首启生成的完整文件,共 7 个参数节,见 4~9 节逐项解析。)
环境变量在编排文件中查看:
docker inspect trilium-app --format '{{json .Config.Env}}'
实测回显(官方镜像内置环境):
["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","NODE_VERSION=24.21.0","YARN_VERSION=1.22.22","TRILIUM_DATA_DIR=/home/node/trilium-data"]
3.3 修改方式
- config.ini:宿主机直接编辑
/opt/trilium/data/config.ini,然后重启服务:
vi /opt/trilium/data/config.ini
docker compose restart trilium
- 环境变量:改 compose 的
environment:段后docker compose up -d重建。
实测验证「改完必须重启」:把 [Network] port=8080 改为 port=8081 后仅保存不重启,服务仍监听 8080;执行 docker compose restart trilium 后,服务改听 8081(容器内 /proc/net/tcp 出现 00000000:1F91,十六进制 1F91=8081),恢复 8080 再重启后健康端点恢复 200。
四、参数总览
4.1 服务监听端口:三处来源与优先级(重点实测)
v0.106.0 服务端确定监听端口的逻辑(构建产物实查):
process.env.TRILIUM_PORT → 用环境变量(报错文案 "Invalid port value … should be an integer between 0 and 65536")
桌面构建(无此变量时) → 固定端口 37740/37840
服务器构建 → config.ini 的 [Network] port(未设置回退默认 8080)
即 TRILIUM_PORT 环境变量 > config.ini [Network] port > 默认 8080。两个方向均已实测:
| 实验 | 配置 | 实测结果 |
|---|---|---|
| 环境变量 | compose 注入 TRILIUM_PORT=8090 | 容器内改听 8090(/proc/net/tcp 出现 1F9A),原 8080 映射失效 |
| config.ini | port=8081 + 重启 | 容器内改听 8081(1F91),恢复 8080 后健康端点恢复 200 |
⚠️ 改端口后必须同步调整端口映射/反代上游,否则出现「服务健康但映射端口不通」(
curl返回 000)。
4.2 config.ini 参数总览表
| 节 | 参数 | 官方默认值 | 作用 |
|---|---|---|---|
| General | instanceName | 空 | 实例名,供后端 API api.getInstanceName() 区分多实例 |
| General | noAuthentication | false | 免认证访问(仅服务器构建有意义) |
| General | noBackup | false | 禁用自动备份(磁盘紧张时) |
| Network | host | 未设置(注释项) | 服务器构建的监听地址 |
| Network | port | 8080 | 服务器构建的监听端口 |
| Network | https | false | 是否启用 TLS |
| Network | certPath / keyPath | 空 | TLS 证书/私钥路径(https=true 时使用) |
| Network | trustedReverseProxy | false | 可信反向代理设置(见 6.2) |
| Network | corsAllowOrigin / corsAllowMethods / corsAllowHeaders | 注释项('*' / GET,POST,PUT,DELETE,PATCH / Content-Type,Authorization) | 跨域响应头 |
| Session | cookieMaxAge | 1814400(21 天) | 「记住我」会话 Cookie 的 Max-Age(秒) |
| Sync | syncServerHost | 未设置 | 同步服务器地址(从属实例填) |
| Sync | syncServerTimeout | 未设置 | 同步请求超时 |
| Sync | syncServerProxy | 未设置 | 同步流量代理 |
| MultiFactorAuthentication | oauthBaseUrl 等_oidc_ 系列 | 空字符串 | OIDC/OAuth2 登录接入(详见 8 节) |
| MultiFactorAuthentication | oauthHttpTimeout | 30000 | OIDC HTTP 请求超时(毫秒,官方从默认 5000 上调) |
| MultiFactorAuthentication | oauthScope | openid profile email | OIDC 请求的 scope |
| Security | backendScriptingEnabled | false | 后端脚本执行开关 |
| Security | sqlConsoleEnabled | false | SQL 控制台开关 |
4.3 TRILIUM_ 前缀环境变量总览表
官方镜像内程序枚举实查(2026-10-22),按用途分域:
| 域 | 变量 | 说明 |
|---|---|---|
| 数据 | TRILIUM_DATA_DIR | 数据目录,官方镜像默认 /home/node/trilium-data |
| 数据 | TRILIUM_DOCUMENT_PATH | 主库文件自定义路径 |
| 数据 | TRILIUM_PROFILE | 多 profile 数据目录切换 |
| 数据 | TRILIUM_BACKUP_DIR | 备份产物目录自定义 |
| 服务 | TRILIUM_PORT | 监听端口(最高优先级,见 4.1) |
| 服务 | TRILIUM_HOST | 监听地址 |
| 服务 | TRILIUM_ENV | 运行环境标识(dev/production) |
| 服务 | TRILIUM_CONFIG_INI_PATH | config.ini 自定义路径 |
| 运维 | TRILIUM_LOG_DIR | 日志目录自定义 |
| 运维 | TRILIUM_TMP_DIR | 临时目录自定义 |
| 运维 | TRILIUM_SAFE_MODE | 安全模式启动 |
| 运维 | TRILIUM_RESOURCE_DIR | 资源目录 |
| 扩展 | TRILIUM_OCR_CACHE_DIR | OCR 缓存目录 |
| 扩展 | TRILIUM_COPILOT_PATH / TRILIUM_CLAUDE_CODE_PATH / TRILIUM_ANTIGRAVITY_ACP_PATH | LLM/AI 集成相关可执行文件路径 |
| 调试 | TRILIUM_IMAGE_WORKER_DEBUG | 图像处理 worker 调试 |
| 测试 | TRILIUM_INTEGRATION_TEST | 集成测试标记(勿用于生产) |
另有启动脚本(start-docker.sh)读取的容器层变量:USER_UID/USER_GID(未设置实测输出 No USER_UID specified, leaving 1000);rootless 镜像变体另有 TRILIUM_UID/TRILIUM_GID/TRILIUM_VARIANT=alpine(来源:官方 docker-compose.rootless.yml)。
五、General 节:实例与备份
- instanceName(默认空):仅作多实例区分标识,不改也不影响单实例运行。多套 Trilium 共存于监控/日志体系时建议设置(如
trilium-prod-01)。 - noAuthentication(默认 false):改为 true 后服务免密码访问。⚠️ 仅适合「纯内网 + 网络层封禁」场景;公网服务严禁开启。官方注释原文即提示该项"makes sense for server build only"。
- noBackup(默认 false):改为 true 关闭内置自动备份。磁盘紧张时的逃生开关;一般保持 false——Trilium 自动备份产出在数据目录
backup/下,是数据安全的最后防线。
六、Network 节:监听、TLS 与反代
6.1 host / port / https / certPath / keyPath
- host(默认注释未设):监听地址。默认监听全部地址(实测容器内
0.0.0.0:8080);仅本机访问时设127.0.0.1。 - port(默认 8080):见 4.1 优先级实测。
- https(默认 false):启用内置 TLS。开启后需同时给 certPath/keyPath;证书可由官方
bin/generate-cert.sh生成自签名证书。生产更常见做法是保持 https=false,由 Nginx/Caddy 反代终止 TLS(此时务必配合 6.2 的 trustedReverseProxy)。 - corsAllowOrigin/corsAllowMethods/corsAllowHeaders(默认注释):供浏览器扩展等跨域调用时放开 CORS,默认关闭;非必要不开。
6.2 trustedReverseProxy(反代场景关键项)
默认 false。用于声明可信反向代理,取值三种形态(官方注释原文):
- 逗号分隔的可信代理 IP/CIDR 列表(如
10.0.0.1,10.0.0.0/8); true:取 X-Forwarded-For 最左侧 IP;- 整数 N:Trilium 与第一个可信反代之间的跳数。
设置后 Express 将从 X-Forwarded-For 解析客户端真实 IP——登录限流、日志、TOTP 黑名单都以真实 IP 为键。⚠️ 反代场景必须设置,否则日志与限流看到的都是反代 IP;内置快捷值:loopback(127.0.0.1/8, ::1/128)、linklocal(169.254.0.0/16, fe80::/10)、uniquelocal(10/8, 172.16/12, 192.168/16, fc00::/7)。
七、Session 节:会话有效期
cookieMaxAge(默认 1814400 秒 = 21 天):仅作用于勾选「记住我」登录的会话 Cookie 有效期。实测默认文件即 1814400。安全要求严格的内网可调短(如 86400=1 天);调短后客户端会更频繁要求重新登录。
八、MultiFactorAuthentication 节:OIDC/OAuth2 登录
该节全部参数用于接入外部身份源(OIDC),默认全空即不启用。逐项(官方默认值):
| 参数 | 默认 | 说明 |
|---|---|---|
| oauthBaseUrl | 空 | 服务对外访问基础 URL(构造回调地址用) |
| oauthClientId / oauthClientSecret | 空 | 身份源颁发的客户端凭据 |
| oauthIssuerBaseUrl | 空 | 身份源 issuer 地址 |
| oauthIssuerName / oauthIssuerIcon | 空 | 登录页显示的身份源名称/图标 |
| oauthHttpTimeout | 30000 | OIDC HTTP 请求超时(毫秒)。官方注释说明:库默认 5000ms 冷启动身份源可能超时,出现"要登录两次"的体验,官方上调至 30000,可接受最小 500 |
| oauthScope | openid profile email | 请求的 scope,openid 必需(缺省会自动补);需刷新令牌时加 offline_access |
| oauthClientAuthMethod | 空 | 令牌端点认证方式:client_secret_basic / client_secret_post;留空自动探测(GitLab/Google 用 post,其余 basic)。官方提示:自建 GitLab 且凭据含特殊字符登录失败时显式设 post |
| oauthIdTokenSigningAlg | 空 | ID Token 签名算法(RS256/EdDSA/ES256);留空从 discovery 文档探测。仅当出现 "unexpected JWT alg received" 报错时手动指定 |
服务端还支持 TOTP 双因素(与 OIDC 并列的 2FA 手段),由 UI 设置页开启,不占 config.ini 参数。启用后 GET /api/setup/status 的 secondFactorRequired 字段会变为 true(该字段在 3.x 实测回显中默认 false)。
九、Security 节:高危开关
9.1 backendScriptingEnabled(默认 false)
后端脚本执行开关。开启即等于授予脚本作者服务器级权限(官方注释原文:full server access including filesystem, network, and OS commands via require('child_process'))。实测两种取值的启动日志差异:
# false(默认):
Backend script execution is DISABLED. Set [Security] backendScriptingEnabled=true in config.ini to enable.
# true(重启后):
WARNING: Backend script execution is ENABLED. Backend scripts have full server access including filesystem, network, and OS commands. Only enable in trusted environments.
前端脚本始终允许(运行在浏览器沙箱),不受此开关控制。
9.2 sqlConsoleEnabled(默认 false)
SQL 控制台(对 document.db 执行裸 SQL)。默认关闭;需要临时排障时打开、用完即关。与 backendScriptingEnabled 同属「信任边界」参数:单用户自托管可按需开启,多途径可访问(如仅内网免认证)时严禁开启。
十、生产配置模板
适用场景:单用户/小型团队自托管知识库,2C4G 起步,Ubuntu 22.04 + Docker Compose,Nginx 反代终止 TLS。/opt/trilium/data/config.ini:
[General]
# 多实例区分名,监控/日志检索用
instanceName=trilium-prod-01
# 公网服务必须保持密码认证
noAuthentication=false
# 保持自动备份
noBackup=false
[Network]
# 由 Nginx 反代终止 TLS,服务本体保持 HTTP
port=8080
https=false
certPath=
keyPath=
# 声明可信反代(按实际反代来源网段填写;同机反代可用 loopback)
trustedReverseProxy=loopback
[Session]
# 「记住我」21 天;更严格可改 86400(1 天)
cookieMaxAge=1814400
[Sync]
# 本机作为同步服务器(主实例),以下三项留空
#syncServerHost=
#syncServerTimeout=
#syncServerProxy=
[MultiFactorAuthentication]
# OIDC 全部留空即不启用;接入身份源时按八节逐项填写
oauthBaseUrl=
oauthClientId=
oauthClientSecret=
oauthIssuerBaseUrl=
oauthIssuerName=
oauthIssuerIcon=
oauthHttpTimeout=30000
oauthScope=openid profile email
oauthClientAuthMethod=
oauthIdTokenSigningAlg=
[Security]
# 单用户自托管且信任自己写的脚本时才开
backendScriptingEnabled=false
sqlConsoleEnabled=false
配套建议(不在 config.ini 内):环境变量只保留 TRILIUM_DATA_DIR(数据目录指向持久卷);公网暴露一律走反代 + TLS;cookieMaxAge 按合规要求调整;数据库备份用 ETAPI PUT /etapi/backup/now 定期触发(见 《Trilium v0.106.0 常用 CLI 命令与工具详解》)。
十一、常见问题
Q1:改了 config.ini 为什么完全没生效?
config.ini 只在启动时读取。确认改的是数据目录内生效文件后执行 docker compose restart trilium(实测:改 port=8081 后不重启仍听 8080,重启后生效)。
Q2:端口改了映射却不通?
TRILIUM_PORT 环境变量优先于 config.ini 的 [Network] port(4.1 实测)。两处不一致时以环境变量为准,端口映射要对准环境变量指定的端口。
Q3:反代后面日志里的 IP 全是反代地址?
trustedReverseProxy 未设置(默认 false)。按 6.2 节配置可信代理后,服务才会从 X-Forwarded-For 取真实客户端 IP。
Q4:启动日志出现 Backend script execution is ENABLED 警告?
backendScriptingEnabled=true 已生效(实测日志见 9.1)。该开关意味着后端脚本可获得文件系统/网络/OS 命令权限,非可信环境应改回 false 并重启。
Q5:想要免密码内网访问?
[General] noAuthentication=true 并重启。仅限网络层已封禁外部访问的内网;公网服务严禁。
十二、参考链接
- 官方服务器安装文档:https://docs.triliumnotes.org/user-guide/setup/server
- 官方样例配置(v0.106.0):https://github.com/TriliumNext/Trilium/blob/v0.106.0/apps/server/src/assets/config-sample.ini
- 官方 MFA/OIDC 文档:https://docs.triliumnotes.org/user-guide/setup/server/mfa
- 本专栏相关篇目:《Trilium 介绍与选型指南》、《Trilium v0.106.0 Docker Compose 部署指南》、《Trilium v0.106.0 常用 CLI 命令与工具详解》