最近开始记录笔记,想选一个好用的能记录,能帖代码,还比较好看的,选来选去,最后决定使用Gitbook
但是Gitbook.com的速度比较慢,感觉不爽,于是决定放在自己DigitalOcean的VPS上。但是不能每次修改都上去手动generate,于是决定使用Github的Webhook来实现这个自动发布的功能。

把整个Gitbook的工程放在Github上,然后设置下Webhook,选择只有push时才触发。 在VPS上安装Gitbook VPS上的python代码:

import flask
import hmac
from hashlib import sha1
import os
import time

app = flask.Flask(__name__)

@app.route('/bookapi',methods=['POST'])
def hello_book():
    # 需要把'your_key'替换成在Github设置好的key
    if(verify(flask.request,"your_key")):
        # 需要把/home/book/改成你的Gitbook的实际位置
        os.system("cd /home/book/ && git pull")
        os.system("cd /home/book/ && gitbook build --output=./website")
        return "I've Get Book"
    else:
        return "No"

def verify(request,key):
    # 取出Github发来的signature 
    signature = request.headers.get('X_HUB_SIGNATURE')
    data = request.data
    # 本地计算出signature 
    local_signature = hmac.new(key=key.encode(),msg=data,digestmod=sha1)
    # 对比(因为Github发来的带有`sha1=`,所以需要切片)
    if hmac.compare_digest(local_signature.hexdigest(),signature[5:]):
        return True
    else:
        return False
        
if __name__ == '__main__':
    # VPS监听IP与端口
    app.run(host='0.0.0.0',port=9999)

在用Nginx把/home/book/website/放在网络上就可以了。以后每次在Windows下写好MD,直接push到Github上,VPS就会收到一个webhoook,做下验证,就会自动从Github上pull下来,生成静态页面。