使用 Caddy + GitHub Webhook 实现自动部署静态网站

| 分类 Caddy  | 标签 Caddy 

使用 Caddy + GitHub Webhook 实现自动部署静态网站

在开发静态网站(如 Jekyll、Hugo、Hexo 等)时,为了实现一键部署的自动化体验,我们可以通过 GitHub Webhook 和 Caddy Server 搭建一个轻量级的 CI 自动部署服务。

本文将介绍如何:

  • 使用 Caddy 添加 Git 插件
  • 配置自动构建逻辑
  • 添加 GitHub Webhook 实现自动拉取和构建部署

一、准备工作

1. 安装 Caddy 并添加 Git 插件

可以使用 https://caddyserver.com/download 提供的构建工具,选择你所需的插件:

  • 系统平台:Linux/macOS
  • 插件勾选:✅ http.git

也可以使用官方构建脚本手动安装(Linux 示例):

xcaddy build --with github.com/caddyserver/git
sudo mv caddy /usr/local/bin/

xcaddy 是官方推荐的 Caddy 插件构建工具,地址:https://github.com/caddyserver/xcaddy


二、配置 Caddyfile 实现自动部署

假设你有一个 Jekyll 项目托管在 GitHub,例如:

  • GitHub 仓库地址:https://github.com/yourname/yourblog
  • 构建输出目录:/var/www/yourblog
  • 本地构建命令:jekyll build

你的 Caddyfile 配置如下:

git /github/yourname/yourblog {
    path /var/www/yourblog
    then jekyll build /var/www/yourblog
    hook /webhooks github_webhook_secret_key
    hook_type github
    clone_args --recursive
    pull_args --recurse-submodules
}

配置说明:

关键字 含义
git 使用 git 插件挂载一个仓库
path 克隆到的本地路径
then 每次更新后执行的构建命令
hook Webhook 接口路径及密钥
hook_type 指定来源类型(支持 github, gitea, gogs 等)
clone_args 初始化 clone 时附加参数(如递归子模块)
pull_args 每次 pull 的参数

三、添加 GitHub Webhook

  1. 打开你的仓库页面,进入 Settings -> Webhooks
  2. 点击 Add webhook
  3. 填写内容如下:
字段
Payload URL http://your-server-ip:port/webhooks
Content type application/json
Secret github_webhook_secret_key(与你配置一致)
Events 选择 Just the push event.

保存后,GitHub 每次推送将触发该 URL 并自动拉取部署。


四、测试部署流程

  1. 本地修改你的博客项目代码,提交并推送:
git commit -am "update posts"
git push origin main
  1. 服务器 Caddy 会自动:
  • 接收 Webhook
  • 拉取最新代码
  • 执行构建命令(如 Jekyll)
  • 自动部署输出目录

可通过 journalctl -u caddy -fcaddy run 查看日志输出。


五、注意事项

  • jekyll/hugo 等构建命令路径问题:建议写全路径,如 /usr/bin/jekyll,确保 Caddy 启动用户有执行权限。
  • 权限问题:确保 caddy 运行用户对目标路径拥有读写权限。
  • 安全建议:Webhook Secret 不应为空,防止任意触发。

六、参考链接