用途:为仓库配置 GitHub Webhook,使 push 事件触发服务器端自动部署。当需要为新仓库添加自动部署、新建服务或迁移项目,以及排查 Webhook 未触发、推送不部署、返回 403/401 时使用。
主要能力:验证环境(检查 .env 中的 WEBHOOK_SECRET,缺失时用 openssl rand -hex 32 生成并重启容器);检查端点可达性(curl -I https://webhook.temet.ai/hooks/health);在 hooks.json 中为仓库添加条目;提供 GitHub 配置步骤;测试集成并验证部署。
必要用法:
- 检查密钥:grep -E "^WEBHOOK_SECRET=" /home/dawiddutoit/projects/network/.env,缺失则生成并写入后执行 cd /home/dawiddutoit/projects/network && docker compose restart webhook。
- 健康检查:curl -I https://webhook.temet.ai/hooks/health。
- 在 /home/dawiddutoit/projects/network/config/hooks.json 添加 hook,字段含 id、execute-command(/scripts/deploy.sh)、command-working-directory、pass-arguments-to-command、trigger-rule(HMAC-SHA256 校验与 main 分支匹配),改后重启 webhook 容器。
- GitHub 侧:Settings -> Webhooks -> Add webhook,Payload URL 为 https://webhook.temet.ai/hooks/<repo-name>,内容类型 application/json,Secret 与 .env 一致,事件选 Just the push event,启用 SSL 与 Active。
- 测试:git commit --allow-empty -m "Test webhook" 后 git push origin main,查看 docker logs webhook --tail 20 与 /tmp/deploy-*.log。
适用场景与限制:需要 Docker 运行 webhook 容器、Cloudflare 隧道、webhook.temet.ai 认证绕过、仓库已克隆到 /projects/、Git 可执行 pull、GitHub 仓库管理员权限且存在 main 分支。注意:勿将密钥提交到 git,所有仓库共用一个密钥,改 hooks.json 后必须重启容器,勿跳过健康检查,始终使用 HTTPS,非 main 分支需修改 trigger-rule。401/403 多为密钥不匹配,404 表示 Hook ID 不存在。其余细节暂未提供。