Blog 搬到了 Vultr Cloud VPS

之前 Blog 是放在 Github Pages 上面的,但是前几天不知为什么莫名其妙抽风访问不了了,于是把博客迁移到了 Vultr VPS 上面,用起来感觉还不错,别在 Github Pages 上面速度还快点,价格比国内阿里云实惠,如果想购买可以点击链接:http://www.vultr.com/?ref=7196775

Hexo + Github + webhook

博客使用的是 Hexo ,服务器是 ubuntu 通过 webhook 可以很方便的把博客部署到 VPS 上面。

前期准备

  1. 首先把域名解析到 VPS 的 IP
  2. 配置 nginx 服务器
  3. 把本地 hexo 部署到 github 的 [用户名].github.io 仓库

配置 webhook

点击仓库 [用户名].github.io 的 Settings-> Webhooks-> Add webhook 按钮添加 webhook。

Payload URL 每当仓库触发 push 事件后就会向这里配置的 url 发送 post 请求
Content type application/json 请求的 body 是 json 的格式
Secret 安全 token 用来验证每次请求是否安全
配置好以后点击 update webhook 按钮。下面是最近已经发送的请求

编写服务器

会一点 node.js(四舍五入约等于不会的水平),所以就用 express 写了一个简陋的服务端监听 3000 端口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var express = require('express');
var bodyParser = require('body-parser')
var exec = require('child_process').exec;
var crypto = require('crypto')
var app = express();
app.use(bodyParser.json());
app.post('/payload', function (req, res) {
var hmac = crypto.createHmac('sha1',process.env.TOKEN);
hmac.update(JSON.stringify(req.body));
var calculatedSignature = 'sha1='+hmac.digest('hex');
if (req.headers['x-hub-signature'] === calculatedSignature) {
exec('sh deploy.sh')
}
res.end();
});
app.listen(3000, function () {
console.log('Webhooks server listening 3000!');
});

当每次向仓库 push 生成好的 blog 文件后就会触发 webhook ,向服务器的 3000 端口发送 post 请求,如果验证安全后会执行 deploy.sh 脚本来更新 git 仓库。

1
git -C ../shellljx.github.io pull origin master

参考链接

Webhooks Guide
hexo deploy