Hugo 博客自动化部署:从 GitHub Actions 到 VPS 的保姆级指南
手动部署博客?这简直是石器时代的行为。既然我们已经把代码托管在 GitHub,那么最优雅的方案就是构建一套 CI/CD 流水线:只要 git push,代码自动构建并同步到 VPS。
今天分享一套经过验证的 Hugo -> GitHub Actions -> VPS 自动化方案。
核心链路
整个流程分为三个关键环节:VPS 密钥配置 -> GitHub Secrets 加密 -> Workflow 编排。
第一步:在 VPS 上配置 SSH 免密登录
GitHub Actions 需要一个「通行证」才能在不输入密码的情况下把文件传到你的服务器。
-
生成 SSH 密钥对(如果已有可跳过):
1
ssh-keygen -t ed25519 -C "github-actions-hugo"注意:一路回车,不要设置 passphrase。
-
将公钥加入信任列表:
1
2
3cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh -
导出私钥(这是后面要填入 GitHub 的关键):
1
cat ~/.ssh/id_ed25519复制包含
-----BEGIN OPENSSH PRIVATE KEY-----在内的全部内容。
第二步:在 GitHub 中配置 Secrets
绝对不要把服务器 IP 和私钥明文写在 .yml 文件里,那是给黑客递钥匙。
进入仓库 -> Settings -> Secrets and variables -> Actions,点击 New repository secret 添加以下三个变量:
| Secret 名称 | 内容示例 | 说明 |
|---|---|---|
VPS_SSH_KEY |
-----BEGIN OPENSSH... |
刚才复制的私钥全文 |
VPS_HOST |
1.2.3.4 |
VPS 的公网 IP |
VPS_USER |
root |
登录用户名 |
第三步:编写 Workflow 配置文件
在项目根目录下创建 .github/workflows/deploy.yml,直接贴入以下代码:
1 | |
⚠️ Bosh 的避坑指南 (Critical Tips)
-
env还是with?
很多教程会把SSH_PRIVATE_KEY写在with:下面,但在easingthemes/ssh-deploy插件中,这些参数必须写在env:块中,否则会直接报SSH_PRIVATE_KEY is mandatory。 -
目录权限与存在性:
GitHub Actions 不会自动帮你创建远程目录。请确保 VPS 上/var/www/hugoblg已经存在,且VPS_USER拥有写入权限。1
mkdir -p /var/www/hugoblg -
主题子模块 (Submodules):
如果你的 Hugo 主题是通过git submodule add引入的,checkout步骤中的submodules: recursive必须开启,否则构建出的页面将没有样式。
第四步:验证与生效
本地推送即可触发:
1 | |
打开 GitHub 仓库的 Actions 标签页,看着那个绿色的对勾出现,你就知道可以关掉电脑去喝咖啡了。 ☕️