網關安裝與健康檢查
僅網關收 Linear POST;換機或升級 Xcode 不必改 Linear URL。工作者以 mesh_node_id 標示,不各自暴露公網。角色與安裝見 多節點部署指南;對 Linear API 與聊天 Webhook 的出站宜由網關統一。
- 步驟 1. 在網關主機安裝 OpenClaw,設定
OPENCLAW_CONFIG_ROOT,以 LaunchDaemon(或等效常駐)執行,確保重開機後仍能收 Linear 事件。 - 步驟 2. 將準備貼到 Linear 的
https://…主機名對應到該網關;Webhook 路徑單獨做反向代理 location,並設定合理本文大小上限(TLS 邊界可參考 Nginx/Caddy 決策矩陣)。 - 步驟 3. 以
openclaw doctor、日誌抽樣與GET /health(或與 技能預熱與健康探針合併)驗證就緒,讓負載均衡在釋出版本時能排空不健康實例。 - 步驟 4. 記錄
correlation_id、路由與入佇列延遲;以 網關限流與工作階段併發 為 Webhook 留預算。廣播可對齊 共享建置通知、OpenClaw 索引。
多儲存庫共用網關時可收斂 專案設定與日誌。
Linear 簽名驗證
先驗簽、再解析。Linear 簽的是完整原始本文;先 parse 再 stringify 常在負載下弄壞 HMAC。
- 步驟 1. 於 Linear 建立 Webhook,複製一次性簽章密鑰,依 密鑰與最小權限 寫入僅守護行程可讀檔(例如
/etc/openclaw/secrets.d/linear/webhook.secret,權限0440)。 - 步驟 2. 緩衝原始位元組,依文件算 HMAC-SHA256,與
Linear-Signature常數時間比對;有時間戳防重放則收緊視窗。 - 步驟 3. 簽名錯誤回
401,日誌只留去識別後的中繼資料(與 Teams 建置狀態 Webhook 相同衛生習慣)。 - 步驟 4. 僅在入佇列已持久化後回
200,以免 Linear 重試放大重複任務;排序與交接細節見 部署與任務佇列同步。
與共享建置腳本串聯
已驗簽載荷正規化為池內任一台 Mac 可跑的任務:儲存庫、ref、議題 id、觸發者、標籤與 idempotency_key(取自 Linear 傳遞中繼)。節點 A 忙時由 B 跑同一進入點,對外仍單一 Webhook。
- 步驟 1. 白名單應觸發建置的狀態(例如特定欄位或
ci標籤);其餘事件快速200略過。 - 步驟 2. 將任務推入共享佇列(Redis、RabbitMQ 或 OpenClaw 任務,細節見 任務佇列重試步驟),欄位至少含
linear_issue_id、團隊、請求者與冪等鍵。 - 步驟 3. 全池使用版本鎖定的同一進入點(技能版本鎖與環境樣板);若 monorepo 並行建置,必要時搭配 worktree 與 lockfile 矩陣。
- 步驟 4. 完成後發事件,附
mesh_node_id、耗時、日誌摘錄、產物連結;網關統一廣播到聊天(版型見 Slack、Google Chat、Teams)。 - 步驟 5. 要摘要回 Linear 時,網關以具留言權的 API 金鑰呼叫 GraphQL(輪替:權杖輪替):圖示、短 SHA、節點、流水線連結與兩行 OpenClaw 摘要。
Linear 亦觸發 GHA 時,與 Runner 路由 分車道,避免與共享 Mac 互搶磁碟。
失敗重試與通知
節點多則失敗型態多;維持單一通知故事,入站(Linear→你)與出站(你→聊天/Linear API)分開治理。
FAQ
- 本機 curl 驗簽通過,上線卻失敗?
- 框架實際收到的位元組常與手測不同:對照預發 raw body、關閉邊緣 gzip 重編碼、確認 WAF 未剥標頭;可用已遮罩存取日誌片段重算。
- 拖曳卡片很快時會重複排程建置?
- 對狀態轉移防抖或要求「可建置」標籤;冪等鍵組合議題 id、欄位 id 與短時間桶。
- 建置綠燈但 Linear 留言從未出現?
- 查 API 金鑰留言權、
issueId與 GraphQL 變數一致,並看 schema 是否隨 API 升級漂移。 - 真的只能讓「一台/一層」對 Linear 說話?
- 建置節點可替換、少持密;網關持驗簽與 API/聊天秘密,加節點才是容量題而非資安審查。
Mesh 要訣:單一對外 Webhook、raw body 驗簽、持久化後才 200、出站廣播+選用 GraphQL 摘要、429/5xx 有界重試。
下一步(僅公開頁)
由單一網關終止 Linear 與對外通知。免登入:首頁、購買/套餐、幫助中心、部落格、OpenClaw 索引。擴多節點池請先在套餐頁對齊併發與地域,再分離網關與建置機。