github pages为每个github用户提供了一个免费的静态空间。
而hexo是一款快速、简洁且高效的博客框架。
hexo + github pages实现一个静态博客,是非常流行的做法。这个方案是非常好的,但有2点不好,一个是博客不是自己的域名,第二个是github.io的访问速度不是很快。
于是,我们就会考虑说怎么样把hexo生成的静态博客网页文件部署到自己的服务器上呢?
hexo部署的内容,可以参考之前的文章:
以下是我的方案:
前提是,你已经利用xxx.github.io项目里面的静态文件,检出副本到你的服务器上,并利用nginx静态代理实现博客的访问。
然后自动更新的思路就是,hexo deploy的时候会提交更新到xxx.github.io项目,利用webhooks,向自己写的一个http服务器发送一个post请求,http服务器接收到post请求,利用shelljs库执行shell脚本,进入检出的xxx.github.io项目服务器副本,并git pull。即可更新自己的博客。
1. 把你的xxx.github.io项目检出到云服务器上
2. 在你的xxx.github.io git项目仓库中建立一个webhooks
webhooks的配置是playload={url}
url为web服务接收http post请求的url地址;
3. Express实现的http服务器接收到http请求后,利用node 的shelljs库,执行服务器的shell脚本
由于请求简单,我这里直接利用Express来作为http的服务。
- app.js例子如下:
1
2
3
4
5
6
7
8
9
10const express = require('express')
const shell = require("shelljs");
const app = express()
app.post('/cmd', (req, res) => {
shell.exec("/home/app/build/update-blog.sh");
res.send('exec ok!')
})
app.listen(3000, () => console.log('Example app listening on port 3000!'))
然后在服务器上部署这个http项目
4. shell脚本内的过程就是,cd进入云服务器检出的xxx.github.io项目根目录,然后执行git pull更新。
- 脚本例子:
1
2cd /您的服务器上xxx.github.io项目根目录
git pull