hexo自定义主页 & 服务器同步github网页
众所周知,我们可以用hexo在github上搭建个人博客。但是最近有了这样一个需求:
因为github服务器在国外,直接访问博客的时候加载比较慢,但是国内域名又不想买,也不想备案。。所以如果能有个方法做一个重定向的页面(加载比直接加载带图的主页快很多),访问的时候先访问重定向页面,重定向到国内服务器的ip地址就好了。
经过一番查阅与魔改之后,总算得到了想要的结果。因此记下做过的步骤。
将博客放到网页的子页面
这里面提到的更改生成目录以及更改部署目录都是需要的。但是修复翻页貌似不需要,可能是因为博客主题的问题?
添加重定向页面
重定向页面的话,就简单的用html写了一个页面,放到public文件夹里。public文件夹是hexo generate后生成的文件目录,在deploy时会原封不动地拷到.deploy_git里上传。因此我们把自定义的页面放到public里就好了。
但是这样自定义的页面貌似不能用hexo server来预览。。所以只能自己deploy之后再看效果。。比较麻烦
添加github webhook
对自己的网页仓库,在设定里添加一个webhook,为了简便起见我选的webhook的POST内容是json类型,而在国内服务器这边则直接用了一个简单的python的Flask来获取POST消息:
from flask import Flask, request
import os
import json
import _thread
app = Flask(__name__)
@app.route('/hook', methods=['POST'])
def hook():
print(request.headers)
try:
data = request.stream.read()
d = json.loads(data.decode())
if d['repository']['name'] == '仓库名称' and \
d['pusher']['name'] == '你的pusher name':
_thread.start_new_thread(os.system, ('cd /var/www/html && git pull', ))
return 'ok'
except Exception as e:
print(type(e), e)
return 'unexpected post'
app.run(host='阿里云的内网IP', port='喜欢的端口')
在github那边,每当我博客更新,向github push完成后,github便会向我指定好的http://IP:端口/hook 发送POST请求。将该脚本挂到后台,就可以自动获得更新提醒,之后进入apache默认的网络文件夹,拉取最新的更新,就自动完成了仓库的同步。