跳转到内容

感谢赞赏

微信
支付宝

感谢赞赏

赞赏码

自动化构建与部署

说明

本篇来讲讲如何使用 GitHub Actions 自动化构建与部署,不讲太深的内容,只求实用,自己也能快速上手实现自动化工作流。

要明白GitHub Actions 自动化构建与部署,需要先明白以下几个概念:

正在撰写。。。

通用准备

  1. 服务器
  • 已装 Nginx(或 Caddy、Apache)用于托管静态文件。
  • 知道网站根目录,例如:/var/www/geektu 或 /home/deploy/site。
  1. 域名与 HTTPS(建议)
  • DNS 指到你的服务器 IP。
  • 用 Let’s Encrypt(certbot)或面板一键 SSL。
  1. 部署目录权限
  • 专门建一个 Linux 用户(如 deploy),对网站目录有写权限;不要用 root 日常部署。
  1. GitHub 仓库 Secrets(在 Repo → Settings → Secrets and variables → Actions → Repository Sscret)

后面 workflow 会用到,例如:

  • DEPLOY_HOST:服务器 IP 或域名
  • DEPLOY_USER:SSH 登录用户
  • DEPLOY_PORT:SSH 端口(默认 22 可省略)
  • DEPLOY_PATH:服务器上静态根路径,如 /var/www
  • SSH_PRIVATE_KEY:仅用于部署的私钥全文(含 BEGIN/END
  1. 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 只能执行固定命令(高级,先不必)。
  1. 防火墙
  • 开放 22(或你的 SSH 端口)、80、443。

操作步骤

  1. 服务器目录(示例:/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
  1. SSH 公钥

把用于 CI 的公钥放进 /home/deployer/.ssh/authorized_keys,私钥放进下面 GitHub Secret。

  1. GitHub 仓库 Secrets

Settings → Secrets and variables → Actions → New repository secret 增加:

Name示例 / 说明
DEPLOY_HOST服务器公网 IP 或域名
DEPLOY_PATH/var/www/geektu/(末尾建议带 /;目录必须已存在且 deployer 可写)
SSH_PRIVATE_KEYdeployer 对应私钥全文(含 BEGIN / END

当前 workflow 在每次成功构建后固定执行 rsync 与 Pages 上传;DEPLOY_HOSTDEPLOY_PATHSSH_PRIVATE_KEY 须始终配置正确,否则对应步骤会失败。

  1. Nginx

root 指向同步目录,例如:

nginx
root /var/www/geektu;
bash
sudo nginx -t && sudo systemctl reload nginx
  1. 阿里云安全组

放行 22(或你的 SSH 端口)、80、443。

  1. SELinux(若为 Enforcing)

/var/www/geektuhttpd_sys_content_t + restorecon(你之前 CentOS 那套)。

  1. 非 22 端口

若 SSH 不是 22,在 workflow 的 with: 里为 burnett01/rsync-deployments 增加一行(并新建 Secret DEPLOY_SSH_PORT):

yaml
remote_port: ${{ secrets.DEPLOY_SSH_PORT }}

(不设该项时,该 action 默认使用 22。)

  1. Permission denied (publickey)

说明 GitHub 上的私钥与服务器上 deployer 的公钥对不上,或权限不对。按顺序检查:

  1. 本机用同一私钥试登录(把私钥临时存成文件,权限 600):ssh -i ./key deployer@服务器IP。本机也失败则一定是密钥/用户问题,与 Actions 无关。
  2. 服务器上:sudo cat /home/deployer/.ssh/authorized_keys,应有一行与 ssh-keygen -y -f 你的私钥 打印的公钥完全一致(算法与内容)。
  3. GitHub Secret SSH_PRIVATE_KEY 必须是 私钥(以 -----BEGIN 开头),整段粘贴;不要填 .pub 文件内容。
  4. 权限:chmod 700 /home/deployer/.sshchmod 600 /home/deployer/.ssh/authorized_keys;属主为 deployer
  5. 若你为 root 或其它用户生成了密钥却把公钥加在别处,需专门为 deployer 再生成一对,或把现有公钥追加到 deployerauthorized_keys

用心创造世界,用技术改变未来。