Jotty 1.29.2 配置参数详解
基于 1.29.2 实测:全部环境变量九组详解(基础运行、反代、附件公开、SSO/OIDC、多实例 HA、API 开关)、组合示例与五则排障实录。
Jotty 1.29.2 配置参数详解
目标:梳理 Jotty 1.29.2 的配置体系与全部环境变量,给出推荐取值与组合示例。参数语义依据仓库 howto/ENV-VARIABLES.md、howto/DOCKER.md 与 docker-compose.yml(查询日期 2026-10-30),开关行为与排障均在 1.29.2 实测环境验证。部署步骤见《Jotty 1.29.2 Docker Compose 部署指南》。
一、配置体系总览
Jotty 无独立配置文件,配置分两轨:
- 环境变量(部署层):随服务注入,覆盖运行模式、身份、反代、SSO、安全、多实例等,本文全部收录;
- 数据目录内 JSON 文件(业务层):
data/users/users.json(账户与 API 密钥)、data/users/sessions.json(会话)、data/sharing/shared-items.json(分享)等由系统自动维护,不建议手工编辑(结构依据 README"Data Storage"章节)。
环境变量分九组逐一说明。以下未标注"可选"者均为官方标注的必填或强推荐项。
二、基础运行参数
| 参数 | 默认值 | 说明 |
|---|---|---|
NODE_ENV | 无 | 生产实例必填,固定 production,使 Node.js 进入生产模式 |
PUID | 1000 | 运行身份的用户 ID。NAS(Unraid 等)需与挂载目录属主一致;compose 中显式 user: 指令优先级更高 |
PGID | 1000 | 同上,组 ID |
UMASK | 002 | 新建文件/目录权限掩码,常用 002(组可写)或 022(仅属主可写) |
JOTTY_BODY_SIZE_LIMIT | 100mb | 请求体上限(上传、drawio 附件、头像等),单位支持 b/kb/mb/gb;由运行时补丁器在启动时应用 |
STOP_CHECK_UPDATES | 未设即开启检查 | 设为 yes 后不再调用 GitHub API 检查新版本,去掉"新版本可用"提示;离线/内网环境推荐 |
DEFAULT_LOCALE | en | 未登录界面(如登录页)及未自选语言用户的界面语言 |
JOTTY_FREEBSD | 未设 | 仅 FreeBSD 生效的兼容补丁开关(stub @swc/core、改用 webpack),Linux 上设不设置都无效 |
实测记录:以 NODE_ENV=production 启动后日志出现 Ready on http://0.0.0.0:3000;启动时运行时补丁器输出 [patch:patches] freebsd_20260427: skipped (JOTTY_FREEBSD not set),与上表语义一致。
三、反向代理与 HTTPS 参数
| 参数 | 默认值 | 说明 |
|---|---|---|
HTTPS | 未设 | 设 true 后会话 Cookie 标记 Secure;TLS 通常由反代终结,此开关只影响 Cookie 安全位 |
APP_URL | 未设 | 强制实例基址。SSO 必填;反代后登录异常时优先设置——登录流程将以此 URL 为准 |
INTERNAL_API_URL | http://localhost:3000 | 服务进程对自身 API 的调用地址;仅在反代后会话校验失败时需要调整 |
DEBUGGER | 未设 | 诊断日志开关,两个标志:proxy(OIDC/登录/路由)、crud(增删改查计时),* 全开 |
排障经验(官方 howto/ENV-VARIABLES.md 明示的典型场景):反代后登录失败,第一步设 APP_URL,仍失败再设 DEBUGGER=proxy 观察日志;多实例集群还需代理正确转发 WebSocket 升级头并保持 Host 不变(howto/DOCKER.md"Running more than one instance")。
四、附件公开访问参数
| 参数 | 默认值 | 说明 |
|---|---|---|
SERVE_PUBLIC_IMAGES | 未设(不公开) | 设 yes 后上传图片可凭直链免登录访问 |
SERVE_PUBLIC_FILES | 未设 | 同上,适用于普通文件附件 |
SERVE_PUBLIC_VIDEOS | 未设 | 同上,适用于视频 |
安全提示:三者一旦开启即等于"知道链接的任何人可读"。1.29.0 的附件重构已将附件可见性收敛到笔记权限(release notes:附件仅对拥有/可访问该笔记的用户可见),这三个开关属于面向外链嵌入场景的显式放行,公开实例建议保持默认关闭。官方发布说明同时表示这三个变量将随附件权限重构逐步退役。
五、安全与账号保护参数
| 参数 | 默认值 | 说明 |
|---|---|---|
DISABLE_BRUTEFORCE_PROTECTION | 未设(保护开启) | 默认连续 3 次本地登录失败即锁定,退避延迟 10s→30s→60s…;设 yes 完全关闭,不建议 |
ENABLE_PWA_ZOOM | 未设(禁用缩放) | 设 yes 允许 PWA 内缩放,无障碍场景使用 |
六、SSO / OIDC 参数(可选组)
启用 SSO 的最小集:APP_URL + AUTH_MODE=oidc + OIDC_ISSUER + OIDC_CLIENT_ID。
| 参数 | 必填 | 说明 |
|---|---|---|
AUTH_MODE | 是(启用 SSO 时) | 设 oidc;旧名 SSO_MODE 仍兼容 |
OIDC_ISSUER | 是 | OIDC 提供方地址(Authentik/Auth0/Keycloak 等) |
OIDC_CLIENT_ID | 是 | 提供方签发的客户端 ID |
OIDC_CLIENT_SECRET | 可选 | 机密客户端的 secret |
OIDC_CLIENT_ID_FILE | 可选 | 以文件形式提供 client ID(Docker Secrets),设置后覆盖同名环境变量 |
OIDC_CLIENT_SECRET_FILE | 可选 | 同上,secret 版 |
SSO_FALLBACK_LOCAL | 可选 | 设 yes 保留本地账密登录作为旁路,推荐设置,避免 IdP 故障时锁死 |
OIDC_ADMIN_GROUPS | 可选 | 组映射:成员自动成为管理员,逗号分隔 |
OIDC_ADMIN_ROLES | 可选 | 角色映射:管理员,逗号分隔 |
OIDC_USER_GROUPS | 可选 | 登录白名单组;设置后仅这些组(及管理员)可登录 |
OIDC_USER_ROLES | 可选 | 登录白名单角色 |
OIDC_GROUPS_SCOPE | groups | 获取用户组的 scope;Entra ID 等不支持 groups scope 的提供方设为空串或 no |
OIDC_LOGOUT_URL | 可选 | 全局登出地址,登出时跳转 IdP |
七、多实例(HA)参数
| 参数 | 默认值 | 说明 |
|---|---|---|
JOTTY_NODE | 未设(单实例) | 实例唯一名(字母/数字/-/_)。设置即开启集群:多实例共享同一 data/ 目录,实时协作跨实例生效,各自持有独立索引 data/.relations_<name>.db |
JOTTY_RELATIONS_DB | data/.relations_<node>.db | 覆盖索引路径;多实例时每个实例必须指向不同路径(官方明示两实例共写一个索引会损坏) |
集群工作原理(howto/DOCKER.md,查询日期 2026-10-30):实例间通过 data/.replica/ 下的一次性小文件交换打开中笔记的实时内容与持有者,全部关闭后该文件删除;持久副本始终只有笔记本身,不引入数据库或消息队列。故障表现:单实例宕机时编辑器显示 Offline 并继续接受输入,恢复后重新同步。
八、API 与 MCP 相关开关
| 参数 | 默认值 | 说明 |
|---|---|---|
ENABLE_API_DOCS | 未设(关闭) | 开启后 GET /api/docs 无需密钥即可读取 OpenAPI 文档(JSON;?format=yaml 输出 YAML)。注意 REST API 本身不受此开关影响,始终可用 |
开关行为实测(1.29.2):
# 默认(未设置 ENABLE_API_DOCS):
curl -s -o /dev/null -w "HTTP %{http_code}\n" http://127.0.0.1:8131/api/docs
# 实测回显:HTTP 404
# compose 追加 ENABLE_API_DOCS=true 并重建后:
curl -s -o /dev/null -w "HTTP %{http_code}\n" http://127.0.0.1:8131/api/docs
# 实测回显:HTTP 200
curl -s "http://127.0.0.1:8131/api/docs?format=yaml"
# 实测回显(节选):
# openapi: 3.1.0
# info:
# title: Jotty API
# version: 1.29.2
对比之下,需密钥的 GET /api/openapi.json 在未认证时实测返回 401。公开实例若不想暴露 API 全貌,保持 ENABLE_API_DOCS 关闭即可(上述端口为实测环境取值,按你的部署替换)。MCP 网关为独立伴生发布物(ghcr.io/fccview/jotty-mcp),通过 JOTTY_MCP_AUTH_TOKEN、JOTTY_MCP_TRANSPORT=http、JOTTY_MCP_PORT 三个自身环境变量接入主服务,见仓库 docker-compose.mcp.yml。
九、组合示例
个人实例(本机实测基线):
environment:
- NODE_ENV=production
- STOP_CHECK_UPDATES=yes
- DEFAULT_LOCALE=en
反代 + SSO 实例(Authentik):
environment:
- NODE_ENV=production
- HTTPS=true
- APP_URL=https://notes.example.com
- AUTH_MODE=oidc
- OIDC_ISSUER=https://auth.example.com/application/o/jotty
- OIDC_CLIENT_ID_FILE=/run/secrets/oidc_client_id
- OIDC_CLIENT_SECRET_FILE=/run/secrets/oidc_client_secret
- SSO_FALLBACK_LOCAL=yes
- OIDC_ADMIN_GROUPS=jotty-admins
双实例高可用(共享 data/ 目录 + 独立节点名):
# 实例 A
environment:
- NODE_ENV=production
- JOTTY_NODE=node1
# 实例 B(共享同一 data/ 挂载)
environment:
- NODE_ENV=production
- JOTTY_NODE=node2
十、排障实录(实测沉淀)
/api/docs返回 404:不是故障,ENABLE_API_DOCS默认关闭(实测关态 404、开态 200,见第八节)。排查其他接口异常时勿将此 404 误判为服务未就绪——服务就绪以启动日志Ready on http://0.0.0.0:3000为准。- 改环境变量不生效:
docker compose up -d只在检测到配置变化时重建服务;确认 compose 文件已保存后观察其输出是否出现Recreated行。实测追加ENABLE_API_DOCS后重建输出包含Container jotty Starting / Started,新值随即生效。 - 登录页循环重定向:反代场景优先补
APP_URL;仍异常时临时开启DEBUGGER=proxy查看登录链路日志,定位后关闭。 - NAS 上权限报错:
user: "1000:1000"与目录属主不一致所致,将PUID/PGID与chown目标对齐(属主核对方法见部署指南 6.2 节)。 - 多实例实时协作无头像:代理未保留
Host头或未转发 WebSocket 升级,页面仍可用(打字照常保存),按第七节要求修正代理。
十一、参数速查表(一页版)
| 参数 | 一句话语义 | 默认 |
|---|---|---|
| NODE_ENV | 生产模式必填 | 无 |
| PUID / PGID / UMASK | 运行身份与文件掩码 | 1000/1000/002 |
| HTTPS | Cookie Secure 位 | 关 |
| APP_URL | 实例基址(SSO 必填) | 无 |
| INTERNAL_API_URL | 自调用地址 | http://localhost:3000 |
| SERVE_PUBLIC_IMAGES/FILES/VIDEOS | 附件直链公开 | 关 |
| STOP_CHECK_UPDATES | 关更新检查 | 关(即默认检查) |
| DEFAULT_LOCALE | 未登录语言 | en |
| DISABLE_BRUTEFORCE_PROTECTION | 关爆破保护 | 关(保护开) |
| ENABLE_PWA_ZOOM | PWA 缩放 | 关 |
| JOTTY_BODY_SIZE_LIMIT | 请求体上限 | 100mb |
| ENABLE_API_DOCS | 无密钥读 OpenAPI 文档 | 关 |
| JOTTY_NODE | 多实例节点名 | 未设 |
| JOTTY_RELATIONS_DB | 索引路径覆盖 | 按节点名 |
| AUTH_MODE + OIDC_* | SSO 组(13 项,见第六节) | 未启用 |
| DEBUGGER | proxy/crud 诊断日志 | 关 |
配置到位后,建议按《Jotty 1.29.2 REST API 实战指南》完成 API 链路的端到端验收;组件定位回看《Jotty 1.29.2 介绍与选型指南》。