Hugo博客自动化部署,caddy,github webhooks

1,418 阅读2分钟

本文主要介绍如何使用 caddygithub webhook 来自动化部署 hugo 静态网站。

hugo-abc 这篇博文中,已经创建好了自己的博客站点,现在该考虑如何将站点部署到公网了 😎。

1. 前期准备

部署 hugo 博客的方法有好几种,例如使用 github 免费提供的 pages 功能。 本文介绍一种借助 github webhook 机制来自动化部署站点的方式。需要用的资源如下:

  1. 一个域名
  2. 一台云主机

2. 机制流程介绍

整个流程的示意图如下:

流程示意图

首先在本地电脑上编辑好文章,通过 git push 上传到 github。github 会根据预设的 webhook,向 caddy 发起请求。 caddy 收到请求后,会根据请求提供的信息,拉取最新的代码,并且调用 hugo 来生成最新的静态站点文件。

3. caddy

caddy 是一款高性能的,纯 golang 编写的 web server。它不仅速度很快,提供非常多的实用扩展插件,像这里用到的git 插件。此外,caddy 还自动提供全站https😎。

在下载 caddy 时,要选中 git 插件。

接下来是配置文件,如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
blog.ifreerist.com  {
    gzip
    root /home/ck/blog/public/
    log ./blog.log
    errors ./blog-errors.log

    # caddy 的 http.git 插件
    git {
        repo git@github.com:chenkaiC4/blog.git
        branch master
        path /home/ck/blog/
        clone_args --recursive
        pull_args --recurse-submodules
        key /home/ck/.ssh/id_rsa
        hook /webhook 123456
        then hugo --source=/home/ck/blog/ --destination=/home/ck/blog/public
        hook_type github
    }
}

重要字段说明:

  • 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 地址和密钥,这里简单设置为 webhook123456
  • then: 指定 clone 后需要进行的操作,这里就是重新编译 hugo 站点
  • hook_type: 指定为 github 的 webhook
hugo 中的 --source 一定要指定到网点的目录,否则 hugo 找不到操作对象。

4. webhook 配置

web hook 设置的重点在于,指定请求的地址,选取发送数据的形式,以及何时发送。发送的内容,是 github 指定的。 具体配置方式,看下方图示。

特别注意 hook /webhook 123456 对应图中的 Payload URLSecret

webhook 配置

这样一来就实现了站点的自动化部署,非常的方便省心。