给hexo加上自动部署
本博客使用 hexo,源码存放在 github 的 private 仓库里,之前都是编写好 push,再登录服务器 pull,再 hexo g,非常麻烦。从即日起,使用 github 提供的 webhook 技术,将部署过程自动化,全程不需要登录服务器。
本文记录过程中踩过的坑。
Apache2多个wsgi的配置
在此之前,我的 apache2 会将静态资源指向 /var/www/html,/comment
指向使用python 编写的评论系统。
使用的配置为:
1 | <VirtualHost *:443> |
现在我需要将分配 /webhook
的处理逻辑,直接将上面三句复制粘贴是不行的,必须要额外加内容,最后如下
1 | <VirtualHost *:443> |
无法解决 github webhook http timeout 的问题
github 收到 push 后会调用我的 API,客户端的 timeout 是 10 秒且无法自定义,但我需要较长的时间才能完成部署,所以这个问题无解,只能服务器后台进行部署,给 github 暂且返回 200。
因此,无法从 github 的日志里确认是否成功部署。
使用 sudoer 解决权限问题
我的 repo 用的是 ubuntu 用户,而 apache2 用的是 www-data 用户,当 www-data 尝试 git pull 时,会因权限不足导致无法 git pull,同样也无法 hexo g。
这里在 sudoer 里追加一句,允许 www-data 以 ubuntu 的身份执行某些命令。
1 | www-data ALL=(ubuntu:ubuntu) NOPASSWD: /home/ubuntu/deploy.sh |
即使 sudoer,www-data hexo g 报错
因为我安装 nodejs 时是在 home 目录下装的,www-data 或多或少会有权限缺失,全都卸载掉,使用 root 给所有用户都装上 nodejs 就可以了。
1 | sudo apt install node npm |