本文主要介绍如何使用 caddy,github webhook 来自动化部署 hugo 静态网站。
在 hugo-abc 这篇博文中,已经创建好了自己的博客站点,现在该考虑如何将站点部署到公网了 😎。
1. 前期准备
部署 hugo 博客的方法有好几种,例如使用 github 免费提供的 pages 功能。 本文介绍一种借助 github webhook
机制来自动化部署站点的方式。需要用的资源如下:
- 一个域名
- 一台云主机
2. 机制流程介绍
整个流程的示意图如下:
首先在本地电脑上编辑好文章,通过 git push 上传到 github。github 会根据预设的 webhook,向 caddy 发起请求。 caddy 收到请求后,会根据请求提供的信息,拉取最新的代码,并且调用 hugo 来生成最新的静态站点文件。
3. caddy
caddy 是一款高性能的,纯 golang 编写的 web server。它不仅速度很快,提供非常多的实用扩展插件,像这里用到的git 插件。此外,caddy 还自动提供全站https😎。
在下载 caddy 时,要选中 git 插件。
接下来是配置文件,如下:
|
|
重要字段说明:
- root:caddy 所要发布的静态文件的地址,
hugo
通常是在public
目录下 - git: caddy 的 git 插件,需要在下载 caddy 时安装,详见 caddy 说明
- repo: blog 的 github 地址
- branch: 需要 pull 的分支名
- path: pull 项目的目的地(git clone 到到这儿)
- clone_args: git clone 的参数,拉取子模块
- pull_args: git pull 的参数,拉取子模块
- key: 主机的 rsa 密钥,如果 blog 是私有的,必须填写,并且上传 id_rsa.pub 到项目设置中
- hook: 指定 github 的 webhook 地址和密钥,这里简单设置为
webhook
和123456
- then: 指定 clone 后需要进行的操作,这里就是重新编译 hugo 站点
- hook_type: 指定为 github 的 webhook
hugo
中的--source
一定要指定到网点的目录,否则hugo
找不到操作对象。
4. webhook 配置
web hook 设置的重点在于,指定请求的地址,选取发送数据的形式,以及何时发送。发送的内容,是 github 指定的。 具体配置方式,看下方图示。
特别注意 hook /webhook 123456
对应图中的 Payload URL
和 Secret
。
这样一来就实现了站点的自动化部署,非常的方便省心。