在Windows上向Linux服务器部署Hexo
Hexo官方在文档中提到的部署文件方法只有同步到Gitpage、Heroku、OpenShift或者通过rsync、ftp同步到自己的服务器。
然而Windows下并没有rsync,之前为了用rsync同步文件只好使用Bash on Windows来用rsync。
如果只是为了用rsync就装了BOW实在是太浪费了,所以需要另一种方式来同步Hexo。
Hexo提供Git提交方式的插件。原本这个插件是用来同步到Git page的,但是我们也可以用Git方式push public文件夹内容到git仓库然后设置webhook向自己的服务器发送事件,服务器再pull下来就行了(虽然跟那插件没啥关系)。
环境准备工作
所以我们先来做准备:
- 创建私有仓库
- 添加服务器的ssh pub key到github或者gitlab中就可以使用ssh方式pull文件而不需用输入用户密码
- 准备python监听hook脚本
添加ssh key到仓库
连接自己的服务器复制自己的公匙cat ~/.ssh/id_rsa.pub
,如果没有的话使用ssh-keygen
生成一个新的公匙。
cat展示的文件所有内容都复制到粘贴版,在gitlab的setting->SSH keys页面添加
添加完成后就如图上所示。再进入自己的服务器选择目标目录进行第一次git clone。
准备python脚本
# wehbhook.py
from flask import Flask
from flask import request
import os
app = Flask(__name__)
@app.route('/',methods=['GET','POST'])
def hello_world():
if request.headers['X-Gitlab-Token']=='827621b28ab441a3e5b7ffe6bf60312761e72140':
os.system("git pull")
return 'pull'
if __name__ == '__main__':
app.run(host='0.0.0.0',port=8027)
运行wehbhook.py脚本
设置Webhook
进入GitLab的博客仓库进入Settings页面选择Integrations选项,添加钩子,并设置X-Gitlab-Token
在页面底部可以对钩子进行测试
由于是顺序执行的代码,所以在执行pull命令时gitlab会提示超时,然而服务器上是正常进行pull操作的。后期可以稍微修改下代码。
再使用nohup python webhook.py &
让脚本跑在后台就可以不用管他了