Files
guanwang/docs/需求与计划/一期架构决策与精简开发计划_V1.2.md

12 KiB
Raw Permalink Blame History

慧愈科技官网|一期架构决策与精简开发计划 V1.2

决策日期2026-08-10 决策目标:按“主要供访客浏览、低并发、少运营人员、单服务器”的真实场景,采用简单、稳定、可恢复的实现,不为二期需求提前堆复杂架构。

1. 已直接确定的架构

1.1 应用形态

采用一个 NuxtVue全栈应用

Nuxt 应用
├── 官网前台SSR / 混合渲染
├── 管理后台:/admin
├── 服务端 API/api
├── SQLite
└── 本地素材目录

理由:

  • Vue 生态成熟,设计图也适合组件化实现;
  • 官网需要 SEO不采用纯 Vue SPA改用基于 Vue 的 Nuxt 服务端渲染;
  • 前台、后台、API 使用同一套 TypeScript减少服务数量和交接成本
  • 一期不再单独引入 FastAPI避免同时维护 Node 和 Python 两套运行环境。

1.2 技术基线

语言TypeScript
前台与后台Vue + Nuxt
样式CSS Variables + SCSS建立品牌设计令牌
数据校验:统一 Schema 校验
数据库SQLite
素材:服务器本地磁盘
入口与 HTTPSNginx
进程与部署Docker Compose使用预构建镜像
测试:单元测试 + API 集成测试 + 核心流程端到端测试

不固定未经验证的具体小版本;实现时使用当时仍在维护的稳定版本并锁定依赖。

2. 服务器决策

一期接受:

CPU2 核
内存2 GB
系统盘:建议至少 40—80 GB SSD
Swap1—2 GB仅作为突发保护不作为正常内存使用
实例数1

使用限制:

  • 不在生产服务器上执行重型前端构建;在本地或 CI 构建后部署制品/镜像;
  • Nuxt 只启动一个应用实例,避免多个进程同时写 SQLite
  • Nginx、Nuxt 和定时备份是主要常驻服务;
  • 设置 CPU、内存、磁盘和错误率告警
  • 磁盘使用达到 70% 时预警,达到 80% 前必须扩容或清理。

3. SQLite 决策

一期采用 SQLite符合低写入、单应用服务器的官网场景。

必须遵守:

  • 数据库文件与应用代码分离,固定挂载到 /data/db/
  • 不把 SQLite 放到 NFS、SMB 等网络文件系统;
  • 开启 WAL、外键约束和合理的 busy_timeout
  • 写事务保持短小,不在事务中执行图片处理或外部网络请求;
  • 数据库迁移必须有版本号;
  • 发布前自动备份,迁移失败停止发布;
  • 只能有一个负责写入的应用实例。

暂不使用 PostgreSQL。出现以下任一条件时再迁移

  • 需要多台应用服务器;
  • 多名运营人员频繁同时写入并出现锁等待;
  • 日志持续出现数据库锁超时;
  • 需要复杂报表、数据分析或外部系统直接访问数据库;
  • 单机已经无法满足可用性要求。

数据访问层不得散落手写 SQL集中在 repository/service 层,便于二期迁移 PostgreSQL。

4. 本地素材决策

一期图片、PDF 和少量视频直接保存在服务器本地:

/data/uploads/original/
/data/uploads/derived/
/data/uploads/trash/

必须实现:

  • 文件名随机化,原始文件名只保存为元数据;
  • 文件头、MIME、扩展名、大小和图片像素校验
  • 生成 WebP/缩略图,保留原图;
  • 保存宽高、ALT、来源、版权和授权状态
  • 素材引用保护;
  • 删除先进入回收站,延迟物理删除;
  • Nginx 直接提供静态资源并设置缓存头;
  • 上传目录不允许执行脚本。

暂不使用对象存储和 CDN。出现以下情况再迁移

  • 素材量达到约 20 GB 或磁盘增长明显加快;
  • 访客跨地域访问图片明显缓慢;
  • 需要多服务器部署;
  • 图片流量成为服务器主要带宽开销;
  • 需要更强的素材版本、权限或防盗链能力。

数据库只保存相对路径和素材 ID不把域名写死确保将来迁移对象存储时不用改业务数据。

