GitHub Actions 自动部署博客到 Nginx 云服务器
在这篇文章中,我们将详细介绍如何使用 GitHub Actions 将博客自动部署到一台使用 Nginx 的Centos云服务器上,配合 scp-action 实现无缝推送构建后的静态页面。
一、准备工作
1. 创建专用部署用户(deploy)
在服务器上运行以下命令创建用户:
1 | |
如果部署脚本中需要重启 Nginx,也可以添加 sudo 权限:
1 | |
注意:为安全起见,不建议直接让 deploy 拥有 sudo 权限,除非必须。
2. 配置 SSH 公钥认证
生成密钥对(在本地)
1 | |
会生成两个文件:
- 私钥:
~/.ssh/id_rsa - 公钥:
~/.ssh/id_rsa.pub
上传公钥到服务器
1 | |
或者手动将 id_rsa.pub 内容添加到服务器的:
1 | |
3. 配置博客部署目录
例如目标目录为:
1 | |
确保该目录存在并属于 deploy 用户:
1 | |
二、配置 GitHub Secrets
进入你的 GitHub 仓库:
- Settings → Secrets and variables → Actions → Repository secrets
添加以下 Secret:
| 名称 | 说明 |
|---|---|
HOST |
服务器 IP |
USERNAME |
部署用户(如 deploy) |
SSH_KEY |
本地生成的 id_rsa 私钥内容 |
🔐 注意:私钥必须包括完整的头尾标志:
1 | |
三、编写 GitHub Actions workflow 文件
在项目根目录新建 .github/workflows/deploy.yml 文件:
1 | |
四、常见问题排查
1. 报错 ssh: no key found 或 handshake failed
说明 GitHub Secrets 中没有正确配置 SSH 私钥,请检查:
- 是否填入了
id_rsa(私钥内容) - 是否保留了
BEGIN和END标志 - 是否与服务器上的公钥配对
2. 目录权限不足
请确保目标路径由 deploy 用户拥有:
1 | |
或者使用组方式共享权限。
五、(可选)部署后重载 Nginx
如果你需要自动刷新 nginx,可在 Actions 中添加一步:
1 | |
前提:deploy 用户具有
sudo权限并允许无密码执行systemctl reload nginx
通过以上配置,我们成功实现了基于 GitHub Actions 的自动部署工作流,配合 CentOS 云服务器、博客以及 Nginx,搭建了高效的博客自动化发布体系。
如果你还有进一步需求,比如同步多个站点、部署通知、HTTPS 自动配置等,可以继续在 workflow 中拓展更多步骤。
GitHub Actions 自动部署博客到 Nginx 云服务器
http://eevann.cn/2024/09/24/github-nginx/