install.sh 在裸金属云上常驻 launchd/systemd 守护进程。真正的坑不在 README 的第一屏:匿名卷让 OPENCLAW_HOME 像流沙;容器里把监听绑在 127.0.0.1 会让边缘代理与同事 CLI 同时「差一点就通」🔧;openclaw doctor 在真机上绿灯,换到瘦镜像里却漏检关键工具链;18789 与 sidecar 争端口像无声车祸。本文把双路径摊开:如何可靠持久化 Token 与状态、如何写清端口发布与 wss 公网地址、如何用六区视角把 Gateway 摆到新加坡、东京、首尔、香港、美东、美西最贴近人机同事的位置。
为什么镜像能构建成功,Docker 里的 OpenClaw 仍然半夜「人格分裂」
OpenClaw Gateway 是长寿命控制面:WebSocket、CLI RPC、会话与通道适配器默认挤在 18789 这一条监听上📡。Docker 擅长不可变交付,但 Gateway 天生带状态。团队如果把容器当一次性「用完即焚」却不给 OPENCLAW_HOME 明确卷映射,Channel 缓存会在滚动发布时消失,远端客户端看到「已连接又瞬间掉线」,自动化重试堆叠到上游限流。第二个错觉是绑定语义:在网络命名空间里写 127.0.0.1,并不代表你的同事或 Nginx 在宿主侧能碰到同一监听;于是日志里 handshake 差一点成功,真实流量却始终绕不进来。第三个错觉来自诊断:openclaw doctor 在开发笔记本上全绿,进入裁剪过的基础镜像却漏掉关键动态库或权限位——这在 pre-1.0 的快速迭代里并不罕见。第四个错觉是 Token:可写层上看似「已经登录」,Compose/K8s 一旦重建任务,频道在高峰期集体要重新授权。第五个错觉是地理:控制面被随手丢到便宜区,而值班同学主要在新加坡或首尔办公,CLI 偶发操作的 RTT 被放大,监控曲线却鸦雀无声。
与 Docker 对照的 install.sh 裸机路径换来的是更接近桌面的行为:launchd 或 systemd 重启就是普通服务重启;Safari、Xcode CLI、桌面脚本不必再叠一层嵌套虚拟化;日志与统一终端代理格式与你现有 Mac 运维习惯一致。代价是你得直面系统升级与机队漂移,而不是镜像digest一言以蔽之。于是问题从「哪种更潮」变成「你的组织更需要可复制的 Artifact,还是需要人机协同的 Apple 生态贴近度」。很多受监管团队最终双轨:评审环境走 Docker,生产 Gateway 走裸金属并锁卷与密钥。
若工作负载包含重型浏览器自动化、人工点选飞书/企业微信 Web、偶发 TestFlight 上传或需要屏幕共享演示,裸金属 macOS 主机往往更省心,因为 GUI 与 Metal 路径在容器里仍经常绕远路。若你的 OpenClaw 只服务 API 与 WebSocket、且团队能接受严格的卷与网络契约,Docker 能把爆炸半径收进命名空间——前提是 Token 与状态从不依赖匿名卷🔐。
匿名卷综合征:OPENCLAW_HOME 未映射到宿主机,发布即丢频道校准进度。
回环绑定陷阱:Gateway WS 仅在 netns 内可见,反向代理与远端 CLI 永远碰不到真监听。
doctor 假阴性:瘦镜像缺能力,现场诊断与笔记本不一致,生产首发才爆。
18789 撞车:sidecar、遗留探针或第二套试验网关抢占默认端口,日志只给 EADDRINUSE。
跨城控制面:交互主力在东京却把网关放美东,CPU 闲置但人肉运维体感卡顿。
把每一次安装都写成生命周期故事:交付、配置热合并与强制重启、Token 轮换、升级、灾备切换。给新加坡与美东各写一页实测 RTT 与拨测截图,凌晨两点值班的同学记不住抽象原则,但能记住「香港 Peer 更好」这种可执行结论。安全团队要在 Gateway 出回环前介入:WebSocket 暴露面扩大必须与反向代理鉴权、ACL、密钥密封同一节奏推进,容器或裸机只决定实现位置,不取消风控义务。
如果你已经在多区域云 Mac 上并行 Runner,也要分清「构建机」和「控制面机」:Gateway 并不必然与最重 Xcode 编译同机,但它应当靠近最常手动敲命令的人与最常需要浏览器会话的运营。否则你会用 Docker 解决镜像一致性,却用地理错位把人力效率抵消掉。
最后,避免把日志里的握手失败简单归因于「网络抖动」;先看端口发布是否与文档 wss URL 一致,再看 Token 是否跨越容器层仍是同一密钥材料,最后才扩容 CPU。顺序错了,预算只会买到.idle 核心。
Docker 隔离与 install.sh 裸金属:云 Mac 上的对照矩阵
这张表用于平台、应用与安全三方快速对齐,不是法律条文。追 CI 可重复性的团队通常偏向 Docker;需要频繁 GUI 伴生工具链的团队往往留在 install.sh + launchd。成本除了月租,还包括 Token 意外失效或端口映射写反时的应急工时。务必先在一座staging 城市(例如新加坡或东京)把两条路径都跑通再定生产默认,pre-1.0 的默认项会每月漂移。
| 维度 | Docker 隔离 | install.sh 裸金属 |
|---|---|---|
| 状态持久化 | 必须显式卷:OPENCLAW_HOME、日志、密钥;一旦忘记就像沙坑 | 默认写入主机路径;快照与 Time Machine/块存储策略现成 |
| 升级节奏 | 镜像 digest 升降级干脆;CI 可拦不合规层 | 依赖包 pin 与脚本回滚;更像传统机队治理 |
| 重启语义 | 编排器替换容器,会话若未 drainage 会掉线 | 守护进程 bounce 与任何后端服务一致,playbook 现成 |
| 监听发布 | 18789 需 bridge/host 网络配对;bind 与 netns 强耦合 | 以 OPENCLAW_GATEWAY_PORT 区分多实例,ss/netstat 直视 |
| 桌面型负载 | GUI/Metal 伴行任务成本高 | Safari、Xcode、桌面自动化路径最短 |
| 排障关联 | 容器 ID 与宿主机日志需二次关联 | 统一日志、崩溃报告与现有 Mac 监控对齐 |
容器改变的是重启与交付,不改变 WebSocket、Token、绑定三者耦合一体的现实。
在区域层面叠加决策:Gateway 放在香港而运营主要在洛杉矶,自动化尚可跑,人工操作却觉得「慢半拍」。把控制面靠近最重的交互城市,再用价格与合规条款微调,而不是反向操作。
Docker 真正高收益场景是「用完即扔」复现客户现场:起临时栈对照 Channel 怪相,同时用短 TTL Token 防止离职容器变密钥坟场。裸金属高收益场景是「7×24+偶发 GUI」共存:launchd Wake、桌面会话与 Gateway 并排而不互相嵌套折磨。
文档里写明为何选择某一城:是为了数据驻留、Peer 路径还是运营同城;别让明年的自己猜「当时觉得新加坡好听」。与此同时,把热更新指南、升级通道文档、Linux 对照排障文章的链接贴在 Wiki 首页,减少同事重复造轮子。
Compose 风格骨架:卷映射、18789 发布与 Gateway WS 绑定
下列 YAML 风格片段意在评审时能「diff 出意图」,而非绑定某vendor:把 OPENCLAW_HOME、日志路径、密钥挂载与端口映射写在一起,避免出现「README 写 A、Compose 写 B、Nginx 写 C」的三段分裂。裸机侧用同名环境变量镜像,staging 与生产只应差密钥与城市,不应差字段拼写。
service: openclaw-gateway image: registry.example/openclaw@sha256:… ports: - "18789:18789" environment: OPENCLAW_GATEWAY_PORT: "18789" OPENCLAW_HOME: /var/lib/openclaw GATEWAY_BIND_MODE: loopback-or-lan-review volumes: - /srv/oc-prod:/var/lib/openclaw - /srv/oc-logs:/var/log/openclaw secrets: - openclaw_tokens_ro 云 Mac 裸机对应: export OPENCLAW_GATEWAY_PORT=18789 export OPENCLAW_HOME=/usr/local/var/openclaw launchctl bootstrap system /Library/LaunchDaemons/org.openclaw.gateway.plist
修改骨架后,要在真实生产上下文里跑 openclaw doctor:工程师笔记本不算数,CI build 出来的镜像里才算数。为 WebSocket 写三组 URL:内网上游、公网 wss、健康检查 curl;少了任何一组都会在事故里出现「面板绿、客户红」。蓝绿双网关时端口与 OPENCLAW_HOME 必须成对隔离,容器与裸机一视同仁,否则缓存互踩。
编排滚动发布时,记住 Gateway 会话可能短暂中断;若 Channel SLA 敏感,加维护窗或先做只读探针,再切换流量。首尔与美东的跨洋团队若共享一套网关,更要提前约定谁能在本地夜窗操作。
提示:挂载进容器的 Token 文件设为只读;绑定面或鉴权策略变更后立刻轮换;公共仓库禁止粘贴真实路径。
六种实操步骤:无论 Docker 还是 install.sh 都先走完再放量
路径拍板:记录本区域选 Docker 还是裸机、升级owner、卷或目录的绝对路径。
持久化映射:绑定 OPENCLAW_HOME、日志、Token;验证编排重启后权限仍旧。
发布 18789:对齐 bridge/host/安全组;裸机用 ss 确认监听器唯一。
锁定 WS 绑定策略:loopback 或 LAN + 反向代理鉴权;文档写出公网 wss。
现场 doctor:在容器或守护进程同一上下文执行,保存版本与告警输出。
低峰探针:发单条 Channel 试验消息,远端 CLI 用运维粘贴同一 URL 复测,导出配置快照。
为每步标注职责:谁有权回滚端口映射、谁有权轮换密钥——事故第 20 分钟仍搞不清Owner 比写错端口更昂贵🔥。大版本 macOS 或基础镜像升级后,务必 dry-run 一遍 Runbook。
回滚包与正向变更并排存放:可用的镜像 digest 或安装包 tarball 要能一键拿到,别等客户催促时在网盘翻文件名。
可引用护栏与新加坡·东京·首尔·香港·美东·美西主机几何
监听唯一性:单主机默认同端口仅一个健康 Gateway;staging 另起端口与 OPENCLAW_HOME。
Token 生存级:容器重建后 secrets 仍须可解密;否则只是实验沙箱。
Metro 亲和:控制面靠近主要交互人群,而不是仅看单价;六区调度要与 RPO/RTO 一起写清。
注意:在完成反向代理鉴权、ACL 与轮换演练前,勿将 Gateway WebSocket 直接暴露到公网任意接口。
当事故复盘指向匿名卷或端口映射而不是 CPU,容器神话与裸机神话都应让位给工程纪律:显式状态、清晰网络边界、与人同城的托管。需要 Apple Silicon 独占、供电稳态、租期在新加坡/东京/首尔/香港/美东/美西弹性伸缩的团队,MESHLAUNCH 云端 Mac mini 通常是把原生 macOS 与控制面并列的更优解,你可继续自行选择 Docker 或 install.sh,但地基换成可预期裸金属,比把笔记本当机房门神可靠得多⚡。
财务同学应质疑「抽象选错导致的垂直扩容」:日志若显示持久化缺失,买更大实例无济于事;先修卷与映射,再用数据谈 CPU📊。
美西与东京各跑一套网关时,策略可同步但密钥必须隔离;把冗余原因写死,避免来年成本裁切误删合规节点。
要。Gateway 热重载与多实例指南 里关于端口、绑定与 TLS 的「可热合并 vs 必须重启」分界,对容器与裸机同样成立:动到监听套接字仍要进程级重启。
先走 Linux VPS 与云 Mac 排查阶梯,把端口映射、wss 路径与 Token 环境变量名记在工单里,再补充查阅 帮助中心。