现在写文章都是每次在本地写好后,都要去服务器上
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
中的链接改一下:
参考文章: