使用hugo搭建博客网站 记录了如何使用hugo搭建静态化网站。
通过 webhook 机制实现 hugo 源文件更新后的自动部署
最基础的更新方式就是,在服务器端修改Markdown格式的网站源文件,然后重新运行hugo
,以重新在public
生成静态的Html网站文件。
稍geek一点的方式,就是在任何一个地方修改Markdown格式的网站源文件,然后通过git push
把本地的文件推送到代码托管平台例如 github ,然后在服务器上通过git pull
把文件拉下来,然后重新hugo
。
更懒人的方式,应该是把git push
之后的步骤自动化。
codezh 之前写了一篇博文 通过webhook将Hugo自动部署至GitHub Pages和GitCafe Pages , 这方案的原理是:github 收到新的文件之后,通过 webhook 机制通知服务器;服务器收到webkook通知之后,执行 git pull
和 hugo
命令。
为了实现该种方案的自动化部署,需要做以下几件事:
- 在github设置 webhook ;
- 在服务器保持运行监听 webhook 的服务;
- 在服务器设置脚本以运行
git pull
和hugo
命令。
codezh 的博文 通过webhook将Hugo自动部署至GitHub Pages和GitCafe Pages 介绍了步骤1和2,并在另一篇博文 Hugo自动化部署脚本 介绍了步骤3。
通过 caddy 及其 http.git 插件实现 hugo 的自动部署
如果网站使用 caddy 作为httpd服务器,还有更简单一点的方案。原理就是:既然caddy是保持运行的,就让 caddy 完成步骤2和步骤3好了。
安装caddy及其http.git 插件
curl https://getcaddy.com | sudo bash -s personal http.git
caddy 的配置,自行 google 或者按照官方的文档。默认的情况下,/et/caddy/Caddyfile
是caddy的配置文件。
配置 caddy 使 caddy 能够执行上面的步骤2和步骤3
通过nano /etc/caddy/Caddyfile
编辑 caddy 的配置文件
itlaws.cn {
tls zhoucaiqi@gmail.com
gzip
root /var/www/itlaws.cn/public
log /var/log/caddy/access.log
errors /var/log/caddy/errors.log
# caddy 的 http.git 插件
git {
repo https://github.com/choicky/itlaws.cn.git
path /var/www/itlaws.cn
clone_args --recursive
pull_args --recurse-submodules
key /Path-t/id_rsa
#then git submodule update --init --recursive
hook /webhook hook密码
then hugo --destination=/var/www/itlaws.cn/public
hook_type github
}
}
关键是git{...}
的这一段,其中:
repo
是存放网站源文件的repo地址,官方文档说 https 开头或者 git 开头都可以,但我测试时,只有 https 开头的能正常使用
path 是本地的 repo 地址
clone_args 是clone时的参数,–recursive 表示遍历所有的文件夹
pull_args 是 git pull 时的参数,–recurse-submodules 表示连子模块也一起pull 下来
key 是访问 github 的私钥。官方文档说,不需要,但我测试是,必须使用。Adding a new SSH key to your GitHub account 里面提到的 id_rsa
hook 有两个参数,第一个是路径,这个路径要与 github 设置的 webhook 路径相同(我设置了 https://itlaws.cn/webhook);第二个参数是 密码。
then 后面写着要执行的命令。
hook_type 是托管markdown 源文件的平台,我是 github 。