feat: 初始化慧遇书院官网一期
This commit is contained in:
344
docs/需求与计划/一期架构决策与精简开发计划_V1.2.md
Normal file
344
docs/需求与计划/一期架构决策与精简开发计划_V1.2.md
Normal file
@@ -0,0 +1,344 @@
|
||||
# 慧愈科技官网|一期架构决策与精简开发计划 V1.2
|
||||
|
||||
> 决策日期:2026-08-10
|
||||
> 决策目标:按“主要供访客浏览、低并发、少运营人员、单服务器”的真实场景,采用简单、稳定、可恢复的实现,不为二期需求提前堆复杂架构。
|
||||
|
||||
## 1. 已直接确定的架构
|
||||
|
||||
### 1.1 应用形态
|
||||
|
||||
采用**一个 Nuxt(Vue)全栈应用**:
|
||||
|
||||
```text
|
||||
Nuxt 应用
|
||||
├── 官网前台:SSR / 混合渲染
|
||||
├── 管理后台:/admin
|
||||
├── 服务端 API:/api
|
||||
├── SQLite
|
||||
└── 本地素材目录
|
||||
```
|
||||
|
||||
理由:
|
||||
|
||||
- Vue 生态成熟,设计图也适合组件化实现;
|
||||
- 官网需要 SEO,不采用纯 Vue SPA,改用基于 Vue 的 Nuxt 服务端渲染;
|
||||
- 前台、后台、API 使用同一套 TypeScript,减少服务数量和交接成本;
|
||||
- 一期不再单独引入 FastAPI,避免同时维护 Node 和 Python 两套运行环境。
|
||||
|
||||
### 1.2 技术基线
|
||||
|
||||
```text
|
||||
语言:TypeScript
|
||||
前台与后台:Vue + Nuxt
|
||||
样式:CSS Variables + SCSS(建立品牌设计令牌)
|
||||
数据校验:统一 Schema 校验
|
||||
数据库:SQLite
|
||||
素材:服务器本地磁盘
|
||||
入口与 HTTPS:Nginx
|
||||
进程与部署:Docker Compose,使用预构建镜像
|
||||
测试:单元测试 + API 集成测试 + 核心流程端到端测试
|
||||
```
|
||||
|
||||
不固定未经验证的具体小版本;实现时使用当时仍在维护的稳定版本并锁定依赖。
|
||||
|
||||
## 2. 服务器决策
|
||||
|
||||
一期接受:
|
||||
|
||||
```text
|
||||
CPU:2 核
|
||||
内存:2 GB
|
||||
系统盘:建议至少 40—80 GB SSD
|
||||
Swap:1—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 和少量视频直接保存在服务器本地:
|
||||
|
||||
```text
|
||||
/data/uploads/original/
|
||||
/data/uploads/derived/
|
||||
/data/uploads/trash/
|
||||
```
|
||||
|
||||
必须实现:
|
||||
|
||||
- 文件名随机化,原始文件名只保存为元数据;
|
||||
- 文件头、MIME、扩展名、大小和图片像素校验;
|
||||
- 生成 WebP/缩略图,保留原图;
|
||||
- 保存宽高、ALT、来源、版权和授权状态;
|
||||
- 素材引用保护;
|
||||
- 删除先进入回收站,延迟物理删除;
|
||||
- Nginx 直接提供静态资源并设置缓存头;
|
||||
- 上传目录不允许执行脚本。
|
||||
|
||||
暂不使用对象存储和 CDN。出现以下情况再迁移:
|
||||
|
||||
- 素材量达到约 20 GB 或磁盘增长明显加快;
|
||||
- 访客跨地域访问图片明显缓慢;
|
||||
- 需要多服务器部署;
|
||||
- 图片流量成为服务器主要带宽开销;
|
||||
- 需要更强的素材版本、权限或防盗链能力。
|
||||
|
||||
数据库只保存相对路径和素材 ID,不把域名写死,确保将来迁移对象存储时不用改业务数据。
|
||||
|
||||
## 5. 备份是一期 P0,不延后
|
||||
|
||||
本地存储足够使用,但**本地存储不等于备份**。服务器磁盘损坏、误删除、系统重装或云主机被释放时,数据库和图片可能同时消失。
|
||||
|
||||
一期最低备份策略:
|
||||
|
||||
- 每天使用 SQLite 在线备份生成一致性数据库副本;
|
||||
- 每天增量备份上传素材;
|
||||
- 数据库备份和素材备份必须复制到另一台机器或低成本云存储;
|
||||
- 保留 7 个每日备份、4 个每周备份、6 个每月备份;
|
||||
- 备份文件加密;
|
||||
- 每月执行一次自动校验;
|
||||
- 上线前和重大迁移前执行一次完整备份;
|
||||
- 至少完成一次从空服务器恢复数据库和素材的演练。
|
||||
|
||||
目标:
|
||||
|
||||
```text
|
||||
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. 后台网站配置字段范围
|
||||
|
||||
后台“网站配置”按职责拆分,避免一个页面堆放所有信息:
|
||||
|
||||
```text
|
||||
网站配置
|
||||
├── 品牌与站点
|
||||
├── 公司主体与备案
|
||||
├── 联系方式
|
||||
├── 页脚与法律页面
|
||||
├── 默认 SEO
|
||||
├── 首页模块
|
||||
└── 功能开关
|
||||
```
|
||||
|
||||
配置修改同样保留草稿和发布快照。已发布配置由前台读取,编辑中的草稿不会直接影响线上官网。
|
||||
1848
docs/需求与计划/慧愈科技官网后台功能需求设计_V1.0-原稿.md
Normal file
1848
docs/需求与计划/慧愈科技官网后台功能需求设计_V1.0-原稿.md
Normal file
File diff suppressed because it is too large
Load Diff
433
docs/需求与计划/需求审查与开发计划_V1.1.md
Normal file
433
docs/需求与计划/需求审查与开发计划_V1.1.md
Normal file
@@ -0,0 +1,433 @@
|
||||
# 慧愈科技官网|需求审查与开发计划 V1.1
|
||||
|
||||
> 审查对象:`慧愈科技官网后台功能需求设计_V1.0.md`
|
||||
> 审查日期:2026-08-10
|
||||
> 目标:在不改变现有设计方向的前提下,补齐可开发、可上线、可回滚、可交接所需的产品与工程约束。
|
||||
|
||||
> 架构更新:一期已按单服务器、Vue/Nuxt、SQLite 和本地素材方案精简,实际开发以 `一期架构决策与精简开发计划_V1.2.md` 为准;本文保留完整风险审查记录。
|
||||
|
||||
## 1. 审查结论
|
||||
|
||||
V1.0 的产品方向、信息架构和前后台视觉目标基本正确,可以作为需求底稿;但目前**不建议直接进入完整功能开发**。
|
||||
|
||||
主要原因不是缺少页面,而是以下生产级闭环尚未定义完整:
|
||||
|
||||
- 草稿、审核稿和线上版本如何隔离;
|
||||
- 谁可以审核、是否允许审核自己的内容;
|
||||
- 一页式首页与文章/课程详情页的 URL 体系;
|
||||
- 素材如何存储、生成衍生图、校验引用和回收;
|
||||
- 预览、定时发布、缓存刷新和失败重试如何实现;
|
||||
- 数据库、对象存储、部署、备份、回滚和监控如何验收。
|
||||
|
||||
这些问题需要在开发前完成补充,否则后期会集中返工数据库、权限和发布流程。
|
||||
|
||||
## 2. 做得正确、可以保留的部分
|
||||
|
||||
1. 官网定位明确:官方信息源,而不是复杂交易或课程学习平台。
|
||||
2. 后台定位正确:固定模块的专用 CMS,不做通用低代码搭建器。
|
||||
3. 核心数据强调单一来源,适合长期维护和 SEO。
|
||||
4. 前台组件和后台预览组件复用,方向正确。
|
||||
5. 草稿、审核、发布、版本和操作日志意识完整。
|
||||
6. 素材引用保护、富文本安全和后端权限校验已经被列为要求。
|
||||
7. 一期明确排除了支付、CRM、多租户、学习系统等高复杂度能力。
|
||||
8. 前台动效克制、文字保留在 HTML、SSR/SSG 友好等要求合理。
|
||||
|
||||
## 3. 开工前必须修正的问题
|
||||
|
||||
### P0-1:项目边界和前台路由没有闭合
|
||||
|
||||
文档名称以“官网后台”为主,但内容实际包含前台官网、后台 CMS、API、素材服务、SEO 和发布系统。必须明确一期交付物是一个完整系统,而不只是后台页面。
|
||||
|
||||
建议一期前台路由:
|
||||
|
||||
```text
|
||||
/
|
||||
/luhui
|
||||
/products
|
||||
/products/:slug
|
||||
/news
|
||||
/news/:slug
|
||||
/statements
|
||||
/statements/:slug
|
||||
/media
|
||||
/team
|
||||
/privacy
|
||||
/terms
|
||||
```
|
||||
|
||||
首页锚点可继续使用 `/#about`、`/#luhui` 等,但文章、课程和声明必须拥有独立、稳定、可分享、可收录的 URL。
|
||||
|
||||
### P0-2:发布状态模型不完整
|
||||
|
||||
目前的 `status` 字段无法同时表达编辑状态、审核状态和线上状态,也没有定时发布、发布失败、下线原因等信息。
|
||||
|
||||
建议拆分:
|
||||
|
||||
```text
|
||||
workflow_status: draft | in_review | rejected | approved
|
||||
publication_status: unpublished | scheduled | published | offline | failed
|
||||
published_revision_id
|
||||
scheduled_at
|
||||
published_at
|
||||
offline_at
|
||||
reviewer_id
|
||||
review_comment
|
||||
```
|
||||
|
||||
线上页面始终读取 `published_revision_id`,编辑草稿不能直接污染线上内容。
|
||||
|
||||
### P0-3:审核权限需要职责分离
|
||||
|
||||
三种角色还不足以形成安全规则,至少补充:
|
||||
|
||||
- 内容管理员不能审核或发布自己提交的敏感内容;
|
||||
- 审核员只能审核被授权模块;
|
||||
- 发布、下线、恢复版本、修改权限属于独立权限点;
|
||||
- 超级管理员操作同样记录日志;
|
||||
- 首个超级管理员通过部署初始化,不开放前台注册。
|
||||
|
||||
必须形成“角色 × 模块 × 动作”的权限矩阵,并由 API 强制校验。
|
||||
|
||||
### P0-4:版本管理被错误地放在 P1
|
||||
|
||||
文档前面要求所有关键内容保留历史版本,后面却把版本管理列为 P1。版本数据结构会影响所有核心表,不能后补。
|
||||
|
||||
调整建议:
|
||||
|
||||
- 版本快照、发布版本指针、恢复为草稿:P0;
|
||||
- 可视化字段级差异对比:P1。
|
||||
|
||||
### P0-5:实时预览需要定义安全边界
|
||||
|
||||
预览不能直接访问未发布 API,也不能复用管理员长期登录凭证。
|
||||
|
||||
建议:
|
||||
|
||||
- 前台与后台使用同一套展示组件;
|
||||
- 后台生成短时、一次性或可撤销的预览令牌;
|
||||
- 预览页面强制 `noindex`、禁止缓存并校验访问范围;
|
||||
- PC、平板、手机预览是视口切换,不复制三套页面。
|
||||
|
||||
### P0-6:素材模型和存储方案不完整
|
||||
|
||||
`Media.url` 和 `reference_count` 不足以支持生产使用。需要补充:
|
||||
|
||||
- 原文件与 WebP/AVIF/缩略图等衍生文件;
|
||||
- 对象存储 key,不把完整 URL 当作唯一标识;
|
||||
- MIME 嗅探、扩展名白名单、文件头校验、大小与像素限制;
|
||||
- SHA-256 去重;
|
||||
- 图片宽高、焦点、版权来源、授权状态和 ALT;
|
||||
- `media_reference` 关联表,引用次数由关系计算;
|
||||
- 上传失败重试、孤儿文件清理和删除回收站;
|
||||
- 对象存储和 CDN 的备份及缓存刷新策略。
|
||||
|
||||
### P0-7:登录错误提示存在账号枚举风险
|
||||
|
||||
“账号不存在”和“密码错误”分别提示会泄露账号是否存在。生产环境应对外统一提示“账号、密码或验证码错误”,详细原因仅写入安全日志。
|
||||
|
||||
同时补充:
|
||||
|
||||
- 密码使用 Argon2id 或 bcrypt;
|
||||
- 管理端采用安全 Cookie 会话或明确的 Token 存储策略;
|
||||
- Cookie 设置 `HttpOnly`、`Secure`、`SameSite`;
|
||||
- 登录、验证码和找回密码接口限流;
|
||||
- 连续失败采用指数退避或短时锁定;
|
||||
- 管理员密码重置令牌短时有效且仅能使用一次;
|
||||
- 二期可加入 TOTP 双因素认证。
|
||||
|
||||
### P0-8:部署、备份、回滚和监控缺失
|
||||
|
||||
文档只描述了业务功能,没有生产交付闭环。上线前必须定义:
|
||||
|
||||
- 开发、测试、预发布、生产环境隔离;
|
||||
- 数据库迁移、上线前备份和迁移回滚方案;
|
||||
- PostgreSQL 定时备份与恢复演练;
|
||||
- 对象存储版本或跨区域备份策略;
|
||||
- 前端、API、后台的健康检查;
|
||||
- 结构化日志、错误告警、接口耗时和发布失败告警;
|
||||
- 部署版本号、制品留存和一键回滚上一稳定版本;
|
||||
- 密钥只通过环境变量或密钥服务注入,不进入代码仓库。
|
||||
|
||||
## 4. 建议在一期同时补齐的问题
|
||||
|
||||
### P1-1:SEO 需要稳定 URL、slug 与重定向
|
||||
|
||||
- Product、Article、TeamMember 增加唯一 `slug`;
|
||||
- slug 修改时自动保留 301 重定向;
|
||||
- 预览和后台页面禁止索引;
|
||||
- Sitemap、Canonical、Open Graph、robots 和基础 JSON-LD 应属于上线 P0,而不是上线后再补;
|
||||
- `Keywords` 可以保留兼容字段,但不应作为核心 SEO 工作量。
|
||||
|
||||
### P1-2:文章扩展字段没有进入数据模型
|
||||
|
||||
官方声明的编号、附件、盖章文件,以及媒体报道的媒体名称、原文 URL、媒体 Logo 等没有体现在 `Article` 模型中。
|
||||
|
||||
建议采用统一文章主表 + 类型扩展字段,或明确的 JSON schema;不能只写在页面需求中。
|
||||
|
||||
### P1-3:首页模块缺少正式数据模型
|
||||
|
||||
至少需要:
|
||||
|
||||
```text
|
||||
Page
|
||||
PageSection
|
||||
PageRevision
|
||||
Publication
|
||||
Redirect
|
||||
```
|
||||
|
||||
`PageSection` 保存模块类型、排序、显隐和结构化配置。模块配置必须按类型校验,不能存储不受约束的任意 JSON。
|
||||
|
||||
### P1-4:定时发布需要幂等和失败处理
|
||||
|
||||
必须明确:
|
||||
|
||||
- 同一版本重复触发不会重复发布;
|
||||
- 发布任务具有唯一业务键;
|
||||
- 失败后按策略重试;
|
||||
- 超过阈值进入人工处理;
|
||||
- 服务器统一保存 UTC,后台按 Asia/Shanghai 展示;
|
||||
- 发布成功后再刷新页面缓存和 CDN。
|
||||
|
||||
### P1-5:富文本需要内容规范
|
||||
|
||||
建议选择受控块编辑器,而不是允许任意 HTML。定义允许的标题层级、图片、视频、表格、引用、按钮和 FAQ 块;服务端二次清洗,外链默认补充安全属性。
|
||||
|
||||
### P1-6:法律和隐私页面缺失
|
||||
|
||||
至少加入隐私政策、服务条款、版权说明和备案信息页面。如果“联系我们”要收集姓名、电话或微信,需要补充用户同意、数据保存期限、查看权限和删除机制。
|
||||
|
||||
### P1-7:前台性能指标需要可验收
|
||||
|
||||
将“首屏重点优化”改成明确目标:
|
||||
|
||||
- LCP ≤ 2.5s;
|
||||
- INP ≤ 200ms;
|
||||
- CLS ≤ 0.1;
|
||||
- 首屏主图按设备输出合适尺寸;
|
||||
- 动效支持 `prefers-reduced-motion`;
|
||||
- 常见桌面和移动浏览器无横向滚动。
|
||||
|
||||
### P1-8:操作日志需要防止记录敏感数据
|
||||
|
||||
日志中的修改前后内容应过滤密码、Token、验证码和隐私字段;日志应追加写、限制修改、定义保存期限,并提供按操作人、模块、时间和对象检索。
|
||||
|
||||
## 5. 一期范围重排
|
||||
|
||||
### 一期上线必须完成(P0)
|
||||
|
||||
- 前台官网:首页、人物、课程/产品、文章/声明、团队、官方渠道和法律页面;
|
||||
- 后台登录、账号、RBAC 权限矩阵;
|
||||
- 公司、品牌、卢慧老师、课程产品、内容、团队和官方渠道管理;
|
||||
- 首页固定模块管理;
|
||||
- 素材上传、衍生图、引用保护和授权字段;
|
||||
- 草稿、提交审核、退回、审批、发布、下线;
|
||||
- 核心实体版本快照和恢复为草稿;
|
||||
- 安全预览;
|
||||
- 基础 SEO、Sitemap、Canonical、robots、JSON-LD;
|
||||
- 操作日志;
|
||||
- 数据库迁移、备份恢复、监控告警和部署回滚。
|
||||
|
||||
### 一期可简化
|
||||
|
||||
- 仪表盘只保留待办、最近更新和快捷入口;
|
||||
- 不做复杂 PV/UV 报表,接入成熟统计平台;
|
||||
- 版本对比先显示两个版本的完整内容,字段级差异后补;
|
||||
- 素材标签和筛选做基础版;
|
||||
- 首页模块只支持固定模块排序、显隐和内容编辑;
|
||||
- 后台只保证桌面端 1366px 及以上,平板可浏览但不作为主要编辑设备。
|
||||
|
||||
### 延后到二期(P1/P2)
|
||||
|
||||
- 后台全局搜索;
|
||||
- 复杂访问分析;
|
||||
- AI 内容质量检查和外部信息监测;
|
||||
- 双因素认证;
|
||||
- 字段级版本差异;
|
||||
- 批量复杂排版和更多自动化运营能力。
|
||||
|
||||
## 6. 推荐技术基线
|
||||
|
||||
在团队没有既定技术栈的前提下,建议采用较稳健、易交接的组合:
|
||||
|
||||
```text
|
||||
前台官网:Nuxt + TypeScript(SSR/混合渲染)
|
||||
管理后台:Vue + TypeScript
|
||||
后端 API:FastAPI
|
||||
数据库:PostgreSQL
|
||||
对象存储:S3 兼容存储 + CDN
|
||||
异步任务:按定时发布和图片处理量选择 PostgreSQL 任务表或 Redis 队列
|
||||
反向代理:Nginx 或云平台托管入口
|
||||
```
|
||||
|
||||
选择理由:前台可服务 SEO,后台与前台共用 Vue 生态,FastAPI 接口边界清晰,PostgreSQL 适合版本快照与结构化内容,对象存储适合图片和附件。
|
||||
|
||||
建议采用单仓库分应用组织:
|
||||
|
||||
```text
|
||||
apps/
|
||||
├── web/ # 前台官网
|
||||
├── admin/ # 管理后台
|
||||
└── api/ # 后端 API
|
||||
packages/
|
||||
├── ui/ # 品牌基础组件与设计令牌
|
||||
├── contracts/ # API 契约和共享类型
|
||||
└── config/ # 共享工程配置
|
||||
docs/
|
||||
infra/
|
||||
```
|
||||
|
||||
不要强行让前台与后台复用所有页面组件;应复用设计令牌、内容 schema 和前台预览组件,避免把后台表单逻辑耦合进前台。
|
||||
|
||||
## 7. 分阶段开发计划
|
||||
|
||||
以下按“2 名全职开发 + 兼职设计/测试/内容负责人”估算。实际排期需要在技术栈、部署环境和内容量确认后锁定。
|
||||
|
||||
### 阶段 0:需求冻结与内容核验(3—5 个工作日)
|
||||
|
||||
交付物:
|
||||
|
||||
- 一期页面与路由清单;
|
||||
- 权限矩阵;
|
||||
- 状态机与发布流程图;
|
||||
- 字段字典和内容 schema;
|
||||
- 真实公司、人物、课程、渠道与法律信息清单;
|
||||
- 域名、服务器、对象存储、CDN 和备案决策记录。
|
||||
|
||||
开工闸门:P0 问题全部有明确结论。
|
||||
|
||||
### 阶段 1:工程与部署基础(5—7 个工作日)
|
||||
|
||||
任务:
|
||||
|
||||
- 建立 monorepo、代码规范、提交规范和环境配置;
|
||||
- 建立前台、后台、API 和数据库项目;
|
||||
- 配置迁移、种子数据、CI 构建和测试;
|
||||
- 建立开发、测试、预发布环境;
|
||||
- 接入结构化日志、健康检查和基础错误监控;
|
||||
- 完成自动备份与恢复脚本初版。
|
||||
|
||||
验收:全新环境可按文档一键启动,迁移可升级和回退,密钥不进入仓库。
|
||||
|
||||
### 阶段 2:认证、权限与发布内核(8—12 个工作日)
|
||||
|
||||
任务:
|
||||
|
||||
- 管理员、角色、权限矩阵和登录限流;
|
||||
- 草稿、审核、退回、批准、发布、下线状态机;
|
||||
- Revision、Publication、审计日志;
|
||||
- 短时预览令牌;
|
||||
- 定时发布任务、幂等、重试和失败告警。
|
||||
|
||||
验收:内容管理员不能绕过审核发布;审核员不能越权;恢复版本只生成草稿;重复发布不会产生错误状态。
|
||||
|
||||
### 阶段 3:素材中心与核心内容模型(10—15 个工作日)
|
||||
|
||||
任务:
|
||||
|
||||
- 素材上传、校验、对象存储、缩略图/WebP/AVIF;
|
||||
- 素材授权、ALT、标签和引用关系;
|
||||
- 公司、品牌、官方渠道;
|
||||
- 卢慧老师、经历、成果、课程关联与权威链接;
|
||||
- 课程产品、文章、声明、媒体报道和团队成员;
|
||||
- 首页 PageSection 固定模块配置。
|
||||
|
||||
验收:全部核心对象具备创建、编辑、审核、版本、发布、下线和引用保护。
|
||||
|
||||
### 阶段 4:管理后台(10—15 个工作日)
|
||||
|
||||
任务:
|
||||
|
||||
- 登录、仪表盘;
|
||||
- 首页三栏编辑与响应式预览;
|
||||
- 人物、公司品牌、课程、内容、团队和渠道管理;
|
||||
- 素材选择器;
|
||||
- 审核中心、历史版本、日志与网站设置;
|
||||
- 表单校验、自动保存、未保存离开提醒和错误恢复。
|
||||
|
||||
验收:运营人员不改代码即可完成一次“编辑—审核—预览—发布—下线—恢复”闭环。
|
||||
|
||||
### 阶段 5:官网前台与动效(10—15 个工作日)
|
||||
|
||||
任务:
|
||||
|
||||
- 建立品牌设计令牌和响应式布局;
|
||||
- 完成沉浸式首页各模块;
|
||||
- 完成人物、课程、内容、声明、团队和法律详情页;
|
||||
- 完成导航锚点、滚动章节激活和浏览器返回;
|
||||
- 完成视差、淡入、遮罩揭示、数字递增和降级动效;
|
||||
- 实现图片响应式加载、懒加载和无障碍结构。
|
||||
|
||||
验收:与设计参考图同视口对比后通过视觉 QA;桌面、平板、手机无横向滚动,主要交互可用。
|
||||
|
||||
### 阶段 6:SEO、发布联动与内容迁移(6—9 个工作日)
|
||||
|
||||
任务:
|
||||
|
||||
- Sitemap、robots、Canonical、OG 和 JSON-LD;
|
||||
- slug 和 301 重定向;
|
||||
- 发布后缓存/CDN 刷新;
|
||||
- 预览 noindex 与禁止缓存;
|
||||
- 导入已核验的人物、品牌、课程、团队和官方渠道内容;
|
||||
- 检查所有图片 ALT、链接、二维码和联系方式。
|
||||
|
||||
验收:搜索引擎可直接读取正文,结构化数据通过验证,未发布内容不可被公开访问。
|
||||
|
||||
### 阶段 7:系统测试与安全验收(8—12 个工作日)
|
||||
|
||||
任务:
|
||||
|
||||
- API 单元测试、权限测试和发布状态机测试;
|
||||
- 前后台核心流程端到端测试;
|
||||
- XSS、CSRF、越权、上传、限流和会话测试;
|
||||
- 性能、Core Web Vitals、浏览器兼容和无障碍检查;
|
||||
- 备份恢复、迁移回滚和应用版本回滚演练;
|
||||
- 运营使用手册、部署手册和故障处理手册。
|
||||
|
||||
验收:P0 用例全部通过,无高危安全问题,恢复演练成功。
|
||||
|
||||
### 阶段 8:生产发布与观察(3—5 个工作日)
|
||||
|
||||
任务:
|
||||
|
||||
- 上线前数据库和素材备份;
|
||||
- 灰度或维护窗口发布;
|
||||
- 域名、HTTPS、CDN、备案和搜索引擎配置;
|
||||
- 发布后冒烟测试;
|
||||
- 观察错误率、接口耗时、任务队列和页面性能;
|
||||
- 准备并验证回滚路径。
|
||||
|
||||
验收:连续观察期内无阻断问题,监控和告警有效,运营账号与权限完成交接。
|
||||
|
||||
## 8. 工期与人员判断
|
||||
|
||||
粗略工作量:**60—90 人日**,不含大量内容撰写、原始图片重制、备案等待和外部账号申请。
|
||||
|
||||
- 2 名有经验的全职开发,设计/测试/内容兼职配合:约 9—12 周;
|
||||
- 1 名全栈开发独立完成:约 14—18 周;
|
||||
- 如果一期继续保留后台全局搜索、复杂统计、字段级版本对比等能力,工期需要继续增加。
|
||||
|
||||
人员职责建议:
|
||||
|
||||
| 角色 | 主要职责 |
|
||||
| --- | --- |
|
||||
| 产品/内容负责人 | 需求决策、事实核验、文案、素材授权、验收签字 |
|
||||
| 前端开发 | 官网、后台、动效、响应式、可访问性和视觉 QA |
|
||||
| 后端开发 | 数据模型、权限、发布、素材、SEO、日志和部署接口 |
|
||||
| 测试/交付 | 测试用例、安全回归、部署与恢复演练、交接文档 |
|
||||
|
||||
## 9. 阶段 0 需要确认的决策
|
||||
|
||||
1. 一期是否同时交付前台官网和后台 CMS;建议:是。
|
||||
2. 课程和品牌动态是否需要独立详情页;建议:是。
|
||||
3. “联系我们”只展示官方渠道,还是收集访客信息;建议一期只展示渠道,避免引入隐私数据管理。
|
||||
4. 是否要求内容管理员与审核员职责分离;建议:是。
|
||||
5. 前台部署采用自有服务器还是云平台;需要结合预算和运维能力确认。
|
||||
6. 图片、视频和 PDF 使用哪家对象存储与 CDN。
|
||||
7. 是否已有域名、ICP备案主体、公安备案、隐私政策和服务条款。
|
||||
8. 技术栈是否接受 Vue/Nuxt + FastAPI + PostgreSQL。
|
||||
9. 一期真实内容由谁提供、谁核验、谁最终签字。
|
||||
|
||||
## 10. 开发启动建议
|
||||
|
||||
先用 3—5 个工作日完成阶段 0,不立即搭大量页面。阶段 0 通过后,再并行启动“工程基础”“品牌设计令牌”和“内容核验”。这能把数据库、权限、发布和素材这些高返工风险提前消化掉。
|
||||
Reference in New Issue
Block a user