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 環境變量名記在工單裡,再補充查閱 幫助中心。