想在2026 年用一台Apple Silicon Mac mini同時跑 OpenClaw 的預發與生產閘道,最常見的事故不是模型掛了,而是設定根目錄、TCP 埠號與 LaunchAgent 標籤彼此踩踏:staging 覆寫了生產權杖檔、兩份 plist 共用同一段 PATH 卻指向不同 Node,或健康探針只 curl 127.0.0.1 而閘道實際綁在區網位址。本文提供維運可直接照抄的隔離策略:獨立目錄(建議 chmod 700)、埠號對 8787/8788、成對的日誌路徑,以及先跑 doctor 再接入流量的五分鐘冒煙;並串聯站內 EADDRINUSE 與 lsof 排查、首次執行與 PATH/LaunchEnvironmentVariables、doctor 診斷清單,避免「靠感覺改 plist」。
讀完你應能回答三個稽核問題:哪套目錄持有哪組金鑰、哪條 launchctl 標籤對應哪條監聽,以及最近一次 doctor 通過的截圖或日誌片段存在哪裡。以下數字可直接寫進工單:700 權限、8787/8788 埠號、10 秒的 ThrottleInterval 防抖,以及 MacHTML 公開頁面常見的約 16.9 美元/天雲主機日租基線。
為何一台機器要跑兩套 profile
採購週期裡,最容易過關的是「先租兩週驗證自動化」,而不是立刻再買第二台金屬機。雲端 Mac mini 提供與筆電一致的 macOS、launchd 與鑰匙圈語意,適合作為 OpenClaw 的真機沙箱:你可以讓 staging 每天合併三次,而生產只在變更視窗發佈。若兩套環境共用同一設定根,任何一次 staging 的 npm link、暫時工具白名單或模型端點切換,都可能把生產對話寫進同一份 sqlite,除錯會退化成「誰最後動過檔案」。
把 profile 視為安全邊界而非功能開關:邊界內要有自己的目錄、埠號、plist、日誌、金鑰輪替節奏與回復 tarball。如此當財務問「為何不多買一台」時,你能用數據回答:日租 16.9 美元量級即可涵蓋雙閘道壓測,而一次生產誤連 staging 模型的損失遠高於數月租金。
目錄拆分與金鑰衛生
建議在自動化使用者家目錄建立 ~/.openclaw-staging 與 ~/.openclaw-prod,並以 chmod 700 收緊權限,避免同機其他維運帳號誤讀快取。不要把 staging 目錄軟連結到生產「省磁碟」——磁碟成本遠低於一次金鑰外洩後的通報與輪替。為每個目錄維護 README:記錄建立日期、負責人、最近一次 doctor 輸出摘要,以及512 GB或1 TB磁碟上預留的日誌輪替策略(例如單檔 128 MB切分)。
若未來要把兩套環境拆到兩個 macOS 使用者,目錄命名保持不變可降低遷移成本:只需調整 plist 中的使用者與檔案屬主,而不必重寫自動化腳本裡的路徑常數。
plist 標籤、日誌與環境區塊
為 Label 使用不可混淆的後綴,例如 com.example.openclaw.gateway.staging 與 …prod;重複標籤會讓 launchctl kickstart -k 誤重啟另一套世界。將 StandardOutPath 與 StandardErrorPath 指到 ~/Library/Logs/OpenClaw/ 下不同檔案,便於值班同仁 tail -F 時不會把兩條閘道的堆疊攪在一起。
在 LaunchEnvironmentVariables 中寫入絕對路徑的 Node 執行檔、把 Homebrew 或 volta 的 shim 目錄放在 PATH 前部,並新增自訂變數(如 OPENCLAW_PROFILE_DIR)指向對應設定根。偵錯崩潰迴圈時,把 ThrottleInterval 提到至少 10 秒,避免 launchd 在一小時內刷出上千份相同堆疊,拖垮日誌蒐集與磁碟 IO。
埠號與職責矩陣
| 維度 | staging | production |
|---|---|---|
| 監聽埠號 | 8787 | 8788 |
| 設定根 | ~/.openclaw-staging | ~/.openclaw-prod |
| LaunchAgent 標籤 | 以 .staging 結尾 | 以 .prod 結尾 |
| 金鑰輪替 | 活躍開發期可每週 | 隨變更視窗,常見為每月 |
| doctor 頻率 | 每次合併預覽前 | 每次貼標籤發佈後 |
反向代理、回環綁定與常見坑
多數團隊會在 nginx 或 Caddy 終止 TLS,再反代到本機回環位址。除非有明確防火牆與白名單,避免讓兩套閘道都綁定 0.0.0.0——那會把自動化介面暴露到區網內任何可路由的用戶端。若 staging 與生產的閒置逾時相差超過 5%,你會在 staging「重現不了」生產偶發斷線:請把上游 proxy_read_timeout 與閘道 keep-alive 對齊。
鑰匙圈層面,若兩套 profile 共用同一簽章憑證或用戶端憑證,macOS 可能在同一段工作階段裡快取解鎖狀態,稽核會質疑隔離是否成立。為每套環境準備獨立身分材料,並在工單附上 security find-identity -v -p codesigning 截圖作為證據鏈。
事故回應時禁止一上來就 killall node:這會繞過 launchd 的重啟策略,留下「幽靈第三個行程」。應寫清先 bootout 哪條標籤、再釋放哪個埠號、最後從哪個備份 tarball 還原 ~/.openclaw-prod。
可重現上線清單
- 建立兩套目錄並
chmod 700,以ls -le核對 ACL。 - 以
lsof -nP -iTCP:8787 -sTCP:LISTEN與8788確認無殭屍占用。 - 複製 plist 模板後執行
diff:僅允許標籤、路徑、埠號、環境區塊不同。 - 分別在對應目錄匯出環境並執行 doctor,將輸出附到工單。
- 先啟動 staging,對
127.0.0.1:8787健康路徑連打 三次探針,間隔 兩秒,要求連續 200。 - 再 bootstrap 生產,對 8788 重複同樣探針。
- 把 plist 的 SHA-256 摘要記入變更單,後續漂移審查比對雜湊而非肉眼。
- 寫回復:先
bootout生產標籤,必要時只保留 staging 單堆疊執行。
常見問題
能否共享一個設定目錄但用不同參數檔?
風險極高,sqlite 與快取仍會互踩;目錄級隔離是最低成本防線。
只有公網單網域怎麼辦?
在反向代理以 SNI 或路徑分流到兩組回環埠號,閘道本身仍監聽本機。
如何向安全團隊證明隔離?
展示不同 Label、不同日誌、不同 API Key,以及各自獨立的 doctor 輸出時間戳。
Apple Silicon Mac mini在並行跑兩套 Node 閘道、Safari 冒煙用戶端與 log stream --predicate 時仍能保持桌面級靜音,整機閒置功耗常見在12 瓦量級附近,遠低於塔式工作站。透過 MacHTML 租用雲端主機可取得 SSH 與可選 VNC,便於跨時區兩人同時核對 plist XML,而不必跨國郵寄筆電。試點結束直接停機,依日曆天結算,避免「為兩週驗證買兩台機器然後閒置十一個月」。
OpenClaw 的 profile 天生短命:staging 應頻繁變動,生產應長期乏味。彈性租賃讓「兩套邏輯閘道、一台實體機」在工程上成立,在財務上也成立——這正是雲端 macOS 與 OpenClaw 自動化結合時最省心的折衷。