5. 备份是一期 P0不延后

本地存储足够使用,但本地存储不等于备份。服务器磁盘损坏、误删除、系统重装或云主机被释放时,数据库和图片可能同时消失。

一期最低备份策略:

  • 每天使用 SQLite 在线备份生成一致性数据库副本;
  • 每天增量备份上传素材;
  • 数据库备份和素材备份必须复制到另一台机器或低成本云存储;
  • 保留 7 个每日备份、4 个每周备份、6 个每月备份;
  • 备份文件加密;
  • 每月执行一次自动校验;
  • 上线前和重大迁移前执行一次完整备份;
  • 至少完成一次从空服务器恢复数据库和素材的演练。

目标:

RPO最多丢失 24 小时数据
RTO故障后 4 小时内恢复官网

6. 一期功能范围

6.1 官网前台

  • 沉浸式长滚动首页;
  • 关于慧愈;
  • 卢慧老师人物页;
  • 课程与产品列表、详情;
  • 品牌动态、官方声明列表和详情;
  • 陪伴团队;
  • 官方渠道与联系方式;
  • 隐私政策、服务条款、版权和备案信息;
  • Sitemap、Canonical、Open Graph、robots 和基础 JSON-LD
  • 响应式布局、无障碍基础和减少动态效果支持。

6.2 管理后台

  • 一个超级管理员账号;
  • 登录、退出、修改密码和登录限流;
  • 首页固定模块的内容、排序和显隐;
  • 卢慧老师、公司品牌、课程产品、文章声明、团队和官方渠道维护;
  • 素材上传、选择、替换、引用保护和回收站;
  • 草稿、预览、发布、下线;
  • 最近 20 个关键内容版本,恢复版本时生成草稿;
  • 基础操作日志;
  • 网站和 SEO 基础配置。

6.3 一期明确不做

  • 多级角色和复杂权限矩阵;
  • 编辑提交、审核员审批的多人审核流;
  • 定时发布;
  • Redis、消息队列和后台任务集群
  • PostgreSQL
  • 对象存储和 CDN
  • 后台全局搜索;
  • 复杂访问统计;
  • AI 标准信息管理和内容监测;
  • 字段级版本差异对比;
  • 多语言、支付、CRM、学习系统和用户注册。

7. 一期仍然不能省的生产要求

  • HTTPS
  • 密码安全哈希;
  • HttpOnly/Secure/SameSite Cookie
  • 登录限流和统一失败提示;
  • 后端权限校验;
  • XSS、CSRF、上传和路径穿越防护
  • 数据库迁移与迁移前备份;
  • 异机备份和恢复演练;
  • 健康检查、结构化日志和错误告警;
  • 部署制品有版本号并可回滚;
  • 密钥不进入代码仓库;
  • 图片和人物资料上线前完成版权、肖像和事实核验。

8. 精简开发计划

阶段 0内容与页面冻结2—3 个工作日)

  • 确定页面、锚点和详情路由;
  • 确定后台需要支持的内容字段和校验规则;
  • 用明确标注的演示数据跑通人物、课程、渠道和法律信息页面;
  • 建立素材授权状态字段和上线检查规则;
  • 域名、DNS、服务器权限和异机备份目标不阻塞开发在部署阶段提供。

阶段 1工程和部署骨架4—6 个工作日)

  • 初始化 Nuxt 全栈工程;
  • 建立模块边界、设计令牌和代码规范;
  • 接入 SQLite、迁移、日志和测试
  • 完成 Docker Compose、Nginx、HTTPS、健康检查和备份脚本
  • 建立测试环境。

阶段 2后台数据与登录7—10 个工作日)

  • 超级管理员登录和安全策略;
  • 公司、品牌、人物、课程、文章、团队、渠道和首页模块数据模型;
  • 素材上传和衍生图;
  • 草稿、发布快照、下线、版本恢复和操作日志。

阶段 3管理后台页面8—12 个工作日)

  • 首页管理;
  • 人物和品牌资料;
  • 课程、文章、声明、团队和渠道;
  • 素材中心;
  • 预览、发布和版本历史;
  • 网站与 SEO 配置。

