Repolode
adnanh

adnanh/webhook

一个用 Go 编写的轻量服务,可为 HTTP 请求创建端点,触发并执行配置好的 shell 命令。

Star
12,207
Fork
882
未关闭 Issue
128
最近提交
2个月前

这是什么?

webhook 是一个用 Go 编写的轻量工具,可以把传入的 HTTP 请求转换为 shell 命令的执行。你在 JSON 或 YAML 文件中定义钩子,每个钩子的 ID 会成为一个端点,例如 /hooks/redeploy-webhook。请求到达时,webhook 会解析请求头、载荷和查询参数,检查你设置的触发规则,再以命令行参数或环境变量的形式把数据传给脚本。

触发规则可以限定钩子何时执行,例如要求携带密钥、载荷中的值需要匹配,或只允许特定 IP 段访问。钩子还支持 Go 模板配置、HTTPS、反向代理后部署(TCP 端口或 Unix socket),并可通过 systemd socket 激活启动。对 multipart 表单数据提供有限支持。

webhook 的职责仅限于接收请求并调用命令,脚本本身的行为由使用者负责。

核心功能

  • 01通过 JSON 或 YAML 定义钩子,每个钩子对应一个 HTTP 端点。
  • 02将请求头、载荷和查询参数以参数或环境变量形式传递给命令。
  • 03支持密钥匹配、IP 白名单等触发规则。
  • 04支持 HTTPS,并可通过 TCP 端口或 Unix socket 部署在反向代理之后。
  • 05支持 systemd socket 激活和 Go 模板格式的配置文件。

适用场景

  • 在 GitHub 或 Bitbucket 推送代码后自动执行重新部署脚本。
  • 通过 Slack 或 Mattermost 的斜杠命令触发服务器上的构建或运维任务。
  • 让聊天工具集成调用服务器命令并返回执行结果。

快速上手

  1. 1

    使用 Go 1.21 或更新版本从源码构建

    go build github.com/adnanh/webhook
  2. 2

    创建 hooks.json 文件定义钩子

  3. 3

    使用 hooks 文件并以详细模式启动 webhook

    /path/to/webhook -hooks hooks.json -verbose

使用前须知

  • 钩子会在服务器上执行 shell 命令,因此应配置触发规则和密钥以防止未授权执行。
  • 在反向代理后面运行时,IP 白名单规则无法按预期工作。

收录于专题

标签

常见问题

webhook 是什么?
一个用 Go 编写的轻量服务,可为 HTTP 请求创建端点,触发并执行配置好的 shell 命令。 webhook 是一个用 Go 编写的轻量工具,可以把传入的 HTTP 请求转换为 shell 命令的执行。你在 JSON 或 YAML 文件中定义钩子,每个钩子的 ID 会成为一个端点,例如 /hooks/redeploy-webhook。请求到达时,webhook 会解析请求头、载荷和查询参数,检查你设置的触发规则,再以命令行参数或环境变量的形式把数据传给脚本。
webhook 可以免费使用吗?用的什么许可证?
webhook 以 MIT 许可证开源。用于商业产品前,请先确认许可证条款。
webhook 还在维护吗?
半年内有更新。webhook 最近一次提交是在 2026年9月4日。
webhook 适合用来做什么?
在 GitHub 或 Bitbucket 推送代码后自动执行重新部署脚本。 通过 Slack 或 Mattermost 的斜杠命令触发服务器上的构建或运维任务。 让聊天工具集成调用服务器命令并返回执行结果。
webhook 怎么安装和运行?
使用 Go 1.21 或更新版本从源码构建: go build github.com/adnanh/webhook 创建 hooks.json 文件定义钩子 使用 hooks 文件并以详细模式启动 webhook: /path/to/webhook -hooks hooks.json -verbose
在哪里获取 webhook?
源代码和安装说明在 GitHub 上:https://github.com/adnanh/webhook

概要由 AI 根据项目 README 生成;GitHub 数据每日更新。

相关项目