Caddy+Hexo+github 实现博客文章自动发布

最近想整理一下自己的知识,evernote因一些原因不能用了, 所以想搭建一套可自动化发布和部署的博客,看了几个方案,各有各的好吧 ,结合本人的实际情况,最终决定使用Caddy + Hexo 来实现。

只列一下两个易实现的方案:
方案一: Hexo+git-pages 参考Hexo + GitHub 搭建个人博客及反思

方案二: hexo+nginx 参考 hexo+nginx 是通过在自己的VPS 上设置 git server 加上nginx 然后加上git hook 来实现自动化的部署适合有一台vps 且对nginx 熟悉的小伙伴。

之前研究科学上网的时候发现 Caddy2 有比较丰富的Modules, 搜索了一下有git 相关的模块, 看了一下这个模块是可以接受webhook事件的并可触发更新拉到本地的仓库的,所以就想通过gitHub webhooks 推送 git push 事件来触发 caddy 的git模块完成相关操作。


一、准备工作

安装caddy

  1. 准备go环境,然后参考这里完成下载caddy,然后使用xcaddy编译caddy,添加支持git模块及一些其它的如naive模块,我这里完整的xcaddy build 参数如下。

    1
    ~/go/bin/xcaddy build --with github.com/caddyserver/forwardproxy=github.com/klzgrad/forwardproxy@naive   --with github.com/greenpau/caddy-git

    你不用naive模块的话 可直接参考这个链接 或者执行下面的命令

    1
    ~/go/bin/xcaddy build --with github.com/greenpau/caddy-git

    编译完整后,使用下面的命令验证并复制文件caddy到 /usr/bin/ 目录下

    1
    ~/go/bin/caddy list-modules|grep  -i  "git" && cp  ~/go/bin/caddy /usr/bin/

在 github 上新建托管仓库

  1. 在 GitHub 上新建一个公开的仓库, 具体方法 参考 方案二 里给出的连接。

二、配置 Caddyfile

更新 Caddyfile。caddy的管方文档读起来需要一点时间,我直接参考了git modules 配置用例,修改后完整的配置如下,建议仅修改相关的地方,否则你可能需要重新阅读一遍caddy的文档

1
vim /etc/caddy/Caddyfile # 使用 Vim 编辑器编辑 Caddyfile

以我的网站为例子,关注 git 里的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
{
admin off
servers :443 {
protocols h1 h2 h3
}
git {
repo mk-qi.github.io {
base_dir /var/www/www.oozk.com/
url https://github.com/mk-qi/mk-qi.github.io.git
webhook Github X-Hub-Signature-256 youpassword
branch main
}
}
}

:80 {
redir https://{host}{uri} permanent
}
oozk.com www.oozk.com {
tls xxx@xxx.com #Modify to your email address
route /version* {
respond * "1.0.0" 200
}
route /update/mk-qi.github.io { # 这个url是github webhook push的地址
git update repo mk-qi.github.io
}
route {
file_server {
root /var/www/www.oozk.com/mk-qi.github.io # 对应repo
}
}
}

三、配置 GitHub webhooks

  1. 进入仓库,进入 Setting/Webhooks ,点击 Add webhook, 创建 webhook

    ecf5334f0ad27952d0f6511f304672b9

  2. Payload URL 填写 网址对应route中的url ,Secret 与 Caddyfile 中 password 保持一致。Content type 选 application/json 其他保持默认,点击完成。

    !88ec26e4d0771b22dab4f9c39bc41bde

    配置 webhook

四、启动Caddy

前台运行caddy server,看屏幕滚动日志,

1
caddy run --config  /etc/caddy/Caddyfile

会看到,第一行自动从 main pull 成功。以后每次提交,Caddy 便会自动拉取代码 到 /var/www/www.oozk.com/#repo, 最后后台运行

1
caddy start --config  /etc/caddy/Caddyfile