一直想测试一下github上的webhook的用法,今天利用webhook实现将部署在github上的hexo网站资源同步到vps上。之所以这么做,还有一部分原因是github会拒绝百度爬虫收录,如果网站只部署到github上,那么文章在百度上被搜索到的可能性就很小了。关于nginx、hexo、travis_ci配置及git的基础配置这里就不累述了,下面讲一下原理及webhook相关的主要代码和配置。
环境
- VPS端(CENTOS6):NodeJs、Git
- WINDOWS端:Git
- GitHub
- Travis_Ci
原理
原理主要是利用webhook推送http消息到vps端,然后vps端利用nodejs程序监听http消息,最后调用脚本执行git pull相关操作。具体流程如图所示:
webhook配置
github端webhook主要配置的就是推送的地址,下面是我的配置:
vps端代码及配置
- nodejs代码:下面是vps端nodejs的代码hexoHook.js。
1 | var http = require('http'); |
- sh脚本:下面是vps端被nodejs调用的sh脚本。
1 | cd /opt/gitCode/xiajunyi.github.io |
- 执行监听程序:真实服务的时候记得把该程序hexoHook.js加入开机启动项,下面是监听到的变动。
1 | [root@zyshops nodeTest]# node hexoHook.js |
效果
当访问http://hexo.xiajunyi.com/pages/p41.html#more看到这篇文章时,说明vps端已经同步到了最新的资源。
补充(开机启动nodejs)
在linux里开启启动nodejs程序还不是太简单,直接在/etc/rc.d/rc.local里配置貌似不能生效,具体原因暂不详。在找了网上的一些方法以后,发现下面这种方法是可行的:
- 安装forever,该程序保证nodeJs程序万一停止后能被重复启动
1 | npm install forever -g |
- 在/etc/rc.d/init.d中加入nodeserver文件,记得把该文件以及需要调用的文件赋755权限,用的时候只需要修改start方法中的内容就行,我的内容如下:
1 |
|
- 用chkconfig加入到开机启动项
1 | chkconfig --add nodeserver |
- 重启后查看一下node进程,发现有两个相关进程在启动,像下面这样一个是forever进程870,另一个是forever的子进程876,说明已经开机启动成功。
1 | [root@zyshops init.d]# ps -ef | grep node |
本文作者:
夏军谊
本文链接: https://www.xiajunyi.com/pages/p41.html
版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。转载请注明出处!
本文链接: https://www.xiajunyi.com/pages/p41.html
版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。转载请注明出处!