利用github webhook自动更新hexo
每次写完东西,还得用Hexo发布,换个环境还得重新搭建hexo,太不优雅。所以就用github webhooks来自动发布。
用到的东西有:vps,nginx+lua+shell
- 首先在vps上搭建hexo环境。
你的github page repository得有两个分支。比如说master用来作为public访问,code用来存hexo环境。在vps上clone下来,checkout到code分支
(这里有个安全问题,code分支中__config.yml可能会暴露,更合适的做法是用另一个私有项目来托管hexo环境(即这里的code分支),page页则在公开项目中)- 安装在lua mode的nginx。我直接用openresty
- 在nginx加个server,如下:
1 | server { |
5.hexo.lua,前面是验证,最后是执行hexo.sh
1 | local signature = ngx.req.get_headers()["X-Hub-Signature"] |
6.hexo.sh,修改相应路径
1 |
|
7.重启nginx
8.在github设置webhooks,Secret填hexo.lua中的key.
tips
- hexo.lua,hexo.sh最好不要放在用户目录,因为nginx的worker用户是www(centos),可能会没权限,详见这里
https://github.com/smallnewer/bugs/issues/64
- git deploy用ssh key,这样就不用输密码了。我之前写过教程.但是这里还可能会出现权限问题,因为一般用ssh-keygen生成的key是放在当前用户目录下的,而www根本访问不到。我的第一种做法是将nginx的user改为用户,简单省事,而我直接用root登的,安全隐患太大。后来新建了
/home/www/.ssh
目录,并将id_rsa拷过去。感觉还不是很优雅,后面看看有没有更好的方案。 - 有问题看nginx的错误日志
一切顺利的话,之后只要在本地写完文章,push到code分支,就可以自动发布了。
Have fun !