TeamMapper 0.4.0 配置参数详解
TeamMapper 0.4.0 全部 44 个环境变量与三层 settings JSON 的默认值、生效方式逐项详解,含协作限流参数与生产配置模板。
TeamMapper 0.4.0 配置参数详解
目标:把 TeamMapper 0.4.0 的全部配置面——环境变量、三层 settings JSON、功能开关、协作限流参数——逐项讲清默认值与影响,并给出生产配置模板。所有默认值取自官方
docker-compose-prod.yml、.env.default与后端config.service.ts/yjsLimits.ts源码(仓库 main 分支,查询日期 2026-11-02),生效行为在 Ubuntu 26.04 实测环境逐项验证。
一、环境信息
- 部署形态:Docker Compose(
ghcr.io/b310-digital/teammapper:latest+postgres:15-alpine),端口 8144,部署步骤见本专栏《TeamMapper 0.4.0 Docker Compose 部署指南》 - 后端:NestJS,配置读取入口
teammapper-backend/src/config.service.ts - 配置文件:镜像内置
config/settings.prod.json(75 行)+ 可挂载settings.override.json - 实测验证方式:
GET /api/settings返回体、应用重启后行为对照
二、前置条件
- 已完成 Compose 部署且服务健康:
curl -s -o /dev/null -w 'HTTP %{http_code}\n' http://127.0.0.1:8144/
HTTP 200
- 已获取源码或可查官方文档(参数含义以源码为准):
git clone --depth 1 https://github.com/b310-digital/teammapper.git
三、参数查看与修改方式
TeamMapper 配置分两个通道,修改方式与生效条件不同:
| 通道 | 位置 | 修改方式 | 生效条件 |
|---|---|---|---|
| 环境变量 | compose environment: | 改 compose 文件 | docker compose up -d 重建容器 |
| settings JSON | 镜像内 settings.prod.json | 改源码重新构建镜像 | 重建镜像 |
| settings 覆盖 | 挂载 ./config/settings.override.json → 容器 /home/node/app/teammapper/config/settings.override.json | 直接编辑宿主机 JSON | docker compose restart app_prod |
查看当前生效的系统/用户设置(前端初始化时也调它):
curl -s http://127.0.0.1:8144/api/settings
实测返回节选(完整结构见 systemSettings + userSettings 两段):
{
"systemSettings": {
"info": { "name": "TeamMapper", "version": "0.1.9", "aiModel": null },
"urls": {
"pictogramApiUrl": "/arasaac/api/pictograms",
"pictogramStaticUrl": "/arasaac/images/pictograms"
},
"featureFlags": { "pictograms": false, "ai": false, "arrows": false }
},
"userSettings": {
"general": { "language": "en", "darkMode": false, "displayName": "" },
"mapOptions": {
"centerOnResize": false, "autoBranchColors": true, "showLinktext": false,
"branchStyle": "tapered", "fontMaxSize": 70, "fontMinSize": 15, "fontIncrement": 5,
"defaultNode": { "...": "节点默认颜色/字体/图片" }
}
}
}
💡 说明:
info.version显示0.1.9是镜像内 package.json 字段未随 release tag 同步的上游事实,不代表部署的是 0.1.9 版;版本以 release tag(v0.4.0-1)与镜像 digest 为准。
settings.override.json 覆盖生效实测:写入 systemSettings.urls.imprintUrl 后重启,/api/settings 即返回该值:
cat > config/settings.override.json <<'EOF'
{
"systemSettings": {
"urls": {
"imprintUrl": "http://127.0.0.1:8144/imprint",
"privacyUrl": "http://127.0.0.1:8144/privacy"
}
}
}
EOF
docker compose restart app_prod
curl -s http://127.0.0.1:8144/api/settings | python3 -c "import sys,json;d=json.load(sys.stdin);print('imprintUrl:',d['systemSettings']['urls'].get('imprintUrl'))"
imprintUrl: http://127.0.0.1:8144/imprint
四、参数总览
后端源码(config.service.ts 读取 process.env)实际消费的环境变量共 44 个,按域归类:
| 域 | 变量 |
|---|---|
| 运行模式 | MODE PORT BINDING LOG_LEVEL WS_TRUST_PROXY |
| 数据库 | POSTGRES_HOST/PORT/DATABASE/USER/PASSWORD POSTGRES_SSL POSTGRES_SSL_REJECT_UNAUTHORIZED POSTGRES_QUERY_TIMEOUT POSTGRES_STATEMENT_TIMEOUT |
| 保留与清理 | DELETE_AFTER_DAYS |
| 安全凭据 | JWT_SECRET |
| 功能开关 | AI_ENABLED FEATURE_ARROWS FEATURE_YJS_RATE_LIMITING |
| 法务链接 | IMPRINT_URL PRIVACY_URL |
| 图标代理 | PICTOGRAM_API_URL PICTOGRAM_IMAGES_URL |
| AI/LLM | AI_LLM_URL AI_LLM_TOKEN AI_LLM_PROVIDER AI_LLM_MODEL AI_LLM_RPM AI_LLM_TPM AI_LLM_TPD AI_LLM_MAX_OUTPUT_TOKENS AI_LLM_TIMEOUT_MS |
| 图片上传 | UPLOAD_IMAGE_MAX_SIZE_BYTES UPLOAD_IMAGE_RATE_LIMIT UPLOAD_IMAGE_RATE_WINDOW_MS MAX_IMAGE_BYTES_PER_MAP |
| 导图复制 | DUPLICATE_MAP_RATE_LIMIT DUPLICATE_MAP_RATE_WINDOW_MS DUPLICATE_MAP_MAX_IMAGE_BYTES |
| WS 连接限制 | WS_GLOBAL_MAX_CONNECTIONS WS_PER_IP_MAX_CONNECTIONS WS_PER_IP_RATE_LIMIT WS_PER_IP_RATE_WINDOW_MS |
| Yjs 消息限流 | YJS_MESSAGE_WINDOW_MS YJS_MESSAGE_MAX_COUNT YJS_MESSAGE_MAX_BYTES YJS_MAP_MAX_BYTES YJS_MAP_MAX_ENTRIES YJS_MAP_MAX_NODES |
五、核心参数分类详解
5.1 运行模式与数据库连接
| 参数 | 默认值 | 说明 |
|---|---|---|
MODE | DEV(prod compose) | PROD 时加载 settings.prod.json;官方 .env.default 注释:PROD 建议数据库支持 SSL,没有则用 DEV。实测 MODE=PROD + POSTGRES_SSL=false 可正常跑(Quick Start 官方形态) |
PORT | 3000 | 后端监听端口,容器内保持默认,宿主映射改 compose ports |
POSTGRES_SSL | prod compose 默认 true | 内网 compose 自连可置 false |
POSTGRES_SSL_REJECT_UNAUTHORIZED | false | 允许自签证书;用受信证书后置 true |
POSTGRES_QUERY_TIMEOUT / POSTGRES_STATEMENT_TIMEOUT | 100000(毫秒) | 库侧超时,防慢查询拖垮协作持久化 |
LOG_LEVEL | debug(DEV)/ log(其他) | NestJS 级别 error/warn/log/debug/verbose;排障协作断连时临时调 debug |
WS_TRUST_PROXY | 未设 | 置于反向代理后且需要按真实客户端 IP 做 WS 限流时开启 |
JWT_SECRET | 空 | person_id cookie 的 HMAC 签名密钥。不设则「我的导图」列表恒为空——实测无 cookie/未签名请求:curl -s http://127.0.0.1:8144/api/maps 返回 [] |
5.2 保留期与清理
| 参数 | 默认值 | 说明 |
|---|---|---|
DELETE_AFTER_DAYS | 30 | 建图时计算 deletedAt = 建图时间 + N 天(实测响应 "deleteAfterDays": 30, "deletedAt": "2026-12-02T06:46:47.788Z")。每日 cron 任务 prod:data:maps:cleanup 删除到期图;带正确 x-map-modification-secret 头的 GET 会重置计时(源码:仅 writable 才 updateLastAccessed,防爬虫续命) |
5.3 功能开关(feature flags)
三个开关控制前端功能可见性,/api/settings 的 featureFlags 段实测返回 {"pictograms": false, "ai": false, "arrows": false}:
| 开关 | 默认 | 开启方式 | 效果 |
|---|---|---|---|
pictograms | 关 | 仅构建期 JSON(README 明确:must set before build time) | 后端代理 /arasaac/api、/arasaac/images 到 ARASAAC 图标库;关闭时不挂路由 |
ai | 关 | AI_ENABLED=true 环境变量 | 首页出现 AI 生成导图入口,后端 /api/mermaid/create 生效 |
arrows | 关 | FEATURE_ARROWS=true | 显示「连接两节点为箭头」按钮与 alt+a 快捷键;关闭时图照常保存/导出箭头数据 |
FEATURE_YJS_RATE_LIMITING:是否启用 Yjs 消息限流(配合下节参数排障用)。
5.4 协作与限流参数(Yjs/WebSocket 网关)
网关对「每连接」「每图」「每 IP」三层限额(源码 yjsLimits.ts/config.service.ts 实测核对):
| 参数 | 默认值 | 说明 |
|---|---|---|
YJS_MESSAGE_WINDOW_MS | 10000 | 限流滑动窗口 |
YJS_MESSAGE_MAX_COUNT | 100 | 窗口内每连接/每图共享的 sync 消息条数上限,超限连接被 1008 关闭 |
YJS_MESSAGE_MAX_BYTES | 5242880(5 MiB) | 窗口内字节上限 |
YJS_MAP_MAX_BYTES | 5242880 | 单图编码后总大小上限(超限即拒绝并重置该图同步状态) |
YJS_MAP_MAX_ENTRIES | 100000 | 单图 Y.Doc 条目数上限 |
YJS_MAP_MAX_NODES | 10000 | 单图节点数上限 |
maxArrows | 10000(无环境变量) | 源码注释:持久化单条 insert 每行 3 个绑定参数,受 Postgres 65535 参数上限约束,故意不开放调大 |
WS_GLOBAL_MAX_CONNECTIONS | 500 | 网关全局 WS 连接数 |
WS_PER_IP_MAX_CONNECTIONS | 50 | 每 IP 并发连接 |
WS_PER_IP_RATE_LIMIT / WINDOW_MS | 10 / 10000 | 每 IP 连接频率(防握手风暴) |
💡 说明:单条 WS 消息硬上限 1 MiB(
WS_MAX_PAYLOAD,源码常量,不可配);导图典型 sync 消息 1–50 KB,正常协作不会触碰限流线,仅防滥用。
5.5 图片与导图复制限额
| 参数 | 默认值 | 说明 |
|---|---|---|
UPLOAD_IMAGE_MAX_SIZE_BYTES | 150000 | 单张上传图片大小(POST /api/maps/:id/images) |
UPLOAD_IMAGE_RATE_LIMIT / WINDOW_MS | 30 / 60000 | 每窗口上传次数 |
MAX_IMAGE_BYTES_PER_MAP | 2000000 | 单图图片总预算 |
DUPLICATE_MAP_RATE_LIMIT / WINDOW_MS | 5 / 60000 | 匿名「复制导图」接口频控(POST /api/maps/:id/duplicate) |
DUPLICATE_MAP_MAX_IMAGE_BYTES | 1000000000 | 复制时允许携带的图片总量 |
5.6 AI/LLM 参数
AI_ENABLED=true 后生效,对接 OpenAI 兼容接口:AI_LLM_URL(接口地址)、AI_LLM_TOKEN(API Key,用 ${VAR} 注入勿明文)、AI_LLM_PROVIDER/AI_LLM_MODEL、AI_LLM_RPM/TPM/TPD(每分钟/每日请求与 token 配额)、AI_LLM_MAX_OUTPUT_TOKENS、AI_LLM_TIMEOUT_MS。未配置时 /api/settings 的 info.aiModel 为 null(实测)。
5.7 userSettings(前端用户默认值)
settings.*.json 的 userSettings 段是前端初始默认(语言、暗色模式、分支样式 tapered、字号区间 15–70、步长 5、新节点/根节点默认颜色字体)。定位:系统设置(systemSettings)由后端下发、前端不缓存;用户设置(userSettings)用户在前端改后存浏览器本地,覆盖系统默认。改 override 文件只影响新访客的初始值。
六、生产配置模板
适用场景:16GB 内存 / 50GB SSD 单机、部门级协作(≤50 并发编辑者)、数据不出内网:
environment:
MODE: PROD
BINDING: "0.0.0.0"
POSTGRES_HOST: postgres_prod
POSTGRES_PORT: 5432
POSTGRES_DATABASE: teammapper-db
POSTGRES_USER: teammapper-user
POSTGRES_PASSWORD: q1w2e3r4
POSTGRES_SSL: "false"
POSTGRES_QUERY_TIMEOUT: 100000
POSTGRES_STATEMENT_TIMEOUT: 100000
DELETE_AFTER_DAYS: 365 # 内网知识资产不按 30 天清理
LOG_LEVEL: warn
JWT_SECRET: tm-jwt-9f3a7c2e5b8d1460 # 生产请换 32 字节随机串并用 ${VAR} 注入
WS_GLOBAL_MAX_CONNECTIONS: 200
YJS_MAP_MAX_BYTES: 8388608 # 大图团队放宽到 8 MiB
要点:DELETE_AFTER_DAYS 按数据主权策略定;JWT_SECRET 必须设否则「我的导图」不可用;对外发布务必配反向代理 TLS(官方 docs/deployment.md 有 Nginx 示例)。
七、常见问题
Q1:改了 settings.override.json 没生效?
该文件只在启动时读取,需 docker compose restart app_prod;并确认挂载路径是 /home/node/app/teammapper/config/settings.override.json(本文《TeamMapper 0.4.0 Docker Compose 部署指南》已挂载)。挂载前宿主机文件不存在会被挂成目录(见《TeamMapper 0.4.0 Docker Compose 部署指南》第十章 Q3)。
Q2:pictograms 图标开关为什么没有环境变量?
官方 README 明确该 flag 必须 build-time 写进 JSON(关闭时后端根本不挂代理路由),运行期改不了。
Q3:协作时连接被 1008 关闭?
触发 YJS_MESSAGE_* 限流(窗口 10s 内 >100 条 sync 消息或 >5 MiB)。多人拖拽大图的极端场景可放宽 YJS_MESSAGE_MAX_COUNT/YJS_MESSAGE_MAX_BYTES,或临时 LOG_LEVEL=debug 观察被拒消息。
Q4:想禁用匿名复制导图的滥用?
调低 DUPLICATE_MAP_RATE_LIMIT(默认每分钟 5 次);该端点自带 Throttle 守卫,无需改代码。
Q5:数据库连接池/超时如何影响协作?
持久化走防抖写库,POSTGRES_*_TIMEOUT 过小会导致大图保存失败进而触发图重置;保持默认 100000ms 即可。
八、参考链接
- 官方 README「Default Settings / Environment variable overrides」:https://github.com/b310-digital/teammapper
- 后端配置源码:
teammapper-backend/src/config.service.ts、src/map/utils/yjsLimits.ts(main 分支,2026-11-02) - 部署与挂载步骤:见本专栏《TeamMapper 0.4.0 Docker Compose 部署指南》
- 配置生效的接口侧验证:见本专栏《TeamMapper 0.4.0 API 使用详解》