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

Hello World

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment