Hugo 博客折腾记
文章目录
五一期间折腾了一下服务器的 Docker 化,踩了好多的坑,写文记录下来。
别小看这篇文章,我已经折腾两天了
起因
本来想搞个第二博客写点非技术性的东西,经过一系列纠结,选定了 WordPress + Docker-Compose 的部署方案,本来教程都快写完了,但是 WordPress 死活拉不起来,昨天整整调试了一天,最后放弃。
后来选定了 Hugo + GitHub Web hook + Caddy 这种备选方案,因为我现在的博客就是这么搭建的。由于我不想开源,所以选了 GitHub 的私有仓库,一切都很美好。但是 Caddy 的 Git 插件有 bug,并不能处理 私有仓库这种 [email protected]:username/example.git
的地址,相关讨论 issue 在这里: https://github.com/abiosoft/caddy-git/issues/106 。简单来说就是标准库更新之后这个插件处理 ssh 式仓库地址的功能就炸了,虽然有人提 fix,但是开发者没有 merge。所以只能用最原始的办法了:Nginx+部署脚本+Web hook handler。
教程
Nginx 安装
# 先安装 epel 源,才能安装 nginx
yum install epel-release
# 装 nginx
yum install nginx
# 启动nginx+自启
systemctl start nginx
systemctl enable nginx
安装后需要简单的配置,主要就是网站的 root 指定到 /var/www
目录中,当然你也可以指定到其他地方。
部署脚本
部署脚本是最重要的,去 Github 拉数据,送到 hugo 编译,把编译后的内容放到 nginx 的 web root 目录中。
我的部署脚本是这样的:
#!/usr/bin/env bash
cd story_site
git pull --recurse-submodules
hugo --cleanDestinationDir --destination=/var/www
写完部署脚本可以试一下,执行完毕之后应该就可以在浏览器中看到对应的博客页面了。
自动更新
现在的更新是每次搞完了手动调用 deploy.sh
, 自动更新非常有必要。(因为 Caddy 版可以做到这一切)
wget https://github.com/adnanh/webhook/releases/download/2.6.10/webhook-linux-amd64.tar.gz
tar -xvf webhook*.tar.gz
mv webhook-linux-amd64/webhook /usr/local/bin
rm -rf webhook-linux-amd64*
新建一个hook描述文件 webhook.json
[
{
"id": "redeploy-webhook",
"execute-command": "/root/deploy.sh",
"command-working-directory": "/root"
}
]
然后运行 webhook -hooks webhook.json -port=10086
端口写什么都可以
然后去 GitHub 上设置 Webhook 就可以了。
Webhook 地址就是这样的 http://ipaddress:10086/hooks/redeploy-webhook
结语
折腾了两天,我本身没想到搞一个第二博客会这么麻烦,中间 debug 耗费太多时间。现在看来 PHP 的 WordPress 已经不适用于轻量级网站了,Caddy 也有 bug,等待修复把。(服务器上的 Caddy 还留着,等官方修复了)