hexo自定义主页 & 服务器同步github网页

众所周知,我们可以用hexo在github上搭建个人博客。但是最近有了这样一个需求:

因为github服务器在国外,直接访问博客的时候加载比较慢,但是国内域名又不想买,也不想备案。。所以如果能有个方法做一个重定向的页面(加载比直接加载带图的主页快很多),访问的时候先访问重定向页面,重定向到国内服务器的ip地址就好了。
经过一番查阅与魔改之后,总算得到了想要的结果。因此记下做过的步骤。

将博客放到网页的子页面

参阅 https://blog.csdn.net/foradawn/article/details/78945525

这里面提到的更改生成目录以及更改部署目录都是需要的。但是修复翻页貌似不需要,可能是因为博客主题的问题?

添加重定向页面

重定向页面的话,就简单的用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默认的网络文件夹,拉取最新的更新,就自动完成了仓库的同步。