WebHook 的安装和使用

前言

使用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
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]
# 运行用户(建议用非 root 用户,如 www-data 或自定义用户)
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

image-20240601085703470

image-20240601090018293

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