
自动化构建与部署
说明
本篇来讲讲如何使用 GitHub Actions 自动化构建与部署,不讲太深的内容,只求实用,自己也能快速上手实现自动化工作流。
要明白GitHub Actions 自动化构建与部署,需要先明白以下几个概念:
正在撰写。。。
通用准备
- 服务器
- 已装 Nginx(或 Caddy、Apache)用于托管静态文件。
- 知道网站根目录,例如:/var/www/geektu 或 /home/deploy/site。
- 域名与 HTTPS(建议)
- DNS 指到你的服务器 IP。
- 用 Let’s Encrypt(certbot)或面板一键 SSL。
- 部署目录权限
- 专门建一个 Linux 用户(如 deploy),对网站目录有写权限;不要用 root 日常部署。
- GitHub 仓库 Secrets(在 Repo → Settings → Secrets and variables → Actions → Repository Sscret)
后面 workflow 会用到,例如:
DEPLOY_HOST:服务器 IP 或域名DEPLOY_USER:SSH 登录用户DEPLOY_PORT:SSH 端口(默认 22 可省略)DEPLOY_PATH:服务器上静态根路径,如/var/wwwSSH_PRIVATE_KEY:仅用于部署的私钥全文(含BEGIN/END)
- SSH 密钥(推荐「部署专用」)
- 在本机或服务器生成一对:
ssh-keygen -t ed25519 -C "github-actions-deploy" -f deploy_key - 【公钥】写入服务器:
~/.ssh/authorized_keys(对应 DEPLOY_USER) - 【私钥】只放进 GitHub Secret SSH_PRIVATE_KEY
- 可选:在服务器 authorized_keys 里限制该 key 只能执行固定命令(高级,先不必)。
- 防火墙
- 开放 22(或你的 SSH 端口)、80、443。
操作步骤
- 服务器目录(示例:/var/www/geektu)
与 VitePress 的 outDir: geektu 对应,建议单独子目录,不要直接往整个 /var/www 根里 --delete 同步(避免误删别的站点):
bash
$ sudo mkdir -p /var/www/geektu
$ sudo chown -R deployer:deployer /var/www/geektu
$ sudo chmod -R u=rwX,go=rX /var/www/geektu
$ sudo dnf install -y rsync- SSH 公钥
把用于 CI 的公钥放进 /home/deployer/.ssh/authorized_keys,私钥放进下面 GitHub Secret。
- GitHub 仓库 Secrets
在 Settings → Secrets and variables → Actions → New repository secret 增加:
| Name | 示例 / 说明 |
|---|---|
DEPLOY_HOST | 服务器公网 IP 或域名 |
DEPLOY_PATH | /var/www/geektu/(末尾建议带 /;目录必须已存在且 deployer 可写) |
SSH_PRIVATE_KEY | deployer 对应私钥全文(含 BEGIN / END) |
当前 workflow 在每次成功构建后固定执行 rsync 与 Pages 上传;DEPLOY_HOST、DEPLOY_PATH、SSH_PRIVATE_KEY 须始终配置正确,否则对应步骤会失败。
- Nginx
root 指向同步目录,例如:
nginx
root /var/www/geektu;bash
sudo nginx -t && sudo systemctl reload nginx- 阿里云安全组
放行 22(或你的 SSH 端口)、80、443。
- SELinux(若为 Enforcing)
对 /var/www/geektu 做 httpd_sys_content_t + restorecon(你之前 CentOS 那套)。
- 非 22 端口
若 SSH 不是 22,在 workflow 的 with: 里为 burnett01/rsync-deployments 增加一行(并新建 Secret DEPLOY_SSH_PORT):
yaml
remote_port: ${{ secrets.DEPLOY_SSH_PORT }}(不设该项时,该 action 默认使用 22。)
Permission denied (publickey)
说明 GitHub 上的私钥与服务器上 deployer 的公钥对不上,或权限不对。按顺序检查:
- 在本机用同一私钥试登录(把私钥临时存成文件,权限 600):
ssh -i ./key deployer@服务器IP。本机也失败则一定是密钥/用户问题,与 Actions 无关。 - 服务器上:
sudo cat /home/deployer/.ssh/authorized_keys,应有一行与ssh-keygen -y -f 你的私钥打印的公钥完全一致(算法与内容)。 - GitHub Secret
SSH_PRIVATE_KEY必须是 私钥(以-----BEGIN开头),整段粘贴;不要填.pub文件内容。 - 权限:
chmod 700 /home/deployer/.ssh;chmod 600 /home/deployer/.ssh/authorized_keys;属主为deployer。 - 若你为 root 或其它用户生成了密钥却把公钥加在别处,需专门为
deployer再生成一对,或把现有公钥追加到 deployer 的authorized_keys。

