手动部署博客?这简直是石器时代的行为。既然我们已经把代码托管在 GitHub,那么最优雅的方案就是构建一套 CI/CD 流水线:只要 git push,代码自动构建并同步到 VPS。
今天分享一套经过验证的 Hugo -> GitHub Actions -> VPS 自动化方案。
核心链路
整个流程分为三个关键环节:VPS 密钥配置 -> GitHub Secrets 加密 -> Workflow 编排。
第一步:在 VPS 上配置 SSH 免密登录
GitHub Actions 需要一个「通行证」才能在不输入密码的情况下把文件传到你的服务器。
生成 SSH 密钥对(如果已有可跳过):
1ssh-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 的关键):
1cat ~/.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,直接贴入以下代码:
| |
⚠️ 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拥有写入权限。1mkdir -p /var/www/hugoblg主题子模块 (Submodules): 如果你的 Hugo 主题是通过
git submodule add引入的,checkout步骤中的submodules: recursive必须开启,否则构建出的页面将没有样式。
第四步:验证与生效
本地推送即可触发:
| |
打开 GitHub 仓库的 Actions 标签页,看着那个绿色的对勾出现,你就知道可以关掉电脑去喝咖啡了。 ☕️
