背景 hexo环境安装较为复杂,如果需要在每台写博客的机器上都安装对应的环境依赖,则需要耗费较多时间精力。现在需要在任意终端编辑md文件,推送到github后,之后就能自动部署到网站上。
解决方案 在VPS上使用Docker方式部署hexo,映射出/var/www/hexo目录,并将ssh私钥放入容器内,用于拉取和推送github仓库。具体可用脚本start_hexo_docker.sh
部署
1 2 3 4 5 6 7 8 9 10 11 12 docker rm -f hexo docker run -itd --net=host --name hexo --restart=always -v /var/www/hexo:/var/www/hexo hexo:2308 docker exec hexo mkdir -p /root/.ssh docker cp ~/.ssh/id_rsa hexo:/root/.ssh/id_rsa docker exec hexo chmod 600 /root/.ssh/id_rsa docker exec -it hexo bash
容器内通过crontab每分钟拉取github仓库,判断_posts目录是否有更新,如果有更新,就需要重新生成网站静态资源文件,然后部署上去。通过crontab -l
查看定时任务,有定时任务
1 * * * * * /bin/bash /var/www/hexo/periodic_check.sh
其中periodic_check.sh
文件为
1 2 3 4 5 6 7 8 9 # 进入源文件目录,目录已在github建立对应仓库 cd /var/www/hexo/source/_posts # 如果git pull显示结果为非最新,就进入hexo博客目录,执行清除、生成和部署三个步骤 if [ "$(git pull | tail -n 1)" != "Already up to date." ]; then cd /var/www/hexo hexo clean hexo g hexo d fi
更新hexo docker镜像 上一版本的docker镜像时区没有设置为中国,crond没有在容器内执行,通过docker build . -t hexo:2308
构建新镜像,Dockerfile
为
1 2 3 4 FROM hexo:latest RUN apk add -U tzdata && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ echo "* * * * * /bin/bash /var/www/hexo/periodic_check.sh" >> /var/spool/cron/crontabs/root CMD ["/usr/sbin/crond" , "-f" , "-d" , "0" ]