openclaw doctor、仅回环绑定与令牌保管,并给可照抄的分步清单与 FAQ。延伸阅读 GitHub Actions 自托管 Runner 指南、Discord 构建摘要回传;帮助中心、购买页、技术博客均可免登录浏览。
痛点拆解:为什么必须网关 + 隔离 + 最小权限
1)管理面暴露:把 OpenClaw Dashboard 绑到 0.0.0.0 且无隧道保护,等于把令牌与调试接口摊在公网。
2)事件洪水:未过滤的 check_suite 会在矩阵构建下重复投递,远程机磁盘与 API 配额很快被拖垮。
3)工作目录串味:多任务共用同一克隆目录,node_modules 残留会让 lockfile diff 与真实提交不一致。
决策矩阵:监听面、令牌与触发面怎么选
| 维度 | 推荐(生产) | 避免 |
|---|---|---|
| 网关监听 | 127.0.0.1 + SSH 反向隧道 / 边缘反代 |
无鉴权直连 WAN 管理口 |
| GitHub 身份 | GitHub App 或 fine-grained PAT:Contents 读、Checks 写、Metadata 读 | 长寿命 classic repo 全家桶塞在仓库明文 |
| Webhook | 只勾 check_suite / pull_request + Secret 验签 |
全事件订阅、关 SSL 校验 |
| 工作副本 | 每 run 独立目录或 git worktree |
并行任务共享同一 WORK_DIR |
OpenClaw 网关:doctor、Dashboard 令牌与回环绑定
安装仍选 官方 curl 或 npm i -g openclaw@latest,执行 openclaw onboard 后,用 openclaw doctor 核对 Node 版本、证书与企业代理;launchd 与交互 shell 的 PATH 必须一致。
按 docs.openclaw.ai 将 HTTP 服务绑在 本机回环,Dashboard 展示的 访问令牌写入 plist、Keychain 或仅 root 可读 env 文件;对外只暴露经隧道转发的 Webhook 路径,由网关内 handler 校验 GitHub X-Hub-Signature-256 后再执行业务逻辑。
GitHub 侧:Webhook 事件过滤、Secret 与最小权限令牌
仓库 → Settings → Webhooks:Content type 选 application/json,事件建议先收窄到 check_suite(completed)或 pull_request;在 handler 里再判断 paths 是否命中 package-lock.json、pnpm-lock.yaml、yarn.lock、Cargo.lock 等。
写回检查运行时,优先 GitHub App 安装令牌;若用 PAT,仅在组织策略允许的前提下勾选最小仓库集合,并定期轮换。令牌与 Webhook Secret 绝不进入仓库树。
最小可复现步骤清单(远程 Mac)
- ① 固定 Node 24 LTS(或文档要求的 22.16+),
openclaw doctor全绿后再启守护进程。 - ② 网关监听
127.0.0.1,用ssh -R或内网反代把 GitHub 流量落到该端口。 - ③ 注册 Webhook,填入 Secret,在网关代码路径用官方算法验签,拒绝体非 JSON 或重复
delivery。 - ④ 为每次任务创建
/var/tmp/gh-check-<run_id>之类隔离目录,浅克隆触发 SHA。 - ⑤ 对目标 lock 文件执行
git diff或包管理器校验脚本,输出结构化日志。 - ⑥ 调用 Checks API 创建/更新
check_run,summary 写 diff 行数与结论;失败附日志路径。 - ⑦ 需要人工通知时,可复用 Discord 摘要流水线二次投递(与本站其他 OpenClaw 文章一致)。
常见报错 FAQ(验签、401、403、重复投递)
Webhook 一直 401 或验签失败?
核对仓库 Secret 与网关进程读取的是否为同一环境;确认用的是 sha256= 前缀与原始 body 字节序列;反代若改写了 body,验签必失败。
Checks API 403 resource not accessible?
令牌缺少 Checks 写权限或 App 未安装到该仓库;组织 SAML/策略可能拦截。用 curl -I -H "Authorization: Bearer $TOKEN" https://api.github.com/repos/OWNER/REPO 先验证作用域。
openclaw doctor 提示证书或 Node 路径异常?
在 launchd plist 显式写入 PATH 与 NODE_EXTRA_CA_CERTS;勿依赖登录 shell 才存在的 nvm 别名。
同一提交收到多次 check_suite?
在内存或 Redis 记录 head_sha + action,忽略尚未 completed 的套件;矩阵 Job 只在主 Job 回传一次摘要。