阶段 4官网前台与动效10—15 个工作日)

  • 按设计图实现长滚动首页;
  • 完成人物、课程、文章、声明和团队详情;
  • 完成视差、渐显、遮罩、数字动画及移动端降级;
  • 完成 SEO、结构化数据和响应式图片。

阶段 5联调和生产验收7—10 个工作日)

  • API、权限、发布、上传和版本测试
  • 浏览器、移动端、横向滚动和视觉对比检查;
  • XSS、CSRF、登录限流和上传安全测试
  • 性能检查;
  • 备份恢复和应用回滚演练;
  • 内容、链接、二维码、备案和法律信息验收;
  • 编写部署、运营和故障恢复手册。

9. 工期判断

精简后粗略工作量:38—56 人日,不包含备案等待、大量文案创作和重新拍摄图片。

  • 1 名全栈开发:约 9—12 周;
  • 2 名开发合理分工:约 6—8 周;
  • 如果真实内容、素材和授权不能及时提供,开发完成也不能直接上线。

10. 我方可以直接决策的事项

以下事项无需反复确认,按本文件执行:

  • Vue/Nuxt + TypeScript
  • 单体全栈应用;
  • SQLite + WAL
  • 本地素材 + 相对路径;
  • 单服务器、单应用实例;
  • Docker Compose + Nginx
  • 前台 SSR后台客户端交互
  • 固定首页模块,不做低代码;
  • 一期单超级管理员,不做复杂审核;
  • 草稿、发布快照和最近 20 个历史版本;
  • 基础 SEO、日志、安全、备份和回滚属于一期
  • 代码模块化、接口校验、测试和中文交接文档。

11. 只需用户提供的外部信息

11.1 开发阶段不需要用户提供

以下信息不阻塞开发,统一到部署阶段再提供:

  • 域名及备案现状;
  • DNS 管理权限;
  • 服务器登录权限;
  • 生产服务器系统与最终磁盘容量;
  • 异机备份目标和备份账号;
  • HTTPS 证书相关信息。

11.2 必须做成后台可配置的内容

以下内容不能写死在代码或环境变量中,全部通过后台维护:

  • 官网名称、品牌名称、Logo、favicon 和品牌简介;
  • 公司主体、统一社会信用代码、电话、邮箱和地址;
  • ICP 备案号、公安备案号、页脚版权;
  • 卢慧老师介绍、经历、成果、标签、照片和外部权威链接;
  • 课程与产品;
  • 团队成员;
  • 官方渠道、账号、链接和二维码;
  • 品牌动态、官方声明和媒体报道;
  • 隐私政策、服务条款和版权说明;
  • 首页标题、文案、图片、按钮、模块顺序和显隐;
  • 默认 SEO、页面 SEO、Open Graph 图片和结构化信息所需字段;
  • 素材来源、版权状态、授权状态和 ALT 文本。

开发和测试阶段使用演示数据。演示数据必须带有明显的“演示/待替换”标记,生产发布前由后台替换并通过上线检查。

11.3 不能放进普通后台配置的敏感信息

以下信息只允许通过服务器环境变量、只读配置文件或密钥管理方式注入:

  • 数据库和会话密钥;
  • 管理员初始密码;
  • 备份账号和密钥;
  • 邮件、短信或第三方服务密钥;
  • DNS、服务器和部署平台凭证
  • 错误监控和统计平台的服务端密钥。

后台可以显示这些能力是否已配置,但不得读取或回显完整密钥。

11.4 生产上线前检查

真实内容可以在开发完成后由运营人员通过后台录入,但生产上线前必须完成:

  • 演示数据清零;
  • 公司、人物、课程和渠道信息审核;
  • 图片版权与肖像授权确认;
  • 电话、邮箱、链接和二维码逐项点击验证;
  • 备案与法律文本确认;
  • 最终内容审核人签字确认。

12. 后台网站配置字段范围

后台“网站配置”按职责拆分,避免一个页面堆放所有信息:

网站配置
├── 品牌与站点
├── 公司主体与备案
├── 联系方式
├── 页脚与法律页面
├── 默认 SEO
├── 首页模块
└── 功能开关

配置修改同样保留草稿和发布快照。已发布配置由前台读取,编辑中的草稿不会直接影响线上官网。