d60123ba41
- V3.0 总体方案、主题与板块设计、实施计划 - cms 现状差距分析 V2.0(V1.0 已标注作废)与复用评估 V1.0 - 纵向切片设计规格(路线 C:全新架构 + 白名单资产移植) - .gitignore 先行(storage/artifacts/env 永不入库) Co-Authored-By: Claude Code <noreply@anthropic.com>
553 lines
22 KiB
Markdown
553 lines
22 KiB
Markdown
# SiteForge 现有 CMS 项目复用评估 V1.0
|
||
|
||
> 评估对象:`D:\project\cms`
|
||
> 目标项目:`D:\project\cms-one`(SiteForge)
|
||
> 评估日期:2026-10-20
|
||
> 依据:现有源码、数据库 Schema、测试、构建脚本、基础设施配置,以及 SiteForge V3.0 方案与实施计划。
|
||
|
||
---
|
||
|
||
## 1. 结论
|
||
|
||
`D:\project\cms` 不是简单样例,而是一个已经具备管理后台、控制 API、WordPress 迁移、内容模型、Astro 静态站运行时和基础测试的早期平台原型。
|
||
|
||
它与 SiteForge 的目标高度同源,适合作为**代码底座和经验来源**,不建议把 SiteForge 完全从零重写。但它当前仍然是“单站 MVP 向平台化演进”的状态,部分文档设计明显领先于实际代码,因此不能整体原样搬入。
|
||
|
||
推荐原则:
|
||
|
||
1. SiteForge V3.0 方案继续作为当前项目的唯一产品与架构基线。
|
||
2. 选择性继承 `cms` 中已经验证的代码,不继承其过时的权限、发布、路由和数据边界。
|
||
3. 优先复用迁移解析、内容版本、管理后台壳、Astro 组件、测试夹具等高价值资产。
|
||
4. 对认证、发布、路由注册、主题架构、媒体安全和表单服务进行结构性重构。
|
||
5. 不复制缓存、依赖目录、构建产物、真实客户数据和历史存储文件。
|
||
|
||
---
|
||
|
||
## 2. 当前项目可以直接参考或复用的部分
|
||
|
||
### 2.1 Monorepo 工程骨架
|
||
|
||
来源:
|
||
|
||
- `D:\project\cms\package.json`
|
||
- `D:\project\cms\pnpm-workspace.yaml`
|
||
- `D:\project\cms\turbo.json`
|
||
- `D:\project\cms\.github\workflows`
|
||
|
||
可复用内容:
|
||
|
||
- pnpm Workspace + Turborepo 的项目组织方式。
|
||
- 管理后台、控制 API、构建 Worker、站点运行时和公共包的目录边界。
|
||
- TypeScript、Vitest、CI 的基础配置。
|
||
- 统一执行 `typecheck`、`test`、`build` 的任务编排。
|
||
|
||
需要调整:
|
||
|
||
- CI 安装应使用冻结锁文件,而不是 `--no-frozen-lockfile`。
|
||
- 增加数据库迁移校验、OpenAPI 契约校验、静态站质量门禁、安全扫描和产物校验。
|
||
- 不复制 `node_modules`、`.turbo`、`.data`、本地日志和构建输出。
|
||
|
||
复用等级:**高,可以直接作为工程骨架参考。**
|
||
|
||
### 2.2 Art Design Pro 管理后台基础
|
||
|
||
来源:`D:\project\cms\apps\admin-web`
|
||
|
||
已有能力:
|
||
|
||
- Vue 3 + TypeScript + Element Plus。
|
||
- Art Design Pro 布局、菜单、路由、Pinia、Axios 和通用组件。
|
||
- 站点列表、站点管理、内容管理、媒体、导航、设置、线索和迁移页面。
|
||
- WordPress 迁移的步骤式界面。
|
||
|
||
建议保留:
|
||
|
||
- 登录后主布局、导航、标签页、请求封装、异常处理和基础表格表单组件。
|
||
- 站点切换、站点列表、迁移向导和媒体选择器的交互结构。
|
||
- Element Plus 设计体系以及 Art Design Pro 已有的工程规范。
|
||
|
||
必须精简:
|
||
|
||
- 删除注册、找回密码、动态权限演示和多角色菜单逻辑。
|
||
- 用户角色只保留一个全局 `super_admin`,不设计复杂 RBAC。
|
||
- 清理仪表盘、电商演示、Mock 页面和无关组件。
|
||
- 将体积过大的站点管理页面拆成独立领域页面和复用组件。
|
||
- 内容表单由硬编码逐步改为 Schema 驱动。
|
||
- 复用前确认 Art Design Pro 及第三方资源的许可证适用范围。
|
||
|
||
复用等级:**高,建议直接继承后台壳和通用能力,业务页面按新方案重构。**
|
||
|
||
### 2.3 NestJS + Fastify + Drizzle 后端基础
|
||
|
||
来源:`D:\project\cms\services\control-api`
|
||
|
||
已有模块:
|
||
|
||
- 认证。
|
||
- 站点管理。
|
||
- 内容类型、内容条目和内容版本。
|
||
- 媒体管理。
|
||
- WordPress 迁移。
|
||
- 线索管理。
|
||
- 构建触发。
|
||
|
||
可复用内容:
|
||
|
||
- NestJS 模块化结构和 Fastify 适配。
|
||
- Drizzle + PostgreSQL 的访问方式。
|
||
- Zod 输入校验思路。
|
||
- 显式 `site_id` 上下文和站点隔离测试。
|
||
- 内容版本不可变、草稿与发布版本分离的基础设计。
|
||
- 站点模板初始化和默认导航生成逻辑。
|
||
|
||
需要重构:
|
||
|
||
- 用户表当前为站点级并带历史角色字段,应改为平台级单超管模型。
|
||
- 自制 HMAC Token 缺少成熟的过期、刷新、撤销和 MFA 机制,应替换。
|
||
- 审计日志、发布记录、构建任务和路由记录需要成为正式数据表,而不是内存或 JSON 附属数据。
|
||
- API 应补齐 OpenAPI、统一错误码、幂等键、操作审计和敏感操作二次确认。
|
||
|
||
复用等级:**高,适合作为后端起点,但认证和发布领域不可原样沿用。**
|
||
|
||
### 2.4 WordPress REST/WXR 迁移能力
|
||
|
||
来源:
|
||
|
||
- `D:\project\cms\services\control-api\src\migration`
|
||
- `D:\project\cms\apps\admin-web\src\views\sites\migrate-tab.vue`
|
||
- `D:\project\cms\tests`
|
||
|
||
已有能力:
|
||
|
||
- WordPress REST API 拉取。
|
||
- WXR 文件解析。
|
||
- 文章、产品等内容转换为中间结构。
|
||
- 媒体下载、去重和关联。
|
||
- 类型映射、迁移预览、批次导入和结果报告。
|
||
- 基于旧地址生成部分重定向。
|
||
- 幂等迁移和相关端到端测试。
|
||
|
||
这是旧项目中最值得保留的资产之一。现有文档还记录了多个真实网站迁移规模,说明相关代码不是纯概念设计。
|
||
|
||
必须调整:
|
||
|
||
- 迁移后不能自动发布,必须进入“导入批次 → 校验 → 人工审核 → 预览 → 发布”的流程。
|
||
- 旧 URL 不能只保存在 `siteSettings` JSON 中,应写入正式的 `route_registry`。
|
||
- 页面、分类、标签、自定义文章类型、附件和 SEO 元数据需要统一映射策略。
|
||
- 不能把无法映射的旧页面一律跳转首页,应进入冲突清单并人工处理。
|
||
- 语言不能硬编码为 `en/es`,应使用站点 Locale 配置。
|
||
- 增加断点续传、失败重试、限流、增量迁移、差异报告和可回滚批次。
|
||
- 从 HTML 提取内容时增加 XSS 清理和资源地址标准化。
|
||
|
||
复用等级:**很高,保留解析器、UniversalRow 思路、媒体抓取和测试夹具,重做迁移编排。**
|
||
|
||
### 2.5 内容模型、版本与导入幂等
|
||
|
||
来源:
|
||
|
||
- `D:\project\cms\services\control-api\src\content`
|
||
- `D:\project\cms\services\control-api\src\db`
|
||
- `D:\project\cms\docs\contracts\导入模板V1.md`
|
||
|
||
可复用内容:
|
||
|
||
- 内容类型定义与内容条目分离。
|
||
- 多语言内容记录。
|
||
- 不可变版本记录。
|
||
- 通过 `externalRef`、Slug 等键进行幂等合并。
|
||
- 导入预校验、错误报告、状态机和 CSV 安全方面的设计经验。
|
||
|
||
建议作为 SiteForge 内容中台的起点,但需要补充:
|
||
|
||
- 内容发布状态机。
|
||
- 计划发布和撤回。
|
||
- 关联内容完整性。
|
||
- Slug/URL 冲突检测。
|
||
- 导入批次与每条记录的来源追踪。
|
||
- 批次级回滚。
|
||
- 删除保护和引用检查。
|
||
|
||
复用等级:**高。**
|
||
|
||
### 2.6 Astro 静态站运行时和页面质量门禁
|
||
|
||
来源:`D:\project\cms\runtimes\astro-site-runtime`
|
||
|
||
已有能力:
|
||
|
||
- Astro 5 静态站构建。
|
||
- 首页、产品、分类、新闻、项目、关于、联系、支持和 Sitemap 页面。
|
||
- Header、Footer、Hero、分页、表单、卡片网格、CTA 等组件。
|
||
- 基础主题 Token。
|
||
- Title、Description、Canonical、H1、内部链接、图片和 Sitemap 检查。
|
||
- 重定向文件生成。
|
||
- 版本化构建产物和基础回滚脚本。
|
||
|
||
可直接复用:
|
||
|
||
- Astro 的构建基础。
|
||
- 现有语义组件和样式 Token 的代码经验。
|
||
- 门禁脚本和重定向生成器作为第一版基础。
|
||
- SEO 页面输出和 Sitemap 生成思路。
|
||
|
||
必须重构:
|
||
|
||
- 页面不能继续依赖硬编码站点配置和默认内容。
|
||
- 编译器必须读取冻结的发布快照,而不是构建过程中读取变化中的在线数据。
|
||
- 主题应拆成主题包、主题清单、Token、布局、区块注册表和站点配置。
|
||
- 区块应由统一 Block Renderer 渲染,不能每个网站复制页面文件。
|
||
- 构建产物切换要使用真正的原子发布机制,而不是删除后复制。
|
||
- 门禁检查应使用 HTML 解析器而不是仅靠正则,并增加重复元数据、结构化数据、hreflang、孤链、重定向环、状态码和性能预算。
|
||
|
||
复用等级:**中高,适合作为静态运行时原型,不应直接作为最终主题架构。**
|
||
|
||
### 2.7 主题 Token 和组件契约文档
|
||
|
||
来源:
|
||
|
||
- `D:\project\cms\docs\contracts\ThemeToken契约V1.md`
|
||
- `D:\project\cms\docs\contracts\组件契约V1.md`
|
||
|
||
值得吸收的内容:
|
||
|
||
- 使用语义 Token,而不是在组件中直接写颜色和尺寸。
|
||
- 主题变体、版本号和升级迁移规则。
|
||
- 组件输入、插槽、SEO、可访问性和懒加载约束。
|
||
- Hero、CardGrid、FeatureGrid、CTA 等组件的标准化思路。
|
||
- WCAG 2.2 AA 作为可访问性目标。
|
||
|
||
与 SiteForge 的结合方式:
|
||
|
||
- 把“组件契约”升级为正式的 Block Manifest。
|
||
- 每个组件声明字段 Schema、默认值、允许的布局、SEO 行为、资源依赖和兼容版本。
|
||
- 区分基础 UI 组件、内容区块、页面模板和站点主题四个层级。
|
||
- 主题只能组合和覆盖,不得复制修改公共组件源码。
|
||
|
||
复用等级:**高,适合作为当前主题与组件规范的补充输入。**
|
||
|
||
### 2.8 PostgreSQL、Redis、MinIO 基础设施
|
||
|
||
来源:`D:\project\cms\infrastructure`
|
||
|
||
建议沿用:
|
||
|
||
- PostgreSQL:业务数据库。
|
||
- Redis:队列、分布式锁、缓存和限流。
|
||
- MinIO:本地开发的 S3 兼容对象存储。
|
||
|
||
需要修改:
|
||
|
||
- 生产环境使用受控对象存储或独立部署的兼容服务。
|
||
- 镜像必须固定版本,不能长期使用 `latest`。
|
||
- 开发密码不得用于生产。
|
||
- 增加备份、恢复演练、生命周期、跨环境配置和 Secret 管理。
|
||
|
||
复用等级:**高。**
|
||
|
||
---
|
||
|
||
## 3. 可以参考,但必须重构后使用的部分
|
||
|
||
### 3.1 认证与权限
|
||
|
||
旧项目保留了多角色和站点级用户的历史痕迹,而 SiteForge 已明确只需要一个超级管理员。
|
||
|
||
新设计应为:
|
||
|
||
- 平台只有一个 `super_admin` 权限模型。
|
||
- 可允许配置一个或少量超级管理员账号,但权限完全一致,不建立角色矩阵。
|
||
- 使用成熟密码哈希、短期访问凭证、刷新/撤销机制、MFA、登录限流和安全日志。
|
||
- 所有高风险操作记录操作者、站点、对象、前后差异、IP、User-Agent 和时间。
|
||
|
||
旧认证代码只能参考接口结构,不能作为生产安全方案直接使用。
|
||
|
||
### 3.2 构建、发布与回滚
|
||
|
||
旧项目当前主要问题:
|
||
|
||
- 构建记录保存在进程内存中。
|
||
- API 进程直接启动构建命令。
|
||
- 构建锁仅在单进程内有效。
|
||
- Build Worker 目录基本还是占位。
|
||
- 发布替换并非严格原子操作。
|
||
- 回滚没有完整持久化的 Release 记录。
|
||
|
||
SiteForge 应改为:
|
||
|
||
1. API 创建持久化 Build Job。
|
||
2. Redis/BullMQ Worker 异步消费。
|
||
3. 同站点使用分布式发布锁。
|
||
4. 构建读取不可变 Site Snapshot。
|
||
5. 产物写入版本目录或对象存储。
|
||
6. 门禁通过后原子切换当前 Release 指针。
|
||
7. 每次发布记录输入快照、代码版本、主题版本、产物校验和和日志。
|
||
8. 回滚只切换到已验证 Release,不重新现场构建。
|
||
|
||
可继承的是构建命令、Astro 产物组织和基础门禁;发布编排需要重做。
|
||
|
||
### 3.3 路由与 SEO
|
||
|
||
旧项目能生成重定向文件,但路由仍是附属设置,不足以支撑“原路径不变”的核心要求。
|
||
|
||
SiteForge 必须建立独立的 `route_registry`:
|
||
|
||
- 每条公开 URL 都有唯一注册记录。
|
||
- 保存站点、Locale、路径、资源类型、资源 ID、状态、Canonical 和历史来源。
|
||
- 写入内容时先预占或校验路由。
|
||
- 迁移前导入完整旧站 URL 清单。
|
||
- 构建时从注册表生成页面和重定向。
|
||
- 发布门禁对旧 URL 覆盖率、404、重定向环和多跳重定向进行检查。
|
||
|
||
旧项目的 Redirect 生成脚本可以保留,但数据源应切换到路由注册表。
|
||
|
||
### 3.4 媒体系统
|
||
|
||
旧媒体模块已有 Sharp 缩略图和来源 URL 去重,可以保留处理经验,但存在以下缺口:
|
||
|
||
- 主要依赖本地磁盘。
|
||
- SVG 缺少严格清理。
|
||
- 删除时缺少完整引用检查。
|
||
- 未形成原文件、变体、Hash、使用关系和删除状态的完整模型。
|
||
|
||
SiteForge 应实现:
|
||
|
||
- S3 兼容对象存储。
|
||
- 文件 Hash 去重和 MIME 魔数校验。
|
||
- SVG 清理或默认禁用上传。
|
||
- 图片尺寸、格式、焦点、Alt 和变体管理。
|
||
- `media_usage` 引用关系。
|
||
- 软删除、延迟物理删除和可恢复窗口。
|
||
- WebP/AVIF 等派生资源异步生成。
|
||
|
||
### 3.5 表单与线索
|
||
|
||
旧 Lead 模块只适合作为简单 CRUD 示例,尚不等于可对公网开放的 Form API。
|
||
|
||
SiteForge 应补充:
|
||
|
||
- 表单定义和字段 Schema。
|
||
- 来源页面、UTM、Referrer、站点和 Locale。
|
||
- 服务端校验、蜜罐、验证码、频率限制和重复提交保护。
|
||
- 隐私同意记录和可配置保留期限。
|
||
- 通知重试、Webhook 签名和失败队列。
|
||
- CSV 导出安全处理。
|
||
- 所有更新必须同时按 `site_id` 和记录 ID 定位。
|
||
|
||
### 3.6 站点主题与页面编辑
|
||
|
||
旧运行时已有 Token 和组件,但页面结构仍偏硬编码。SiteForge 应建立四层结构:
|
||
|
||
1. **基础组件层**:Button、Container、Image、RichText 等。
|
||
2. **业务区块层**:Hero、ProductGrid、NewsList、FAQ、CTA、ContactForm 等。
|
||
3. **页面模板层**:首页、产品列表、产品详情、新闻列表、文章详情和普通页面。
|
||
4. **主题层**:Token、字体、间距、装饰样式、默认区块组合和可用模板清单。
|
||
|
||
主题包至少包含:
|
||
|
||
- `theme.manifest.ts`
|
||
- `tokens.ts`
|
||
- `blocks/`
|
||
- `layouts/`
|
||
- `templates/`
|
||
- `styles/`
|
||
- `migrations/`
|
||
|
||
后台编辑的是结构化区块配置,前台由 Block Renderer 统一渲染。这样才能同时做到不同网站效果不同、组件可复用、数据可迁移和主题可升级。
|
||
|
||
---
|
||
|
||
## 4. 当前阶段不建议复用或应暂缓的部分
|
||
|
||
### 4.1 数据分析和客户身份体系
|
||
|
||
旧文档中包含事件网关、ClickHouse、Tracking Plan、客户画像和增长分析等设计。这些能力会显著增加系统复杂度,但不是 SiteForge 第一阶段完成网站迁移、发布和维护的必要条件。
|
||
|
||
建议:
|
||
|
||
- V1 只保留基础访问统计接入位和必要操作日志。
|
||
- Event Gateway、ClickHouse、统一客户身份和高级分析延后到独立阶段。
|
||
|
||
### 4.2 复杂 RBAC、多租户商业化和计费
|
||
|
||
当前需求已经明确只需超级管理员,因此暂不建设:
|
||
|
||
- 角色与权限矩阵。
|
||
- 团队邀请和成员管理。
|
||
- 租户套餐、用量计费和支付。
|
||
- 审批流。
|
||
|
||
数据库可保留未来扩展空间,但不应为了可能的需求增加当前实现负担。
|
||
|
||
### 4.3 旧项目的真实数据与运行目录
|
||
|
||
不得直接复制:
|
||
|
||
- `.data`
|
||
- `storage`
|
||
- `node_modules`
|
||
- `.turbo`
|
||
- `.playwright-mcp`
|
||
- 构建产物和运行日志
|
||
- 客户网站内容、媒体、线索和导入文件
|
||
- `.env`、Token、密码及其他 Secret
|
||
|
||
确需使用真实迁移样本时,应先获得授权并完成脱敏,再转换为最小测试夹具。
|
||
|
||
### 4.4 历史文档的权威地位
|
||
|
||
旧项目文档中有大量值得借鉴的设计,但部分功能只存在于文档,代码尚未实现;也有部分规则与 SiteForge 当前单超管、统一路由和冻结快照发布模型冲突。
|
||
|
||
因此:
|
||
|
||
- SiteForge V3.0 方案是当前项目的权威基线。
|
||
- 旧项目文档仅作为输入和参考。
|
||
- 任何旧设计进入实现前,都要映射到 SiteForge 的领域模型和验收标准。
|
||
|
||
---
|
||
|
||
## 5. 复用优先级矩阵
|
||
|
||
| 能力 | 现状 | 复用建议 | 优先级 |
|
||
|---|---|---|---|
|
||
| pnpm/Turborepo 工程骨架 | 已成型 | 直接参考/继承 | P0 |
|
||
| Art Design Pro 后台壳 | 已成型 | 保留壳,清理演示与多角色 | P0 |
|
||
| NestJS/Fastify/Drizzle | 已成型 | 作为 API 基础 | P0 |
|
||
| 站点上下文与隔离测试 | 已有实现 | 保留并扩大覆盖 | P0 |
|
||
| WordPress REST/WXR 解析 | 已有实现和测试 | 重点继承,重做迁移流程 | P0 |
|
||
| 内容类型和版本 | 基本可用 | 扩展状态机与发布模型 | P0 |
|
||
| Astro 静态运行时 | 原型可用 | 保留构建基础,重构主题架构 | P0 |
|
||
| 主题 Token/组件契约 | 文档较完整 | 纳入新主题规范 | P0 |
|
||
| Redirect 生成 | 已有脚本 | 改用 route_registry 数据源 | P0 |
|
||
| SEO Gate | 基础版本 | 保留并增强 | P0 |
|
||
| PostgreSQL/Redis/MinIO | 已配置 | 直接沿用技术选型 | P0 |
|
||
| 导入幂等和报告 | 有基础 | 扩展为批次、回滚、差异报告 | P1 |
|
||
| 媒体缩略图处理 | 有基础 | 保留 Sharp,重构存储与安全 | P1 |
|
||
| 站点模板初始化 | 有基础 | 改造成站点蓝图/主题初始化 | P1 |
|
||
| Lead CRUD | 简单实现 | 仅参考,重做公网 Form API | P1 |
|
||
| BuildService | 原型 | 不直接复用,改为队列 Worker | P1 |
|
||
| Event Gateway | 占位/早期 | 暂缓 | P3 |
|
||
| ClickHouse/增长分析 | 超出当前范围 | 暂缓 | P3 |
|
||
| 多角色 RBAC | 与需求冲突 | 不采用 | 不做 |
|
||
|
||
---
|
||
|
||
## 6. 推荐落地方式
|
||
|
||
### 方案 A:以旧项目代码为技术底座进行净化和重构(推荐)
|
||
|
||
做法:
|
||
|
||
- 保留旧项目 Git 历史或创建一条新的 SiteForge 开发分支/仓库。
|
||
- 删除缓存、数据、演示页面和超出范围的模块。
|
||
- 以 SiteForge V3.0 的数据模型、模块边界和实施计划逐步替换旧实现。
|
||
- 每完成一个领域,就补齐迁移脚本、测试和验收门禁。
|
||
|
||
优点:
|
||
|
||
- 最大化利用已经写好的管理后台、迁移解析器、API 和 Astro 代码。
|
||
- 保留真实问题的修复经验和测试用例。
|
||
- 比从空目录重建更快进入可运行状态。
|
||
|
||
风险:
|
||
|
||
- 必须主动偿还旧原型留下的结构债务。
|
||
- 不能为了短期速度保留内存发布、JSON 路由、自制 Token 等关键缺陷。
|
||
|
||
### 方案 B:保持 `cms-one` 为全新仓库,选择性移植源码
|
||
|
||
适用于希望彻底清理历史包袱的情况。
|
||
|
||
建议只移植:
|
||
|
||
- 后台通用壳和基础组件。
|
||
- WordPress/WXR 解析器与测试夹具。
|
||
- 内容版本、幂等导入的核心逻辑。
|
||
- Astro 通用组件、主题 Token 和门禁脚本。
|
||
- PostgreSQL/Redis/MinIO 开发环境配置。
|
||
|
||
不要整目录复制。每次移植都应有对应的模块边界、测试和依赖清单。
|
||
|
||
综合成本与风险,推荐采用**方案 A 的代码继承方式 + 方案 B 的选择性净化原则**:把旧项目当成可运行底座,但按 SiteForge 方案逐域重构,而不是延续旧项目产品定义。
|
||
|
||
---
|
||
|
||
## 7. 第一批实际迁移任务
|
||
|
||
### 第 1 批:建立干净基线
|
||
|
||
1. 确认源码许可证和第三方资产许可证。
|
||
2. 导出仅包含受版本控制源码的干净代码副本。
|
||
3. 排除数据、媒体、日志、缓存、依赖和 Secret。
|
||
4. 删除后台演示页面、多角色路由和无关分析模块。
|
||
5. 固化 Node、pnpm、PostgreSQL、Redis 和 MinIO 版本。
|
||
6. 跑通 lint、typecheck、unit、e2e 和静态站构建基线。
|
||
|
||
### 第 2 批:修正核心架构
|
||
|
||
1. 实现平台级单超级管理员认证。
|
||
2. 建立 `route_registry`、`import_batches`、`build_jobs`、`releases`、`publish_locks` 等核心表。
|
||
3. 将构建改为持久化队列 Worker。
|
||
4. 将静态站编译输入改为冻结 Site Snapshot。
|
||
5. 建立对象存储媒体模型和引用关系。
|
||
|
||
### 第 3 批:迁移与主题平台化
|
||
|
||
1. 把现有 WordPress REST/WXR 代码接入导入批次。
|
||
2. 建立全量 URL 清单、映射、冲突和覆盖率报告。
|
||
3. 将现有 Astro 组件整理为基础组件和业务区块。
|
||
4. 实现 Theme Manifest、Block Manifest 和 Block Renderer。
|
||
5. 完成第一个真实站点的迁移、预览、门禁和原子发布。
|
||
|
||
### 第 4 批:运营能力
|
||
|
||
1. Schema 驱动内容表单。
|
||
2. 产品、新闻、普通页面和导航维护。
|
||
3. 安全的公网 Form API 和线索后台。
|
||
4. 发布历史、差异查看、一键回滚和审计日志。
|
||
5. 备份恢复、监控告警和灾难恢复演练。
|
||
|
||
---
|
||
|
||
## 8. 需要优先修复的已发现风险
|
||
|
||
1. **发布记录在内存中**:服务重启会丢失构建历史和锁状态。
|
||
2. **API 进程直接构建**:资源隔离、并发、重试和故障恢复不足。
|
||
3. **迁移即发布**:不满足人工审核、预览和可回滚要求。
|
||
4. **路由保存在 JSON 设置中**:无法可靠保证所有旧路径不变。
|
||
5. **自制 Token 能力不足**:缺少完整过期、撤销、MFA 和会话管理。
|
||
6. **本地媒体存储和直接删除**:生产可靠性和引用安全不足。
|
||
7. **SVG 缺少清理**:存在持久化 XSS 风险。
|
||
8. **Lead 更新条件不完整**:部分操作需同时限定 `site_id`。
|
||
9. **页面和 Locale 存在硬编码**:无法稳定支持不同站点和语言组合。
|
||
10. **文档数据库模型多于实际 Schema**:必须以迁移文件和运行代码确认真实能力。
|
||
11. **正则式 HTML Gate 有边界缺陷**:需要 DOM 解析和浏览器级补充验证。
|
||
12. **所谓原子发布仍有删除后复制窗口**:生产切换需要重新设计。
|
||
|
||
---
|
||
|
||
## 9. 最终建议
|
||
|
||
当前 SiteForge 项目应把 `D:\project\cms` 定位为:
|
||
|
||
- **实现底座**:复用工程骨架、后台壳、API 基础、迁移解析和 Astro 运行时。
|
||
- **经验库**:复用真实迁移中沉淀的测试、映射和质量门禁经验。
|
||
- **非权威需求来源**:产品范围、权限、发布和主题架构以 SiteForge V3.0 为准。
|
||
|
||
预计最能节省工期的五项资产是:
|
||
|
||
1. WordPress REST/WXR 迁移解析和测试。
|
||
2. Art Design Pro 管理后台基础。
|
||
3. NestJS/Fastify/Drizzle 内容 API 基础。
|
||
4. Astro 静态站组件与 SEO Gate。
|
||
5. 内容版本、幂等导入和站点隔离测试。
|
||
|
||
预计最不能直接继承的五项是:
|
||
|
||
1. 当前认证与多角色模型。
|
||
2. 内存式构建和发布流程。
|
||
3. JSON 化重定向与非正式路由管理。
|
||
4. 本地媒体删除和安全策略。
|
||
5. 迁移完成后直接发布的工作流。
|
||
|
||
按这个边界执行,可以保留旧项目的大部分有效研发投入,同时避免把原型阶段的关键技术债带入 SiteForge 的正式版本。
|