Skip to content

JY 设计原理

一句话

数据库驱动的静态博客:管理端写库,公开站在构建时把内容烘焙成 HTML,线上零 Node 运行时。

为什么公开站要静态化?

考量静态方案动态 SSR
服务器成本Nginx 托管文件即可需常驻 Node/PHP
性能与安全无运行时攻击面需维护依赖与补丁
单人博客流量足够过度
内容更新频率低(发文章才构建)适合高频实时

本博客更新不频繁,用 构建时渲染运行时简单

为什么管理端不能静态化?

jy-admin 需要:

  • 登录与 Session(iron-session
  • Server Actions 写 MySQL
  • API 触发 GitHub repository_dispatch
  • 实时编辑、分类标签管理

这些必须在 Node 进程 中执行 → 采用 Next.js Standalone + systemd + Nginx 反代

为什么「保存」和「构建部署」分离?

操作作用不做什么
保存 / 保存草稿写 MySQL触发 GitHub Actions
顶栏「构建并部署」触发 deploy-jy-site.yml不改编文章本身

原因:

  1. 避免每次改草稿都跑完整 CI(慢、浪费)
  2. 构建失败不影响数据已落库
  3. 用户可攒多篇「待发布」后一次构建

文章状态语义

DB status管理端 UIjy-site 是否展示
draft草稿
published待发布构建后才会出现
archived已归档

UI 叫「待发布」强调:库里有、线上还没有,需点「构建并部署」。

安全边界

资产存放位置禁止
DB 密码、SESSION_SECRET、GITHUB_TOKEN服务器 .env / GitHub Secrets提交 Git、打进 standalone 包
SSH 部署私钥GitHub Secrets DEPLOY_SSH_KEY写进管理端数据库
管理端127.0.0.1:5174,Nginx 反代公网直连 Node 端口
生产 Sessionsecure cookie,必须 HTTPSHTTP 下登录态种不上

与常见方案的取舍

方案本项目选择原因
Vercel 托管 admin未采用自建 MySQL + 同一 VPS 更简单
Docker Compose 全套未采用(文档有模板)测试机资源有限,systemd 够用
保存即自动部署已移除用户要手动控制构建时机
jy-site 用 pnpm build禁止用于生产缺搜索索引、sitemap 修补

Agent 决策树

改的是文章内容/UI?        → jy-admin
改的是博客前台样式/路由?   → jy-site
改的是 SSH/部署文档?       → docs/ops/
需要线上立刻看到新文章?    → 确认 status=published + 触发构建部署
只改了 .env?              → restart jy-admin,不必重 build admin 包

JY 项目文档