现在写文章都是每次在本地写好后,都要去服务器上
git pull同步一下,这样比较麻烦。后来找到可以通过在GitHub添加webhook的方式实现,只要repo有push操作,那么就通知服务器部署博客。 查看了很多文章,但是没有成功,可能我的环境和别人不一样,不能照着他人那样依葫芦画瓢…记录下自己的实践过程
前提
服务器系统:CentOS 7
服务器已经安装好 node/git(能ssh访问)/hexo/pm2/nginx
并且博客目录已和GitHub仓库同步(也就是在博客目录下输入git status 会显示git的信息)
文件目录:

安装github-webhook-handler
root 用户(全局安装):
npm install -g github-webhook-handler
⚠️ 我这里是用这个安装后,到博客目录下运行js还是会报找不到module的错,🤒解决办法:在博客目录再执行一次:npm install github-webhook-handler
编写代码
进入到博客deploy目录下,新建一个deploy.sh脚本(用于在收到GitHub push操作后进行pull博客代码并部署):
vim deploy.sh(不建议使用这个sh)
1 | !/bin/bash |
WEB_PATH改成博客静态页面(就是存放那些js html的目录)所在的目录,我这里是public下
⚠️ 注意:上面的sh脚本会将博客仓库(我这里是public目录)已有的改动会丢弃掉,因此最好不要在博客仓库中改动文件,我之前就是在public目录下新建了deploy.sh和webhook.js结果push后部署将我改动的文件给删掉了… 💢
2019-03-14 16:28 update:
上面的sh 有些问题:本地使用hexo d 将博客 push到 GitHub上后webhook也显示成功了,但是访问博客还是会发现是没有更新。。。
因此将上面的sh修改下(加上了部署的耗时统计):
1 | !/bin/bash |
这里使用的是nodejs来实现webhook服务。因此在博客deploy 目录新建一个webhook.js:
vim webhook.js:
1 | var http=require('http') |
接着运行webhook node服务,我这里使用的是pm2的方式启动:
在博客目录下:
pm2 start webhook.js
不使用pm2,常规后台运行并将日志记录到webhook.log中:
nohup node webhook.js > webhook.log &
GitHub配置webhook
打开博客GitHub的repo>Settings>Webhooks>Add webhook:

填写服务器webhook的访问地址和在webhook.js的secret:

最后
按理说照着上面一顿操作后,就可以实现自动化部署博客了,但是。。。我这个就是不行,不能访问,GitHub webhook 显示的是Service Timeout,后来才发现是我的服务器使用的是Nginx,没有处理转发这个请求。。。。
因此在nginx中要配置一个代理转发,然后将GitHub webhook中的链接改一下:


参考文章: