前言
国内的git page或者静态网站托管的服务都需要备案。 没办法只能把博客迁移到香港机器。 不过迁移香港节点, 自动部署就有点问题。
方案
使用主机进行部署, hexo有几种方式.
- sftp
- sshd
- rsync
能用也是能用,不过sshd和sftp同步大量文件着实有点慢, 但是你说用rsnyc吧, 你主机上面必须要有这个命令。 电脑有mac有Windows, 如果用这三种方式肯定要有对应的二进制文件,这样配置起来实在是麻烦。
最后考虑了一下,还是正常推送到gitee,然后走gitee的webhook触发本机更新。
代码思路
既然我们已经用了云主机,那就可以直接把代码部署到本地。
整体部署过程是: gitee –> webhook –> deploy
Webhook 签名
gitee的webhook需要计算签名。
- Step1:把timestamp+”\n”+密钥当做签名字符串,使用HmacSHA256算法计算签名。
- Setp2:对上述得到的结果进行 Base64 encode。
- Setp3:对上述得到的结果进行 urlEncode,得到最终的签名(需要使用UTF-8字符集)
官方签名计算示例(Python2.7)
1 | #python 2.7 |
服务端代码
这里我们就实现2个步骤就行
- 鉴权
- 部署
代码很简单, 如下:
鉴权
sign.py
1 | import hmac |
部署
部署的具体步骤如下:
- git clone 项目
- rsync 项目到网站根目录
git clone 走的是ssh, 而我们用的是docker环境, 所以需要关闭add known 的时候的提示。
添加了如下环境变量
os.environ["GIT_SSH_COMMAND"] = "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no"
后续的操作就简单了, 直接部署即可.
1 | import base64 |