Skip to content

wanghehacker/webhook_proxy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Webhook 反向代理服务

基于 nginx 的 Docker 容器化 webhook 反向代理服务,用于接收 GitLab、Jenkins、GitHub、Gitea 等 CI/CD 系统的 webhook 请求,并转发给后端服务(如 openclaw)。

功能特性

  • 支持 GitLab、Jenkins、GitHub、Gitea 等多种 webhook 源
  • 基于 nginx 的高性能反向代理
  • Docker 容器化部署,开箱即用
  • 保留原始 webhook 头部信息
  • 健康检查端点
  • 访问日志记录
  • 安全头部配置

架构

GitLab/Jenkins/GitHub/Gitea → Nginx 反向代理 (Docker) → Openclaw 服务

快速开始

1. 克隆项目

git clone https://github.com/wanghehacker/webhook_proxy.git
cd webhook_proxy

2. 配置环境变量

复制环境变量模板并编辑:

cp .env.example .env

编辑 .env 文件,配置以下关键参数:

# 代理服务端口(默认 8080)
WEBHOOK_PROXY_PORT=8080

# Openclaw 服务地址和端口
OPENCLAW_HOST=your-openclaw-host
OPENCLAW_PORT=8080

# Webhook 令牌(可选,用于安全验证)
GITLAB_WEBHOOK_TOKEN=your-gitlab-token
JENKINS_WEBHOOK_TOKEN=your-jenkins-token
GENERIC_WEBHOOK_API_KEY=Bearer your-api-key

3. 启动服务

docker-compose up -d

4. 验证服务

# 健康检查
curl http://localhost:8080/health

# 应返回: healthy

Webhook 端点

服务提供以下 webhook 端点:

端点 用途 推荐认证方式
/webhooks/gitlab GitLab webhooks X-Gitlab-Token
/webhooks/jenkins Jenkins webhooks X-Jenkins-Token
/webhooks/github GitHub webhooks X-Hub-Signature-256
/webhooks/gitea Gitea webhooks X-Gitea-Signature
/webhooks/generic 通用 webhook Authorization
/health 健康检查

配置各 CI/CD 系统

GitLab

  1. 进入项目 Settings → Webhooks
  2. 添加 URL: http://your-proxy-host:8080/webhooks/gitlab
  3. (可选)配置 Secret token
  4. 选择要触发的事件(Push events, Merge requests 等)
  5. 点击 "Add webhook"

Jenkins

  1. 安装 "Notification" 插件或使用构建后操作
  2. 配置通知 URL: http://your-proxy-host:8080/webhooks/jenkins
  3. (可选)添加 token 认证
  4. 保存配置

GitHub

  1. 进入仓库 Settings → Webhooks → Add webhook
  2. Payload URL: http://your-proxy-host:8080/webhooks/github
  3. Content type: application/json
  4. Secret: 配置你的 webhook secret
  5. 选择事件类型
  6. 点击 "Add webhook"

Gitea

  1. 进入仓库 Settings → Webhooks → Add webhook
  2. Target URL: http://your-proxy-host:8080/webhooks/gitea
  3. HTTP Method: POST
  4. 配置 Webhook Secret
  5. 选择触发事件
  6. 点击 "Add webhook"

测试

测试 GitLab Webhook

curl -X POST http://localhost:8080/webhooks/gitlab \
  -H "X-Gitlab-Token: your-gitlab-token" \
  -H "X-Gitlab-Event: Push Hook" \
  -H "Content-Type: application/json" \
  -d '{"project":{"name":"test"},"ref":"main"}}'

测试 Jenkins Webhook

curl -X POST http://localhost:8080/webhooks/jenkins \
  -H "X-Jenkins-Token: your-jenkins-token" \
  -H "Content-Type: application/json" \
  -d '{"build":{"full_url":"http://jenkins/job/test/1"}}'

测试 GitHub Webhook

curl -X POST http://localhost:8080/webhooks/github \
  -H "X-Hub-Signature-256: sha256=..." \
  -H "X-GitHub-Event: push" \
  -H "Content-Type: application/json" \
  -d '{"repository":{"name":"test"},"ref":"refs/heads/main"}}'

测试通用 Webhook

curl -X POST http://localhost:8080/webhooks/generic \
  -H "Authorization: Bearer your-api-key" \
  -H "X-Webhook-Source: test-system" \
  -H "Content-Type: application/json" \
  -d '{"test": "data"}'

日志

查看容器日志

docker-compose logs -f

查看访问日志

tail -f logs/access.log

查看错误日志

tail -f logs/error.log

维护

停止服务

docker-compose down

重启服务

docker-compose restart

更新配置

修改 nginx 配置后重启:

docker-compose restart

查看服务状态

docker-compose ps

故障排除

502 Bad Gateway

  • 检查 openclaw 服务是否运行
  • 验证 .env 中的 OPENCLAW_HOSTOPENCLAW_PORT 配置
  • 检查网络连通性
# 测试到 openclaw 的连通性
docker-compose exec nginx-webhook-proxy ping openclaw

403 Forbidden

  • 检查 webhook token 是否正确
  • 验证请求头名称是否正确
  • 查看 nginx 错误日志
docker-compose logs nginx-webhook-proxy

连接超时

  • 增加 nginx/conf.d/webhooks.conf 中的超时值
  • 检查防火墙规则
  • 验证 openclaw 服务响应速度

配置未生效

  • 验证配置文件语法:docker-compose exec nginx-webhook-proxy nginx -t
  • 检查文件挂载是否正确
  • 重启容器

安全建议

  1. 使用强随机 token:为每个 webhook 源生成强随机 token
  2. 不要提交 .env 文件.env 包含敏感信息,不应提交到 git
  3. 使用 HTTPS:生产环境建议启用 SSL/TLS
  4. 限制访问源:在防火墙层面限制只允许 CI/CD 系统的 IP 访问
  5. 定期更新:定期更新 nginx 镜像以获取安全补丁
  6. 监控日志:定期检查日志以发现异常活动

SSL/TLS 配置(可选)

要启用 HTTPS,需要:

  1. nginx/ssl/ 目录放置证书文件
  2. 修改 nginx/conf.d/webhooks.conf 添加 SSL 配置

示例 SSL 配置:

server {
    listen 443 ssl http2;
    server_name your-domain.com;

    ssl_certificate /etc/nginx/ssl/cert.pem;
    ssl_certificate_key /etc/nginx/ssl/key.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    # ... 其他配置
}

# HTTP to HTTPS redirect
server {
    listen 80;
    return 301 https://$host$request_uri;
}

然后更新 docker-compose.yml 添加 443 端口映射。

项目结构

webhook_proxy/
├── nginx/
│   ├── conf.d/
│   │   └── webhooks.conf      # Webhook 路由配置
│   ├── nginx.conf              # Nginx 基础配置
│   └── ssl/                    # SSL 证书目录
├── logs/                       # 日志目录
├── docker-compose.yml          # Docker 编排文件
├── .env.example                # 环境变量模板
├── .gitignore                  # Git 忽略规则
└── README.md                   # 项目文档

许可证

MIT License

贡献

欢迎提交 Issue 和 Pull Request!

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors