Skip to content

部署 jy-site 公开站 ​

部署模式 ​

纯静态:pnpm build:static → build/ → Nginx root,无 Node 运行时。

构建(必须用这个命令) ​

bash
cd jy-site
pnpm build:static   # 不是 pnpm build

构建会:连 MySQL → 预渲染页面 → 生成 search-index.json → sitemap → fix-build.ts。

产物:jy-site/build/。

构建期环境变量:jy-site/.env 或 CI 的 DATABASE_*、SITE_URL。

手动部署到测试机 ​

bash
cd jy-site
COPYFILE_DISABLE=1 tar -C build -czf /tmp/jysite-build.tgz .
scp /tmp/jysite-build.tgz jy-test:/tmp/
ssh jy-test 'tar xzf /tmp/jysite-build.tgz -C /opt/web/jysite && chmod -R a+rX /opt/web/jysite'

线上目录:/opt/web/jysite → https://jianyi.my

部署前备份:

bash
ssh jy-test 'cp -a /opt/web/jysite /opt/web/jysite.bak.$(date +%Y%m%d-%H%M%S)'

GitHub Actions 自动部署 ​

Workflow:jy-site/.github/workflows/deploy-jy-site.yml

触发方式:

方式说明
workflow_dispatchActions 页面手动运行
repository_dispatch type jy-site-publish管理端顶栏「构建并部署」

流程:checkout → pnpm install → build-static.ts → mysql-backup → tar → scp → 服务器解压到 DEPLOY_SSH_PATH。

所需 GitHub Secrets(jy-site 仓库) ​

Secret用途
DATABASE_HOST DATABASE_PORT DATABASE_USER DATABASE_PASSWORD DATABASE_NAME构建时读文章
SITE_URLsitemap 绝对 URL
DEPLOY_SSH_HOST DEPLOY_SSH_PORT DEPLOY_SSH_USER DEPLOY_SSH_KEY DEPLOY_SSH_PATHSSH 上传

DEPLOY_SSH_PATH 通常为 /opt/web/jysite,DEPLOY_SSH_PORT 为 3337。

Workflow 注意 ​

  • 禁止在 workflow if: 里引用 secrets(GitHub 不允许,应改在 shell 里判断 env 是否为空)
  • 跳过部署应在 shell 里判断 env 是否为空
  • concurrency.cancel-in-progress: true 连续触发会取消进行中的 run

验证 ​

  1. https://github.com/jianyi241/jy-site/actions 看 run 是否绿
  2. 硬刷新 https://jianyi.my
  3. 新文章需 DB 中 status = 'published' 且构建成功

常见错误 ​

现象原因
构建成功但无新文章文章仍是 draft,或构建用的是旧库
搜索无结果用了 pnpm build 而非 build:static
SSH 部署跳过DEPLOY_SSH_HOST 或 DEPLOY_SSH_PATH 为空

延伸阅读 ​

JY 项目文档