hexo通过github的webhooks部署

没什么好说的,有基础的步骤都能看懂,不懂的我也一时说不清楚,所以直接给出步骤吧,注意几个地方即可

环境设置

安装nvm

1
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash

环境变量

1
2
3
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
export NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node

安装node

1
nvm install node

安装nrm

1
npm i -g nrm

切换源

1
nrm use taobao

安装pm2

1
npm i -g pm2

安装node-webhooks包(这里你需要先初始化一个npm项目,然后后面的代码文件也是放到这里)

1
npm i -S github-webhook-handler

代码文件

代码文件的作用就是处理github发出的webhook请求,你就可以知道有人上传到git了,只需要拉取到本地即可,语言其实不限,只是这个node的包管理确实是方便一些就采用了node

webhooks.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
var http = require('http');
var spawn = require('child_process').spawn;
var createHandler = require('github-webhook-handler');
// 这里需要和下面的nginx配置、还有你github上的webhooks设置保持一致
var handler = createHandler({ path: '/webhook', secret: 'yoursecret' });

http.createServer(function (req, res) {
handler(req, res, function (err) {
res.statusCode = 404;
res.end('no such location');
})
}).listen(6666);

handler.on('error', function (err) {
console.error('Error:', err.message)
});

handler.on('push', function (event) {
console.log('Received a push event for %s to %s',
event.payload.repository.name,
event.payload.ref);

runCommand('sh', ['./deploy.sh'], function( txt ){
console.log(txt);
});
});

function runCommand( cmd, args, callback ){
var child = spawn( cmd, args );
var resp = 'Deploy OK';
child.stdout.on('data', function( buffer ){ resp += buffer.toString(); });
child.stdout.on('end', function(){ callback( resp ) });
}

deploy.sh(这个你也可以直接写在上面的代码文件中,通过command来调用,这里写出shell方便管理吧)

1
2
3
4
5
6
#!/bin/bash

output="/web/blog"
cd $output
git pull

服务器站点配置

创建目录 /web/blog (就是你的博客目录了)

1
git clone https://github.com/xemxx/xemxx.github.io.git blog

pm2启动监听(就是webhooks服务)

1
pm2 start webhooks.js #后面这个文件就是前面提到的代码文件

nginx 配置(就可以配置你的域名和端口了)

1
2
3
4
5
6
7
8
9
server {
listen 80;
server_name blog.com;
root /web/blog;
index index.html;
location ^~/webhook{
proxy_pass http://127.0.0.1:6666;
}
}

github设置

这个图你看不懂我就没办法了,,,