一个非常简单的webhook服务器,用于启动shell脚本。
!Logo
webhookd是一个轻量级的webhook服务器,允许通过HTTP请求触发shell脚本执行。它设计简洁,配置灵活,支持多种参数传递方式、实时日志流、通知机制、认证与签名验证等功能,适用于自动化部署、CI/CD流程触发、简单任务调度等场景。
bash$ docker run -d --name=webhookd \ -v ${PWD}/scripts:/scripts \ -p 8080:8080 \ ncarlier/webhookd
***镜像轻量适用于简单脚本,如需高级功能(如Docker CLI或Docker Compose交互),可使用ncarlier/webhookd:edge-distrib镜像:
bash$ docker run -d --name=webhookd \ -v ${PWD}/scripts:/scripts \ -v /var/run/docker.sock:/var/run/docker.sock \ -p 8080:8080 \ ncarlier/webhookd:edge-distrib
webhookd可通过命令行参数或环境变量配置,执行webhookd -h查看所有参数及对应环境变量。所有配置变量详见etc/default/webhookd.env文件。
核心配置项:
WHD_SCRIPTS/-script:脚本目录路径(默认./scripts)WHD_HOOK_TIMEOUT:全局webhook超时时间(秒,默认10)WHD_HOOK_LOG_DIR:日志存储目录WHD_NOTIFICATION_URI:通知目标URI(HTTP或Email)WHD_PASSWD_FILE:htpasswd认证文件路径WHD_TRUST_STORE_FILE:签名验证公钥文件(PEM格式)WHD_TLS:启用TLS(true/false)WHD_TLS_DOMAIN:ACME域名(启用ACME时)webhook通过脚本目录结构定义,默认位于./scripts(可通过WHD_SCRIPTS修改)。目录结构示例:
/scripts ├── /github │ ├── build.sh │ └── deploy.sh ├── push.js └── echo.sh
注:支持任何可执行文件(需添加shebang头),如
.sh、.js等。
URL路径对应脚本路径,可省略脚本扩展名(默认查找.sh文件)。示例:
/scripts/github/build.sh对应URL:http://localhost:8080/github/build/scripts/echo.sh对应URL:http://localhost:8080/echoGET方法且Accept: text/event-stream头POST方法或默认GET)脚本参数来源及转换规则:
?foo=bar → foo=bar)Content-Type → content_type)application/x-www-form-urlencoded:键值对转换为变量text/*或application/json:作为脚本第一个参数传递额外内置变量:
hook_id:自动递增的hook IDhook_name:hook名称hook_method:HTTP请求方法x_forwarded_for:客户端IPx_webauth_user:认证用户名(若启用认证)WHD_HOOK_TIMEOUT环境变量设置(秒)X-Hook-Timeout HTTP头覆盖(秒)示例:
bashcurl -H "X-Hook-Timeout: 5" http://localhost:8080/echo?foo=bar
X-Hook-ID头获取的ID访问http://localhost:8080/<NAME>/<ID>查看历史日志脚本执行后可发送通知,仅输出中以特定前缀(默认notify:)开头的行将被发送。通过WHD_NOTIFICATION_URI配置通知目标。
配置URI:[***](prefix可选,默认notify:)
POST payload格式:
json{ "id": "42", "name": "echo", "text": "notify: Hello World\n", "error": "错误信息(如有)" }
支持Mattermost、Slack、***等webhook端点。
配置URI:mailto:***?smtp=smtp.example.com:587&username=user&password=pass&from=***
支持参数:smtp(SMTP服务器)、username/password(认证信息)、conn(连接类型:tls/tls-insecure/plain)、from(发件人)、subject(主题)。
通过htpasswd文件启用HTTP基本认证:
bashhtpasswd -B -c .htpasswd api
bashexport WHD_PASSWD_FILE=/path/to/.htpasswd
bashcurl -u api:password -XPOST "http://localhost:8080/echo?msg=hello"
支持HTTP Signatures和Ed25519签名验证,需配置公钥文件(PEM格式):
bashexport WHD_TRUST_STORE_FILE=/path/to/pubkey.pem
bashcurl -X POST \ -H 'Date: Wed, 21 Oct 2015 07:28:00 GMT' \ -H 'Signature: keyId="my-key",algorithm="rsa-sha256",headers="(request-target) date",signature="base64-signature"' \ "http://localhost:8080/echo?msg=hello"
bashcurl -X POST \ -H 'X-Signature-Timestamp: ***' \ -H 'X-Signature-Ed25519: base64-signature' \ "http://localhost:8080/echo?msg=hello"
启用TLS加密:
bashdocker run -d --name=webhookd \ -v ${PWD}/scripts:/scripts \ -v ${PWD}/certs:/certs \ -p 443:443 \ -e WHD_TLS=true \ -e WHD_TLS_CERT_FILE=/certs/server.pem \ -e WHD_TLS_KEY_FILE=/certs/server.key \ ncarlier/webhookd
bashdocker run -d --name=webhookd \ -v ${PWD}/scripts:/scripts \ -v ${PWD}/acme:/acme \ -p 80:80 -p 443:443 \ -e WHD_TLS=true \ -e WHD_TLS_DOMAIN=hook.example.com \ ncarlier/webhookd
MIT许可证,详见LICENSE。
来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429