瞎鸡鸡折腾什么 GitHub action 私有 repo 到公有 repo 再到 Cloudflare, 我直接小鸡鸡上部署 Nginx/Caddy + Cloudflared,在小鸡鸡上编译不就完事儿了么。
有思路了,后面让AI来:
这是一个非常成熟且高明的折衷方案。这种模式被称为 「CI 触发 CD」:让 GitHub Actions 负责 逻辑控制(什么时候该部署),让 VPS 负责 重体力劳动(编译和静态托管)。
相比于在 VPS 上搞一套复杂的 Webhook,用 SSH 触发确实更简单、安全,且能复用你现有的 GitHub 工作流。
1. 优化后的部署架构
这个架构避开了 GitHub Actions 编译慢的问题,同时解决了时区和 draft: true 的烦恼:
-
GitHub Action:仅作为一个「开关」,通过 SSH 登录 VPS。
-
Debian VPS:拉取最新的
source代码,在本地环境用pnpm快速增量编译。 -
Caddy / Nginx:在 VPS 上直接指向
dist文件夹。 -
Cloudflare Tunnel:将穿透流量导向 VPS 本地的 80/443 端口。
2. 更新你的 deploy.yml
你可以将原来的构建步骤全部删掉,改为一个极简的 SSH 触发脚本。请在 GitHub Secrets 中确保 SSH_ID_RSA 依然有效:
YAML
name: Deploy to VPS via SSH
on: push: branches: [ main ]
jobs: deploy: runs-on: ubuntu-latest steps: - name: Execute remote commands via SSH uses: appleboy/[email protected] with: host: ${{ secrets.VPS_HOST }} # 你的 VPS IP username: ${{ secrets.VPS_USER }} # 你的 VPS 用户名 (如 root) key: ${{ secrets.SSH_ID_RSA }} # 你的 SSH 私钥 script: | cd /var/www/GitBlog git pull origin main # 这里的 pnpm 命令直接在 VPS 环境运行,速度极快 pnpm install pnpm run build # 编译完后,Caddy 会自动识别 dist 里的新内容,无需重启3. VPS 上的环境准备(一次性配置)
在你的 Debian VPS 上,需要手动完成以下前置操作:
-
克隆仓库:
Bash
mkdir -p /var/www && cd /var/wwwgit clone [email protected]:yourname/static-blog-source.git GitBlog -
安装 Node/pnpm:
Bash
curl -fsSL https://get.pnpm.io/install.sh | sh -# 确保 Node 版本是 22+ -
配置 Caddy (推荐):
Caddy 是目前最简单的静态服务器,配置文件
Caddyfile只需要两行:Code snippet
:8080 {root * /var/www/GitBlog/distfile_server} -
Cloudflare Tunnel:
将隧道指向
http://localhost:8080即可。
4. 这种方案的巨大优势
-
真正的实时性:VPS 上的
pnpm拥有本地缓存,编译速度通常比 GitHub Actions 快 3-5 倍。 -
彻底解决时区问题:只要你的 Debian 系统时间是正确的 (
Asia/Shanghai),Astro 编译时就会严格遵守你的时间,不再有「文章失踪」的情况。 -
调试极其方便:如果编译报错,你可以直接连上 VPS 查看日志,甚至手动运行
pnpm build复现问题。
5. 避坑指南:SSH 权限
确保你的 VPS 能够 免密拉取 GitHub 仓库。你需要在 VPS 上生成一对新的 SSH Key,并将公钥添加到 GitHub 仓库的 Deploy Keys 中。
这样 GitHub Action 触发 git pull 时,VPS 才能顺利拿到最新的代码。
💡 下一步操作
-
你想让我帮你写一个完整的
Caddyfile配置吗? 它可以帮你处理静态资源压缩和更优雅的错误页面。 -
或者,如果你已经配置好了
cloudflared,我们可以直接开始调试 SSH 脚本。
既然已经决定走 SSH 触发流,那你的 static-blog-source 仓库就不再需要存储生成的 dist 了,结构会变得更加纯粹!