2026-04-22 OpenClaw npm 升級、陳舊模組引用與無頭租用雲端 Mac 上的閘道器重啟
在租用的 Apple Silicon Mac 上以 全域 npm 安裝執行 OpenClaw 的維運同事,升級後常遇到同一個迷惑現象:openclaw --version 已是新 semver,但閘道器仍載入舊模組—Webhook 抖動、頻道心跳遺失、日誌出現混合路徑。本2026-04-22文件記錄先停後升流程、與社群報告一致的雙重重啟以緩解陳舊 Node 解析,並與 閘道器升級與回滾 搭配回滾。它補充 首次安裝與守護(首啟)以及 環境與密鑰(狀態路徑)。
把升級視為一次小型發布:你需要變更視窗、可觀測性基線,以及「失敗時如何回到昨天」的劇本。全域 npm 與 launchd 的組合代表檔案鎖與PATH 前綴都會成為變數;若你還在共用主機上混跑 Xcode CI,磁碟與 inode 壓力會放大「看似隨機」的模組解析問題。下文先教你在動刀前收集證據,再給出嚴格順序的命令與等待時間,最後把驗證從本機健康檢查擴展到入口與 Webhook 的端到端探針。
值得記錄的陳舊模組訊號
在修改 npm 全域套件前先取證—凌晨兩點排錯的你,會感謝現在多打的這幾行日誌。
| 訊號 | 解讀 | 擷取指令 |
|---|---|---|
| 閘道器日誌出現兩個 semver | 二進位已升級但 worker 仍 import 舊樹 | 歸檔 journalctl/stdout + which openclaw |
| 升級後間歇性 ESM import 錯誤 | 混合的 node_modules 解析路徑 |
npm ls -g openclaw --all + 閘道器環境 dump |
| 第一次重啟健康但流量仍異常 | 需要第二次彈跳沖刷模組快取 | 帶時間戳的健康 curl 到 127.0.0.1 |
預檢快照與備份
- 記錄
openclaw --version與node -v(上游建議 Node 22.16+ 或 24.x)。 - 將
~/.openclaw打成 tarball 放到 npm 全域樹之外—備份紀律見 閘道器回滾。 - 匯出 launchd plist 路徑(若在 首次安裝 期間自訂過)。
- 透過 launchd 環境 說明校驗
OPENCLAW_STATE_DIR與密鑰優先順序。
停止 → 升級 → 重啟(順序至關重要)
絕不要在閘道器仍持有轉譯模組檔案鎖時讓 npm 重寫全域套件。先停服務,再升級,再啟動—這與 macOS 上任何 Node 守護程序的實務一致。
openclaw gateway stop && npm install -g openclaw@latest && openclaw gateway start
針對陳舊模組的雙次閘道器重啟
當健康檢查仍顯示混合版本時,執行第二次乾淨重啟:停止、等待通訊端排空、啟動、重新跑本機探針。這與公開討論中「Node 在第二次冷啟動前保留陳舊解析」的緩解一致。兩次重啟之間不要過早切換 nginx 上游—在重新暴露 香港 / 日本 / 韓國 / 新加坡 / 美國 流量前,先遵循 健康探針。
兩次重啟之間要觀察什麼
在靜默視窗內擷取監聽通訊埠(對閘道器埠過濾 lsof -nP -iTCP -sTCP:LISTEN),確認沒有孤兒 node 子程序殘留,並檢查承載 npm 全域前綴的卷的 inode 壓力。跳過此驗證的團隊常在第一次彈跳後「成功」,卻仍服務混合模組圖,因為長生命週期 worker 在 SIGTERM 後倖存。記錄時間戳:繁忙主機上 stop 與 start 之間建議至少 45–90 秒;當防毒或索引守護程序爭搶路徑時,用 120 秒—這在共用建置機上很常見。
將應用程式日誌與系統負載關聯:若重啟閘道器時 load average 仍高於核心數的 4 倍,應延後重新開啟入口,否則健康檢查可能因與 npm 無關的原因抖動。對聊天橋,在每次重啟後透過 staging Webhook 傳送合成「空操作」訊息,證明端到端遞送後再把路由提升到生產 DNS。
最後,把npm 全域根(npm root -g)與解析出的二進位(which openclaw)快照進工單—semver 分歧時,比較這兩條路徑能及早發現符號連結漂移。多區域租用者應逐主機重複同一清單;日本與美國節點之間全域前綴不一致,是升級後「僅一個機房正常」的常見根因。
健康、日誌與重新啟用入口
第二次彈跳後驗證:
- 對閘道器 admin/health 端點執行本機
curl,檢查期望 JSON 欄位。 - 依 生產結構化日誌 指南保持日誌連續性。
- 透過 nginx 反向代理 校驗入口 TLS 與 Webhook 路徑。
擴展驗證包含負向測試:在沙箱 agent 故意弄壞下游 token,確認錯誤文案與新組建的字串模板一致—混合 semver 往往首先表現為微妙的錯誤 copy。變更後至少 15 分鐘保留五項基線指標(p50/p95 延遲、錯誤率、佇列深度、CPU、RSS)以便與升級前圖表比較;若無歷史,請在動 npm 之前先播種儀表板。
semver 無法收斂時的回滾
若雙次重啟仍失敗,用 npm 重裝上一個已知良好 semver,恢復 ~/.openclaw 的 tarball,並重放閘道器啟動序列。在支援討論串中同時記錄 npm 與 OpenClaw 版本。恢復期間的網狀存取可參考 Tailscale 網格。
| 情境 | 回滾重點 | 預計時間 |
|---|---|---|
| npm 修補級迴歸 | 用 npm 固定上一修補 | 6–12 分鐘 |
| 升級後設定漂移 | 恢復 tarball + 校驗 JSON schema | 12–25 分鐘 |
| 區域級事件 | 故障轉移到第二台 MacXCode 節點 | 取決於 DNS/TTL |
相關手冊
升級後的頻道級問題可能與 子代理與頻道排錯 重疊;技能封裝不同—若升級包含技能遷移,見 技能與 ClawHub。
常見問題:npm 與雲端 Mac 閘道器
| 問題 | 答案 |
|---|---|
| 是否支援 pnpm? | 若組織標準化 pnpm,鏡像同樣的先停後升紀律;保持全域前綴在 PATH 中顯而易見。 |
| 是否應改為 Docker? | 在 Docker 與本機 npm 中比較取捨—兩者皆可,但本文面向裸金屬租用。 |
| 持續健康監控在哪裡? | 使用 說明 中的支援管道,並依生產指南保留合成探針。 |
為何 Mac mini M4 是 OpenClaw npm 升級的穩態主機
Mac mini M4 裸金屬節點為 Node 閘道器提供可預測的冷啟動時間—在你有意兩次彈跳服務時尤其關鍵。相比超售 VM,你更少把時間浪費在看起來像「陳舊模組」的 phantom CPU steal 症狀上。MacXCode 在香港 · 日本 · 韓國 · 新加坡 · 美國的 SSH 優先 存取、可選 1–2 TB NVMe 工作區與可預測網路,簡化了為藍綠升級執行重複閘道器。當 npm 變動加速時,從 定價 增加容量,而不是在單台疲憊主機上堆實驗。