Appearance
部署 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_dispatch | Actions 页面手动运行 |
repository_dispatch type jy-site-publish | 管理端顶栏「构建并部署」 |
流程:checkout → pnpm install → build-static.ts → tar → scp → 服务器解压到 DEPLOY_SSH_PATH。
所需 GitHub Secrets(jy-site 仓库)
| Secret | 用途 |
|---|---|
DATABASE_HOST DATABASE_PORT DATABASE_USER DATABASE_PASSWORD DATABASE_NAME | 构建时读文章 |
SITE_URL | sitemap 绝对 URL |
DEPLOY_SSH_HOST DEPLOY_SSH_PORT DEPLOY_SSH_USER DEPLOY_SSH_KEY DEPLOY_SSH_PATH | SSH 上传 |
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
验证
- https://github.com/jianyi241/jy-site/actions 看 run 是否绿
- 硬刷新 https://jianyi.my
- 新文章需 DB 中
status = 'published'且构建成功
常见错误
| 现象 | 原因 |
|---|---|
| 构建成功但无新文章 | 文章仍是 draft,或构建用的是旧库 |
| 搜索无结果 | 用了 pnpm build 而非 build:static |
| SSH 部署跳过 | DEPLOY_SSH_HOST 或 DEPLOY_SSH_PATH 为空 |