使用Github的webhook完成自动部署网站
Hexo 静态站点自动部署:通过 GitHub WebHook 同步到国内服务器
你希望解决 Hexo 部署到 github.io 因境外服务器、域名被墙导致访问不稳定的问题,本文整理完整方案:通过配置 GitHub WebHook 触发国内服务器的 Koa 接口,自动拉取/更新 Hexo 静态仓库代码,实现站点部署到国内服务器,大幅提升访问稳定性。
一、核心思路
- 核心痛点:
github.io服务器在境外,域名易被墙,访问稳定性差; - 解决方案:
- GitHub 仓库配置 WebHook,当代码
push时触发指定接口; - 国内服务器部署 Koa 服务,提供 WebHook 接收接口;
- 接口逻辑:自动检查本地静态目录 → 存在则
git pull更新 → 不存在则git clone拉取 → pull 失败则删除重克隆,最终将 Hexo 静态文件部署到国内服务器。
- GitHub 仓库配置 WebHook,当代码
二、第一步:GitHub WebHook 配置(仓库端)
1. 操作步骤
- 登录 GitHub,打开你的 Hexo 静态仓库(
*.github.io); - 进入仓库 →
Settings(设置)→ 左侧Webhooks→ 点击Add webhook; - 核心配置项:
配置项 说明 & 推荐值 Payload URL 国内服务器的接口地址(如 https://你的域名/github/xxx/update),需确保服务器端口可访问Content type 选择 application/json(便于后续接口解析)Secret (可选但推荐)设置自定义密钥(如随机字符串),用于接口验证请求合法性 Which events would you like to trigger this webhook? 选择 Just the push event(仅当代码 push 时触发,避免无效请求)Active 勾选(启用 WebHook) - 点击
Add webhook完成配置,GitHub 会自动发送测试请求,可在Recent deliveries中查看触发状态。
补充:若测试请求失败,需检查国内服务器的防火墙/安全组是否开放接口端口(如 80/443),确保接口可被 GitHub 访问。
三、第二步:国内服务器部署自动同步脚本(Koa 实现)
1. 环境准备
服务器需提前安装依赖:
1 | |
2. 完整自动部署代码(Koa 路由)
优化原脚本,补充 pull 失败后删除重克隆、错误处理、日志记录 等关键逻辑:
1 | |
3. 代码关键优化说明
| 优化点 | 说明 |
|---|---|
| 配置抽离 | 将仓库地址、目录、重试次数等抽离为 CONFIG,便于维护 |
| 重试机制 | Git Pull 失败后自动重试(默认3次),避免网络波动导致失败 |
| 失败降级 | 重试耗尽后自动删除目录并重新克隆,保证最终同步成功 |
| 日志记录 | 打印操作时间和结果,便于排查问题 |
| 异常捕获 | 全局 try/catch 包裹,避免接口崩溃,返回明确的错误信息 |
四、第三步:验证与上线
- 启动 Koa 服务:
1
2
3
4node app.js # 简易启动
# 推荐使用 pm2 守护进程(避免服务中断)
npm install pm2 -g
pm2 start app.js --name hexo-deploy-server - 测试触发:
- 本地修改 Hexo 代码,
git push到 GitHub 仓库; - 查看 GitHub WebHook 的
Recent deliveries,状态应为200; - 查看服务器日志(
pm2 logs hexo-deploy-server),确认「Pull/Clone 成功」; - 访问国内服务器的静态文件地址,验证站点是否更新。
- 本地修改 Hexo 代码,
五、关键注意事项
- 权限问题:确保运行 Koa 服务的用户有
git执行权限、静态目录的读写权限; - Secret 验证(可选):生产环境建议在 WebHook 配置 Secret,并在接口中验证请求头
X-Hub-Signature-256,防止恶意请求; - HTTPS 配置:若接口地址用 HTTPS,需在服务器配置 SSL 证书(如 Let’s Encrypt),GitHub WebHook 优先推荐 HTTPS 地址;
- 定时检查(可选):可添加定时任务(如 crontab),定期检查仓库是否同步,避免 WebHook 触发失败导致站点未更新。
总结
- 核心流程:GitHub WebHook(push 触发)→ 国内服务器 Koa 接口 → 自动 Pull/Clone Hexo 仓库 → 部署静态文件;
- 关键优化:Pull 失败重试 + 重克隆降级,保证同步成功率;
- 稳定性保障:用 pm2 守护 Koa 服务,配合日志/权限配置,避免服务中断。
通过这套方案,可彻底解决 github.io 访问不稳定的问题,同时保留 GitHub 代码管理的便利性,实现 Hexo 站点的国内稳定部署。
使用Github的webhook完成自动部署网站
https://cszy.top/20201116-git-1/