Skip to content

部署 jy-site 公开站

部署模式

纯静态pnpm build:staticbuild/ → 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/jysitehttps://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管理端顶栏「构建并部署」

流程:checkoutpnpm installbuild-static.ts → 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/jysiteDEPLOY_SSH_PORT3337

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_HOSTDEPLOY_SSH_PATH 为空

延伸阅读

JY 项目文档