基于Vultr等VPS和各种Git的HEXO博客自动构建

Hexo博客的自动构建一直是个比较头疼的问题,之前写过一篇关于travis下构建博客的文章:《HEXO博客自动集成配置(travis篇)》

不过是基于开源库github和仅适用于github的travis自动构建系统进行搭配使用的,最大的弊端就是你的被构建库必须是开源库,否则就请付费github私有库,再进行构建,可惜,github私有库在目前来说,对于大多数像碎碎念这样的穷逼来说,还是太贵了,还不如自己买一个vps来得实惠。

于是乎,就有了这篇——适用于多种Git版本管理仓库的自动构建方案!

首先,你要有一台VPS……

Vultr近期有超值优惠活动

准备工作

创建或指定托管的Git仓库

首先,将源代码托管于可稳定访问的Git托管服务商,比如Bitbucket

不建议将代码托管于国内部分服务商,毕竟国内的Git托管政策是会随时调整的,经历过因为突然被收费而浪费大量时间整理仓库的苦痛,所以,现在我只敢信任老牌托管商。

另外,鸡蛋不要放在一个篮子里,多一份拷贝放到另一个托管商,保证Git不受GFW的影响而可以随时切换。

准备一台可访问VPS

然后,有一台可以外部访问的vps主机,虚拟主机请绕道,因为不(太)适(低)用(端)!

试验过搬瓦工和vultr后,我毅然决然地选择了后者,毕竟,活动很超值:注册新用户,充值5美元即可获赠25美元,用新的邮箱和PAYPAL进行充值,5美元喜滋滋用一年。

开始搭建

新建VPS主机/配置VPS

登录Vultr,新建一台server,选择系统:Centos7 64x

我选的是迈阿密的,相比纽约机房,迈阿密机房的速度算是很高的,主要是最便宜的主机也就这两个机房了。

安装配置Nginx和Nodejs 环境

执行一键脚本安装或参照脚本内容逐行按需运行:

# NGINX+NODEJS一键安装命令
bash <(curl -s https://raw.githubusercontent.com/nooldey/Tampermonkey/master/sh/install_nginx.sh)

配置git环境

yum -y install git
# 设置全局git用户名和邮箱,注意!!!这里填写你自己的信息
git config --global user.name "Nooldey"
git config --global user.email "nooldey@gmail.com"

设置目录

Nginx 访问目录: /usr/share/nginx/html/blog/

Git 同步文件目录: /home/nooldey/git/

Git Webhook运行目录: /home/nooldey/webhook/hook.js

1.Nginx配置

配置文件的默认文件在:/etc/nginx/conf.d/default.conf

修改default.conf内容如下:

server {
listen 80;
server_name zhuweisheng.com.cn;
location / {
root /usr/share/nginx/html/blog;
index index.html index.htm;
}
location /webhook/ {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:5555;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location /50x.html {
root /usr/share/nginx/html;
}
}

2.在git同步文件目录下clone目标仓库

请先用root用户建立对应git仓库的ssh密钥对,并测试ssh连接成功。

cd /home/nooldey/git/
# git clone git@{domain}.com:{user}/{projectname}.git
git clone git@github.com:nooldey/nooldey.github.io.git ./

3.创建git同步脚本,这里基于nodejs实现

vi /home/nooldey/webhook/hook.js
# 在打开的编辑器中,填入以下内容
/*
* @Author: nooldey
* @Author-Email: <nooldey@gmail.com>
* @Date: 2018-03-31 18:19:01
* @Last Modified by: nooldey
* @Last Modified time: 2018-04-04 12:04:01
* @Description: bitbucket仓库更新钩子
*/
const http = require('http'),
exec = require('child_process').exec,
LOCAL = '127.0.0.1',
PORT = 5555;
const buildBlog = (res) => {
let commands = [
'cd /home/nooldey/git/',
'git pull',
'npm i hexo-cli -g',
'npm i',
'hexo clean',
'hexo generate',
'rm -rf /usr/share/nginx/html/blog/*',
'cp -rf /home/nooldey/git/public/* /usr/share/nginx/html/blog/'
].join(' && ');
exec(commands, (err, out, code) => {
if (err instanceof Error) {
res.writeHead(500)
res.end('Server Internal Error')
throw err
}
process.stderr.write(err)
process.stdout.write(out)
res.writeHead(200)
res.end('Deploy Done')
})
}
let deployServer = http.createServer((req,res) => {
// console.log(req)
const fromBitbucket = req.headers['user-agent'].match(/bitbucket/i);
if (fromBitbucket) {
console.log('isBitbucket');
if (req.headers['x-event-key'] == 'repo:push') {
buildBlog(res)
} else {
res.writeHead(200)
res.end('Other action')
}
} else {
res.writeHead(404)
res.end('Not Found')
}
})
deployServer.listen(PORT, () => {
console.log('api running at 127.0.0.1:'+PORT)
})

4.配置自动构建脚本的自动运行

PM2!

全局安装PM2,配置pm2。

参照Centos7开机自启动node应用

5.到git仓库添加webhook

在git仓库的设置中webhook部分,添加webhook连接:http://域名/webhook/hook

测试通过,即可。

NOOLDEY

本文作者:NOOLDEY

做一个诗情画意的码农,皮皮猪,我们走!

原文链接: http://zhuweisheng.com.cn/hexo/git-vps/

本站文章如无特殊声明均为原创,创作不易,转载请注明来源,谢谢!