npm -g、onboard --install-daemon、gateway status/doctor;LaunchDarkly Webhook 的簽章、最小權限權杖、二四八…秒退避;合併閘道健康與預檢為單一 PR 摘要。選題聚焦旗標驅動預檢,與 GitOps 網鉤文不同。延伸:Node 24 回滾、status/doctor、環境合併、首頁、定價。
痛點拆解:為何旗標一變更就要預檢依賴
(一)旗標耦合後端時,單測難覆蓋真實解析路徑與鎖檔。(二)遠端 Mac 與託管 Runner 並存時,快取鍵/鏡像不一致易「本地綠、遠端紅」。(三)未驗簽或權杖過寬會留下偽造事件與稽核空洞。
暴露策略決策矩陣:僅回環對照 SSH 隧道
| 模式 | 適用情境 | 安全要點 | 維運成本 |
|---|---|---|---|
閘道綁定 127.0.0.1 | Webhook 消費者與 Mac 同機或同 Pod 網路 | 必配 OPENCLAW_GATEWAY_TOKEN,拒絕匿名 | 低;需確保事件來源能打到該埠 |
| SSH 本地埠轉發 | LD 管理平面在另一 VPC,僅允許堡壘轉送 | 金鑰輪替、AllowTcpForwarding 審核、限來源 IP | 中;隧道斷線要自動拉起 |
| (不建議)公網直連閘道 | — | 攻擊面大,與 fail-closed 原則衝突 | 高風險 |
實務多採同機回環 handler+內部轉發滿足 LD 出站,避免對外敞開 18789。
環境準備與版本鎖定
Node 24 LTS 對齊 2026.5.x;npm install -g openclaw@2026.5.x 釘版後跑 openclaw doctor,確認 PATH、守護與設定無告警,再寫 Webhook 路由。
node -v # 預期 v24.x npm install -g openclaw@2026.5.x openclaw doctor openclaw onboard --install-daemon openclaw gateway status
閘道 loopback 與 SSH 隧道暴露二擇一
同機則閘道綁 127.0.0.1,外層只做 HTTPS 與驗簽。跨主機可用 ssh -L …:127.0.0.1:18789 轉發並限來源 IP;隧道用 autossh 或 launchd 自動重連。
Webhook 路由與簽章驗證(含最小權限權杖)
以 raw body 做 HMAC-SHA256(signing secret),比對採常數時間。OPENCLAW_GATEWAY_TOKEN 僅供閘道探針;回寫版控另用窄權 PAT/OAuth。
# 偽程式:驗簽通過後才觸發預檢 # expected = HMAC_SHA256(signing_secret, raw_body) # 比對 LaunchDarkly 傳入之簽章標頭;失敗則 401 並記錄 request id
合併健康探針輸出為單一 PR 摘要
以 set -euo pipefail 串 gateway status、doctor 節錄與依賴預檢,tee 至 summary.txt,成敗同一版面便於 PR/Checks 解析。外呼限流時退避 二、四、八、十六、三十二秒共五輪(約六十二秒內),仍失敗則標待人工。
可複現步驟清單(教程向)
鎖版本:安裝 Node 24 與 openclaw@2026.5.x,將版本寫入 Runbook 與映像層標籤。
守護:執行 openclaw onboard --install-daemon 後以 openclaw gateway status 驗證 PID 與埠。
暴露:選回環或 SSH 隧道其一,禁止無 Token 的寬鬆監聽。
Webhook:設定 LD 端點 URL,伺服器端驗 HMAC;拒絕舊時間戳事件。
預檢:觸發後跑依賴解析/lockfile 檢查,退出碼非零即標示失敗摘要。
合併:tee status、doctor、預檢日誌為產物。
回寫:窄權 POST;退避二→三十二秒最多五輪。
可引用資訊(寫進門禁規格)
(一)埠 18789 僅內部參考,須經代理或隧道才對外。(二)sleep $((2**n))、n=1…5;HTTP 讀取逾時建議六十至一百二十秒。(三)摘要含事件類型、專案/環境鍵(去敏)、預檢退出碼。
常見 401/408 排障 FAQ
常為未帶 Bearer 或變數未注入該步驟;於同一 shell 匯出後再跑 gateway status。
代理改寫 body 會破壞 HMAC;改對原始位元組驗簽並核對 secret 與環境。
拉長讀取逾時、設 SSH keepalive,並將退避上限寫入門禁避免無限重試。