多人密钥 · 工作区分舱 · 日志可观测 · 六步上线验收 · 与常驻节点衔接
在单台 24/7 云端 Mac 或 Linux VPS 上跑 OpenClaw 的小团队负责人常被问到:「能不能大家都用同一台 Gateway?」可以,但若把密钥、工作区与通道白名单混在一个不可审计的 .env 里,下一次误配就会演变成全员不可用。本文先回答谁遇到什么问题:多人接入、密钥轮换与排障责任边界不清;再给出结论:用分舱(独立 env_file + 数据目录 + 端口表)+ 最小权限 + 日志分段验收把「共用」变成可控的运维对象;结构上依次交付痛点拆解、选型矩阵、六步 Runbook、可引用参数与上线前决策表。与网络命名空间相关的握手问题请交叉阅读 Compose 网络排障;与资源上限和健康检查请见 Compose 生产基线;与同机第二套栈隔离见 多实例防串台;与通道与暴露面见 生产加固清单;首次安装与 doctor 字段对齐见 安装与 doctor 清单;需要稳定出口与独占节点可走 订购页。
「共用」并不等于「把管理员密钥群发进微信群」。当成员各自在本机导出同名环境变量、或在 CI 里硬编码同一路径时,你得到的是表面上只有一台 Gateway、实际上有 N 份互相覆盖的配置真相。下面五条在 2026 年的工单里反复出现,把它们写进团队规范,比再多买一张 GPU 更能降低 MTTR。
密钥与工作区耦合:把模型密钥与通道令牌写在仓库根目录单一 .env 里,任何人一次误提交都会触发全员轮换;更糟的是你无法从日志判断「是谁的 CLI 在最后一次写入」。
缺少端口与监听矩阵:同一宿主机上第二套实验栈占用相邻端口,生产 Gateway 看似正常,但健康检查打到的是旧进程;排障会退化成「重启试试」。
通道白名单与成员出口不一致:部分同事走公司代理、部分走家庭宽带,allowedOrigins 只覆盖其中一种形态,表现为只有 A 能连、B 永远 403,却被误读为权限角色问题。
没有「分舱验收」语言:上线评审只问「能发消息吗」,不问「每位成员的 env_file 是否独立挂载、数据目录是否可备份拆分」;一旦要做密钥分权或合规审计,材料当场不够。
与远程 Mac 接力链路脱节:Gateway 在 VPS、重编译在 Mac 池时,若未把 SSH 主机名、私网 DNS 与 Gateway 回调可达性写在同一张拓扑表,Webhook 与通道会间歇性掉线,团队会错误地加大模型超时。
把上述五条映射到「可交付物」:端口表、env_file 映射表、通道来源清单、备份集定义、以及一次最小通道探针命令。没有这五张纸,就不允许把新成员加入生产 profile。听起来像流程负担,实则是把不可见的口头协议变成可 diff 的配置资产。
再补一层组织视角:当 Gateway 成为「团队公共设施」,它的变更频率会显著高于单兵自托管。此时评审粒度要从「功能是否可用」提升到「是否可回滚、可二分、可让下一位值班同事接手」。这意味着 PR 或变更单里必须附上:旧值/新值、影响面(成员列表)、以及回滚窗口(例如双写密钥的小时数)。
最后,别把「共用」误解成「共享 root」。即便宿主机只有一份 Docker,仍应通过命名卷、子目录 ACL 与只读挂载把工作区可写边界钉死;否则一次误删目录会同时抹掉生产与 staging 的会话状态。与多实例隔离相关的工程细节,务必与 COMPOSE_PROJECT_NAME 与数据目录隔离 文交叉阅读,避免「以为分了两份 compose 文件,其实仍指向同一挂载点」的经典坑。
当你把隐性税拆成清单后,团队会自然问下一个问题:「我们到底该一人一套 Gateway,还是强行共用?」下一节用矩阵把成本、暴露面与运维负担放到同一页上评审,而不是在会议里凭直觉拍板。
没有绝对正确,只有与你团队人数、合规要求、以及你是否愿意维护多套 TLS 与通道回调相匹配的选择。请把矩阵打印在评审页上:只允许勾选一格作为本季度默认,并在脚注写明「何时触发升级到下一格」。
| 模式 | 适用前提 | 主要收益 | 主要成本 |
|---|---|---|---|
| 每人独立 Gateway 实例 | 成员 ≤3、彼此任务强隔离、或合规要求一人一档审计 | 爆炸半径最小;密钥轮换互不牵连 | CPU/内存与通道 webhook 复制;需要多套反代与证书运维 |
| 单 Gateway + 多 API Key 分舱 | 5–15 人、共享同一回调域名、希望统一观测与告警 | 运维面集中;日志与指标可在同一面板对齐 | 必须严格执行 env_file 与目录隔离,否则配置漂移极快 |
| 单 Gateway + 角色分权(读写分卷) | 有平台组与业务组、需要「可写工作区」与「只读消费」并存 | 减少重复安装;便于统一执行安全加固清单 | 卷权限与 CI 挂载策略复杂;需要更细的变更评审 |
共用的前提是:每位成员的差异都能落在「可替换的文件」而不是「共享的默认可变状态」;否则你得到的不是规模经济,而是规模事故。
若你最终落在「单 Gateway + 多密钥分舱」,请把「分舱」定义成可机器校验的三元组:COMPOSE_PROJECT_NAME、数据目录挂载点、以及成员专属 env_file。任何一步无法在三行内写清楚,就不算分舱完成。
下列顺序刻意把「最便宜的观测」放在最前;任何一步失败都应停止向下猜测并保存输出。若与安装向导字段不一致,回到 安装与 doctor 清单 对齐命名。
冻结目录骨架:为生产与 staging 各建独立数据根路径,并在 README 写明「禁止交叉软链」;Compose 里用命名卷或绑定挂载二选一并版本化。
拆分 env_file:公共基线(监听、日志级别)与成员密钥(模型与通道)分文件;CI 只注入只读 token,禁止写回主机。
端口表打勾:发布端口、容器内监听地址与宿主机防火墙三元对齐;与 网络排障文 的症状树交叉验证。
通道最小探针:每位成员用自己的 CLI 或浏览器来源跑一遍「发送—回执」闭环,记录时间戳与 request id;403 必须附 origins 对照。
备份与恢复演练:导出最小备份集(配置 + 会话状态策略),在 staging 冷启动一次;RTO/RPO 用团队可接受数字写在变更单脚注。
值班交接包:留下三条命令:openclaw doctor、Gateway 最近 200 行日志、以及通道状态查询;确保下一位同事无需私聊即可接手。
/srv/openclaw/
prod/
compose.yaml
env/
base.env
alice.env
bob.env
data/ # 命名卷或绑定挂载,禁止与 staging 共享
staging/
compose.yaml
env/
base.env
alice.staging.env
data/
提示:若同一宿主机需要第二套并行栈,优先阅读 多实例隔离 的端口表与 COMPOSE_PROJECT_NAME 段落,再合并到本分舱 Runbook。
这一节只收录能在配置里点名的事实,避免「感觉通道不稳定」这类不可审计表述。需要 mem_limit 与 json-file 轮转口径时回到 Compose 生产基线。
18789 作为本地控制面/仪表盘的默认端口讨论语境;上线评审必须把「监听地址 + 是否经反代 + 是否仅内网可达」写成三列,而不是只写端口号。注意:不要在同一变更单里同时轮换模型密钥、通道令牌与反代证书;三角变更会让回滚无法二分。需要 TLS 与反代路径时,见 反代 TLS 实操。
把验收从功能演示升级为可勾选的合规语言:默认拒绝、显式放行、可回滚。下表建议作为发布门禁;任一格无法勾选,就降级为内测 profile。
| 验收项 | 通过标准(可机器或日志核对) | 常见失败信号 |
|---|---|---|
| 密钥分舱 | 每位成员独立 env_file,CI 使用只读注入 | 仓库出现共享 .env 或明文密钥片段 |
| 暴露面 | 控制面默认不可从公网直达,或经 mTLS/白名单收敛 | 扫描到对 0.0.0.0 的未鉴权面板 |
| 可观测 | 403/超时能在 5 分钟内映射到 origins、反代或上游之一 | 日志只有堆栈没有 request id |
长期靠「某位核心同事脑内地图」维护共用 Gateway,会在人员流动时把风险集中爆发;把 Runbook 与端口表沉淀成仓库资产,才能把 AI Agent 从个人玩具升级为公司基础设施。
常见误区:看到 403 就先轮换模型密钥;多数时候应先完成 origins 与代理出口对照,再动密钥。
纯脚本临时打通端口而不写清单,在审计场景下很难证明「默认拒绝、显式放行」;当 OpenClaw 需要与固定出口、主机名与私网拓扑一并归档时,自建 VPS 上的 ad-hoc 组合往往缺少可签字的变更单。对于要把 iOS 构建、桌面接力与 Agent 常驻放在独占、地区与网络档位可预期环境、并希望把 Gateway 与 Mac 池叙述统一到同一套语言的小团队,VpsMesh 的 Mac Mini 云端租赁通常是更优解:独占节点便于固化监听与 ACL,并与 团队私网 Runbook 对齐;价格与规格见 价格页,连接与帮助见 帮助中心。
端口与监听矩阵、数据目录与 COMPOSE_PROJECT_NAME、以及每位成员的 env_file 映射表;任何变更都先改表再打命令。需要加固检查项时见 生产加固清单。
采用双写窗口:新密钥先写入独立 env_file 并在 staging profile 验证通道,再切换生产 compose 引用,并保留旧密钥可回滚窗口;轮换后立刻跑一次 openclaw doctor 与最小通道探针。订购与出口需求见 订购页。
先对齐时间戳区分边缘鉴权与应用侧 allowedOrigins;若只有特定成员失败,优先核对该成员 CLI 的 Origin 或代理出口是否与白名单一致,并交叉阅读 Compose 网络排障 与 帮助中心。