Files
billai/webhook
CHE LIANG ZHAO 4805f94126 fix(server, webhook): 添加 MongoDB 数据持久化和上传前去重功能
- 优化支付宝时间格式解析(支持无前导零格式)
- 修复 webhook 服务编译错误
- 更新版本号至 1.0.5
2026-01-14 14:53:50 +08:00
..

Webhook 服务

用于监听 Gitea webhook 事件,自动触发服务器拉取最新代码并重新构建部署。

特性

  • 接收 Gitea webhook 推送事件
  • HMAC-SHA256 签名验证
  • 仅处理主分支 (master/main) 的推送
  • 自动执行部署脚本
  • 异步部署,快速响应
  • 零停机热更新

配置

环境变量

变量 说明 默认值
WEBHOOK_PORT webhook 服务监听端口 9000
WEBHOOK_SECRET Gitea webhook 签名密钥 your-webhook-secret
REPO_PATH 仓库根目录路径 /app

部署脚本

脚本位置: /app/deploy.sh

执行以下操作:

  1. 拉取最新代码 (git pull)
  2. 热更新部署(零停机)
  3. 自动清理旧镜像
  4. 健康检查

安全性

设置 Webhook Secret

在 Gitea 中配置 webhook 时,需要设置 Secret

  1. 生成一个随机密钥:
openssl rand -hex 32
# 输出示例: a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6
  1. 在 Docker 容器中设置环境变量:
environment:
  WEBHOOK_SECRET: "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6"

Gitea Webhook 配置

1. 进入仓库设置

在 Gitea 中打开仓库,进入 设置 → Webhook

2. 添加新 Webhook

  • URL: http://<your-server>:9000/webhook
  • 内容类型: application/json
  • 密钥: 使用上面生成的 Secret
  • 触发器: 勾选 推送事件
  • 活跃: 是

3. 测试连接

点击 "测试" 按钮验证连接

日志

查看部署日志:

# 查看容器日志
docker logs billai-webhook

# 查看部署脚本日志
docker exec billai-webhook tail -f /tmp/billai_deploy.log

访问端点

  • Webhook: POST /webhook
  • 健康检查: GET /health

工作流

Gitea Push Event
      ↓
Webhook Service (port 9000)
      ↓
验证 HMAC-SHA256 签名
      ↓
检查分支 (仅主分支)
      ↓
异步触发部署脚本
      ↓
执行 git pull
      ↓
执行 docker-compose build/up
      ↓
健康检查
      ↓
部署完成

故障排除

签名验证失败

  • 检查 Gitea 中配置的 Secret 是否与环境变量 WEBHOOK_SECRET 一致

部署脚本无法执行

  • 确保 deploy.sh 存在于仓库根目录
  • 检查文件权限:chmod +x deploy.sh
  • 检查容器内是否有 git、docker 等工具

Docker 操作失败

  • 确保容器有权限访问 Docker Socket
  • 在 docker-compose 中正确挂载 Docker Socket
volumes:
  - /var/run/docker.sock:/var/run/docker.sock

示例 docker-compose 配置

参考项目根目录的 docker-compose.yaml