前言
使用Hexo作为博客,文件都托管在github上。所以希望在提交到github之后,vps能够自动的拉取github上的文件,然后部署到服务器上。
安装
Debian 直接使用 apt 安装 webhook
1
| apt update && apt install webhook -y
|
配置文件
在 /opt/software/webhook 目录下(随意)。添加名为 hooks.yaml 的配置文件
注意调整路径、secret 信息
1 2 3 4 5 6 7 8 9 10 11 12 13
| - id: "hexo" execute-command: "/opt/software/webhook/deploy_hexo.sh" command-working-directory: "/opt/software/webhook" response-message: "Deploying Hexo via webhook..." trigger-rule: and: - match: type: "payload-hmac-sha1" secret: "UUID" parameter: source: "header" name: "X-Hub-Signature"
|
搞定配置文件之后,建议运行一下,检查配置文件是否OK
1 2
| webhook -hooks hooks.yaml -verbose -port 19998
|
1 2 3 4 5 6 7 8 9 10 11 12
|
payload='{"ref":"refs/heads/main"}' secret="UUID" signature=$(echo -n "$payload" | openssl dgst -sha1 -hmac "$secret" | awk '{print "sha1="$2}')
curl -v -X POST \ -H "X-Hub-Signature: $signature" \ -H "Content-Type: application/json" \ -d "$payload" \ http://XXXX:19998/hooks/hexo
|
守护进程
编辑 /etc/systemd/system/webhook.service, 添加下面的内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| [Unit] Description=Webhook Service (GitHub Webhook Receiver) After=network.target
[Service]
User=root Group=root
WorkingDirectory=/opt/software/webhook
ExecStart=/usr/bin/webhook \ -hooks /opt/software/webhook/hooks.yaml \ -port 19998 \ -verbose
Restart=always RestartSec=5s
StandardOutput=journal StandardError=journal SyslogIdentifier=webhook
PrivateTmp=true ProtectSystem=full
[Install] WantedBy=multi-user.target
|
运行下面命令,设置 systemd
1 2 3
| systemctl daemon-reload systemctl start webhook.service systemctl enable webhook.service
|
如果出错,运行 journalctl 查看日志
1
| journalctl -f -u webhook.service
|
Github 设置 WebHook


这里的 Payload URL 是你的 WebHook 监听地址。注意防火墙放行端口。Content Type 选择 application/json。Secret 填写和你 hooks.json 中 secret 字段一样的密码。