最近开始记录笔记,想选一个好用的能记录,能帖代码,还比较好看的,选来选去,最后决定使用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下来,生成静态页面。