Files
cms-website/SiteForge_网站工厂完整项目计划方案_V4.0.md
T

57 KiB
Raw Blame History

SiteForge 网站工厂完整项目计划与实施方案

版本:V4.0
编制日期:2026-10-21
文档状态:产品、架构、研发、测试和试点实施的统一基线
管理后台:Art Design Pro + Vue 3 + TypeScript + Element Plus
核心定位:支持旧站迁移、旧内容换新模板、全新网站搭建的多站点静态网站生产工厂


0. 文档结论

SiteForge 不应只做“WordPress 静态迁移工具”,也不应做成另一个 WordPress。它应是一套由单一超级管理员使用的网站生产工厂:

旧站或新数据
    ↓
采集 / 导入 / 手工录入
    ↓
统一内容模型与字段映射
    ↓
站点蓝图初始化网站结构
    ↓
主题 + 页面模板 + 板块组合完成展示
    ↓
冻结内容、路由、SEO、媒体和主题版本
    ↓
静态构建 → 自动验收 → 预览 → 发布 → 回滚

系统必须完整支持以下三条主业务路径:

  1. 原样迁移:导入旧站,尽量保持原内容、URL、SEO 和页面行为,输出纯静态站。
  2. 迁移并改版:导入旧内容,选择新蓝图或新主题重新组织展示,同时保留旧 URL,必要时生成受控跳转。
  3. 全新建站:不依赖任何旧网站,选择蓝图和主题,通过手工录入、CSV、JSON 或 API 导入新内容并生成新站。

此外支持第四条辅助路径:

  1. 复制建站:复制已有站点的结构、配置和可选内容,替换品牌、域名和数据后快速创建同类网站。

只有当以上四条路径共用同一套内容、蓝图、主题、构建和发布体系时,SiteForge 才真正是“网站工厂”。


1. 文档权威关系

1.1 当前权威文档

本文从 V4.0 起作为 SiteForge 的产品范围、目标架构、实施顺序和总体验收基线。

现有文档的关系如下:

文档 后续用途 权威性
SiteForge_网站工厂完整项目计划方案_V4.0.md 产品、架构和实施总基线 最高
docs/superpowers/specs/2026-10-20-siteforge-vertical-slice-design-v2.md 迁移切片中的数据、路由、构建、门禁细节参考 与 V4 冲突时以 V4 为准
cms现状与SiteForge差距分析_V2.0.md 旧 D:\project\cms 的复用和风险依据 事实参考
SiteForge_主题与板块设计方案_V1.0.md 主题、板块和组件设计参考 与 V4 冲突时以 V4 为准
SiteForge_完整项目计划方案_V3.0.md 历史总体方案 被 V4 取代
SiteForge_项目实施计划_V1.0.md 历史排期参考 被 V4 的阶段计划取代

1.2 代码库关系

  • D:\project\cms-one:SiteForge 新架构和后续正式实现目录。
  • D:\project\cms:旧项目和经验资产来源,默认只读,不在其中继续堆叠新架构。
  • 旧项目可复用的是迁移规则、测试夹具、兼容经验和经过验证的局部实现,不是整套复制上线。
  • 认证、发布、回滚、构建输入、站点隔离和主题体系必须按本文重新建立或严格改造。

2. 建设背景与问题定义

当前业务不是迁移一个网站,而是需要长期、重复地完成多种网站生产任务:

  • 旧网站大多为 WordPress,也包含 PHP、自研 CMS、纯 HTML、数据库和接口数据。
  • 不同网站的品牌、页面结构和视觉效果差异很大。
  • 迁移站的历史 URL、SEO、媒体路径和外链资产不能随意丢失。
  • 新网站不一定存在旧站,需要从模板、结构化数据或手工内容直接创建。
  • 老内容有时要保留原外观,有时要进入全新设计。
  • 网站上线后仍需发布产品、新闻、页面,调整菜单、SEO 和站点信息。
  • 生产网站要求纯静态,控制后台故障不能影响线上访问。
  • 多次项目中重复出现的数据清洗、URL 处理、主题开发、构建、发布和验收需要标准化。

因此,问题不能只用“抓取旧站并导出 HTML”解决。系统必须把内容资产、站点结构、视觉主题、页面组合和生产发布分离,才能同时获得复用性和设计自由度。


3. 产品目标与非目标

3.1 产品目标

  1. 一个后台管理多个独立网站。
  2. 一个 super_admin 管理全部功能,不建设复杂角色权限。
  3. 同时支持迁移建站、改版建站、全新建站和复制建站。
  4. WordPress 作为第一优先来源,通过适配器扩展其他来源。
  5. 内容与主题解耦,同一份标准内容可被不同主题渲染。
  6. 用站点蓝图复用网站结构,用组件和板块复用功能,用主题保留视觉差异。
  7. 迁移模式下精确保留或明确处置旧 URL 和 SEO。
  8. 新站模式下可生成规范 URL、SEO、Sitemap 和结构化数据。
  9. 通过后台长期维护产品、新闻、页面、分类、菜单、媒体和网站配置。
  10. 每次构建使用冻结输入,可复现、可审计、可回滚。
  11. 生产站完全静态化,动态能力通过独立服务提供。
  12. 第二个及后续网站主要投入在内容映射、设计配置和少量专属组件,而不是重写整个平台。

3.2 明确非目标

V1 不建设:

  • 类似 Webflow 的自由画布设计器。
  • 任意 CSS、JavaScript 在线编辑和执行。
  • 多组织 SaaS、套餐、计费和租户自助注册。
  • 多角色 RBAC、成员协作和复杂审批。
  • 完整商城、支付、订单、库存和会员中心。
  • 任意 WordPress 插件数据零人工自动迁移。
  • 自动承诺搜索排名绝不波动。
  • 未经人工确认自动把迁移结果或 AI 内容发布到生产环境。
  • Kubernetes、复杂微服务和多区域主动容灾。

3.3 V1 成功标准

维度 验收目标
建站模式 四条业务路径均能完成,前三条必须有真实样板
多站点 至少 3 个站点数据、构建和发布相互隔离
蓝图 同一蓝图能初始化两个不同品牌的新站
主题 至少 2 套视觉差异明显的主题使用同一内容协议
迁移 至少 1 个真实 WordPress 站完成导入、差异处理和静态预览
新站 无旧站输入也能从蓝图、手工内容及 CSV/JSON 构建完整网站
URL 迁移站已知 URL 100% 有明确处置或批准豁免
SEO 迁移站具备旧站快照、目标值和构建结果的三方差异报告
内容运营 超管可无代码维护产品、新闻、页面、菜单、媒体和 SEO
构建 同一冻结输入的业务产物 Hash 一致
发布 至少一种部署适配器完成真实发布和回滚演练
独立性 控制面停止运行后,已发布静态站仍可正常访问

4. 用户与权限模型

4.1 唯一角色

V1 只有一种平台角色:

super_admin

该角色可以管理全部网站、数据源、内容、主题、蓝图、构建、发布和系统设置。

不实现:

  • 站点管理员。
  • 编辑、审核、发布等分级角色。
  • 菜单权限、按钮权限和数据权限配置器。
  • 用户组和组织层级。

4.2 账号与安全

即使只有一个角色,仍必须具备:

  • 初始管理员一次性创建流程,禁止默认密码。
  • 强密码和可选强制 MFA;生产公网后台必须启用 MFA。
  • 恢复码、会话查看和会话撤销。
  • 登录限流、失败锁定和安全审计。
  • 高风险操作二次确认。
  • 发布、回滚、删除、密钥变更的不可变操作日志。

单一角色只是减少权限复杂度,不代表取消安全控制。


5. 四条核心业务流程

5.1 原样迁移

创建迁移站点
→ 登记旧站来源
→ 获取 WXR / REST / 数据库 / uploads / Sitemap
→ 建立源快照
→ 导入并标准化内容
→ 建立旧 URL 和 SEO 基线
→ 选择兼容主题或实现专属主题
→ 人工处理异常映射
→ 冻结并构建
→ 自动门禁
→ 预览确认
→ 最终差量同步
→ 发布和切站

目标是内容、URL 和 SEO 保真。视觉可接近旧站,但不要求把旧主题代码原样搬入系统。

5.2 老内容换新模板

完成旧站导入
→ 选择目标站点蓝图和新主题
→ 把标准内容映射到新页面模板和板块
→ 生成兼容性报告
→ 补齐缺失字段和专属板块
→ 保留旧路径或建立一对一 Redirect
→ SEO 差异验收
→ 构建、预览和发布

“换模板”不是简单换 CSS。它包括页面类型匹配、板块组合、菜单重建、媒体适配和缺失字段补齐。

5.3 全新建站

创建新站
→ 选择站点蓝图
→ 选择蓝图支持的主题/主题预设
→ 填写品牌、域名、语言和联系方式
→ 安装内容类型、默认页面、菜单和 SEO 规则
→ 导入 CSV/JSON 或手工新增内容
→ 调整页面板块
→ 构建、门禁、预览和发布

此流程不得依赖 WordPress ID、旧 URL、WXR 或旧站字段。

5.4 复制建站

支持三种复制范围:

模式 复制内容 复制结构/主题 复制环境和密钥
仅结构 否 是 否
结构 + 示例内容 仅明确标记的示例数据 是 否
完整业务副本 可选 是 否

复制后必须重新设置站点标识、域名、品牌、环境、部署目标和密钥引用。任何 Secret、发布锁、历史 Release 和线上统计不得被复制。


6. 核心产品概念

6.1 概念关系

Content Type / Content Entry
            ↓
      Block Instance
            ↓
       Page Instance
            ↓
       Page Template
            ↓
          Theme
            ↑
      Site Blueprint

6.2 站点蓝图 Site Blueprint

站点蓝图是“创建一个可运营网站所需的结构安装包”,不是视觉主题的别名。

一个蓝图至少声明:

  • 蓝图 ID、版本和兼容协议版本。
  • 适用站点类型,如企业站、产品目录站、新闻站。
  • 必需和可选的站点配置字段。
  • 需要安装的内容类型及其字段 Schema。
  • 默认页面实例和页面模板绑定。
  • 默认板块组合和插槽规则。
  • 默认菜单和菜单项结构。
  • 默认 URL 生成规则和 SEO 规则。
  • 允许使用的主题和默认主题绑定。
  • 可选的示例内容包。
  • 可选的 CSV/JSON 映射配置。
  • 可选的迁移映射配置。

V1 至少提供:

  1. corporate-basic:企业展示、新闻、产品目录、联系页面。
  2. catalog-pro:多分类产品、产品详情、参数、下载和询盘入口。

6.3 主题 Theme

主题负责最终 HTML 结构、CSS、响应式、动效和展示组件,不负责保存业务内容。

主题 Manifest 声明:

  • 主题 ID、版本和渲染协议版本。
  • 支持的蓝图、内容类型和模板。
  • 模板入口和 Block Renderer。
  • 必需站点配置和设计令牌 Schema。
  • 可用的主题预设。
  • 公共运行时和组件包兼容版本。
  • 构建命令、依赖锁和产物约束。

主题之间不得直接引用彼此的内部组件。

6.4 页面模板 Page Template

页面模板定义页面的结构约束:

  • 适用页面/内容类型。
  • 可用插槽,如 hero、main、sidebar、after_content。
  • 每个插槽允许的板块类型。
  • 必需板块、最大数量和顺序约束。
  • 页面级 SEO 和结构化数据策略。
  • 对应主题的渲染入口。

6.5 页面实例 Page Instance

页面实例是某个站点中真实存在的页面组合,包含:

  • 页面标题、Slug、Locale 和状态。
  • 绑定的页面模板版本。
  • 板块实例及顺序。
  • 菜单归属和内部链接。
  • URL 与 SEO 配置。
  • 当前修订和已发布修订。

6.6 板块定义与板块实例

板块定义是可复用协议,板块实例是页面中的实际数据。

interface BlockInstance<T = Record<string, unknown>> {
  id: string
  siteId: string
  pageId: string
  blockType: string
  schemaVersion: number
  slotKey: string
  position: number
  variant?: string
  data: T
  settings?: {
    anchorId?: string
    themeMode?: 'default' | 'light' | 'dark'
    spacing?: 'none' | 'small' | 'medium' | 'large'
  }
  visibility: {
    enabled: boolean
    locales?: string[]
  }
}

V1 采用有限插槽和结构化配置,不允许自由坐标和任意嵌套。

6.7 内容类型与内容条目

首版标准内容类型:

  • basic_page
  • product
  • news_article
  • category
  • tag
  • brand
  • download
  • faq
  • menu
  • redirect

站点可以安装扩展字段,但扩展字段必须通过版本化 Schema 声明,不能把全部数据塞入无约束 JSON。

6.8 映射配置 Mapping Profile

映射配置把来源字段转换为统一内容字段:

来源字段
→ 清洗与转换
→ 标准字段
→ 默认值/字典/单位处理
→ 校验
→ 冲突策略
→ 导入结果

它必须支持:

  • 字段重命名和类型转换。
  • HTML 清洗和短代码处置。
  • 分类、枚举、单位和日期映射。
  • 媒体 URL 到媒体实体的转换。
  • 一个来源字段拆分为多个字段。
  • 多个来源字段合并。
  • 必填缺失报告。
  • 预览前 N 条转换结果。
  • 映射版本化和重跑。

7. 组件化与复用策略

7.1 四层复用模型

第一层:数据契约、Schema、URL、SEO、媒体工具
第二层:无样式基础组件与可访问性交互
第三层:Headless 业务逻辑和内容查询
第四层:主题展示组件和品牌视觉

前三层公共复用,第四层由主题独立实现。

7.2 建议公共包

packages/
  contracts/             # DTO、Schema、事件和状态机
  content-model/         # 内容类型与修订协议
  blueprint-sdk/         # 蓝图定义、安装和升级
  import-sdk/            # 来源适配器和字段映射
  block-contracts/       # Block Schema 与版本迁移
  theme-runtime/         # 渲染快照读取和主题协议
  ui-primitives/         # 无样式或低样式基础组件
  headless-components/   # 菜单、分页、筛选、表单逻辑
  seo-runtime/           # Meta、Canonical、JSON-LD、Sitemap
  media-runtime/         # 响应式媒体和资源解析
  route-compiler/        # 路由、Redirect 和部署规则编译
  validation-rules/      # 自动门禁规则
  observability/         # 日志、指标和 Trace 约定

7.3 复用边界

能力 公共复用 主题独立
内容 Schema、修订和导入 是 否
URL、SEO、媒体解析 是 仅配置和展示差异
菜单、分页、筛选逻辑 是 HTML 和视觉独立
Product/News 查询 是 卡片和列表独立
Header/Footer 数据协议 是 结构和视觉独立
页面模板和动画 否 是
品牌排版和颜色 Token 可配置 是
专属业务组件 可提取逻辑 展示通常独立

7.4 首版板块目录

全局板块:

  • Header
  • Footer
  • Notice Bar
  • Global CTA
  • Contact Info
  • Cookie/Privacy Notice

页面板块:

  • Hero
  • Rich Text
  • Image + Text
  • Feature Grid
  • Statistics
  • Logo/Partner Wall
  • Gallery
  • Video
  • Product List
  • Product Category Grid
  • News List
  • FAQ
  • Download List
  • Contact Form
  • CTA

系统板块:

  • Breadcrumbs
  • Product Main Info
  • Product Parameters
  • Product Gallery
  • Article Body
  • Taxonomy Archive
  • Pagination
  • SEO Head

Legacy HTML 仅作为迁移过渡板块,必须清洗、隔离、标记并制定结构化替换计划。


8. 总体架构

flowchart TB
  subgraph Sources[输入来源]
    WP[WordPress WXR / REST / SQL]
    WEB[HTML / Sitemap / 浏览器渲染]
    DB[其他 CMS / MySQL / API]
    FILE[CSV / JSON / XML / ZIP]
    MANUAL[后台手工录入]
  end

  subgraph Factory[SiteForge 控制面]
    ADMIN[Art Design Pro 超管后台]
    API[NestJS 模块化单体 API]
    JOB[任务调度与 Worker]
    RAW[不可变来源快照]
    MAP[适配器与映射引擎]
    CONTENT[统一内容与修订]
    BLUEPRINT[站点蓝图]
    PAGE[页面模板与板块]
    ROUTE[URL / SEO / Sitemap]
    MEDIA[媒体资产]
    THEME[主题与公共组件]
    BUILD[冻结快照与静态构建]
    GATE[自动门禁]
    RELEASE[Release / 部署 / 回滚]
  end

  subgraph Production[独立生产面]
    NGINX[Nginx 静态站]
    CDN[对象存储 + CDN]
    DYNAMIC[表单 / 搜索等独立 API]
  end

  Sources --> JOB --> RAW --> MAP --> CONTENT
  ADMIN --> API --> JOB
  BLUEPRINT --> PAGE
  CONTENT --> PAGE --> ROUTE
  MEDIA --> PAGE
  ROUTE --> BUILD
  THEME --> BUILD
  BUILD --> GATE --> RELEASE
  RELEASE --> NGINX
  RELEASE --> CDN
  NGINX -.按需调用.-> DYNAMIC
  CDN -.按需调用.-> DYNAMIC

8.1 控制面与生产面分离

  • 控制面负责管理、导入、构建、验收和发布。
  • 生产面只包含不可变静态文件、服务器规则和明确的动态 API。
  • 生产页面不得在访问时查询 SiteForge 数据库。
  • SiteForge、Redis 或 PostgreSQL 短时离线不得影响已发布网站。

8.2 模块化单体

V1 使用 NestJS 模块化单体 + 独立 Worker,不提前拆微服务:

Auth
Sites / Environments
Blueprints
Content / Revisions
Pages / Blocks / Menus
Sources / Imports / Mappings
Media
Routes / SEO
Themes
Builds / Validation
Releases / Deployments
Forms
Audit / Operations

模块间通过明确 Service、Repository、事件和共享契约通信,禁止跨模块直接改表。

8.3 技术栈

层 选型
Monorepo pnpm Workspace
管理后台 Art Design Pro + Vue 3 + TypeScript + Element Plus
状态与路由 Pinia + Vue Router
API NestJS 模块化单体
ORM Drizzle ORM
数据库 PostgreSQL 16
队列 Redis + BullMQ;最小切片可先使用持久化数据库 Job Runner
静态构建 Astro
抓取 TypeScript HTML 解析;Playwright 仅作 JS/异常页面兜底
Schema JSON Schema/Zod,具体边界在 ADR 中锁定
对象存储 S3 兼容存储;本地开发可使用文件适配器
测试 Vitest + API 集成测试 + Playwright
部署 Docker Compose 控制面;Nginx/SSH 或 OSS/CDN 生产站
可观测性 结构化日志 + 指标 + 告警

Node、pnpm、PostgreSQL、构建镜像和第三方依赖必须锁定版本。


9. 建议仓库结构

cms-one/
  apps/
    admin/                    # Vue 3 管理后台
    api/                      # NestJS API/CLI
    worker/                   # 导入、媒体、构建、验证、发布 Worker
    preview-server/           # 本地/受控预览
  packages/
    contracts/
    database/
    auth/
    content-model/
    blueprint-sdk/
    import-sdk/
    wordpress-adapter/
    file-import-adapter/
    block-contracts/
    theme-runtime/
    route-compiler/
    seo-runtime/
    media-runtime/
    validation-rules/
    deployment-sdk/
  themes/
    pilot-minimal/
    corporate-modern/
  blueprints/
    corporate-basic/
    catalog-pro/
  fixtures/
    sanitized-wxr/
    sample-csv/
    sample-json/
    route-cases/
  infra/
    compose/
    nginx/
    scripts/
  docs/
    architecture/
    adr/
    operations/
    migration/
  artifacts/                 # Git ignore
  storage/                   # Git ignore

主题、蓝图和适配器都必须通过 SDK 契约注册,禁止把站点专属判断散落在 API、构建器和公共组件中。


10. 核心领域模型

10.1 站点和环境

实体 责任
sites 站点身份、模式、默认语言、状态
site_config_revisions 品牌、联系信息、功能开关等不可变修订
site_environments preview/staging/production 的域名和发布目标
site_blueprint_bindings 站点绑定的蓝图及版本
theme_bindings 站点/环境绑定的主题、预设和 Token 版本
deployment_targets 部署适配器和 Secret 引用

site_mode 至少包含:

migration_preserve
migration_redesign
new_build
clone

10.2 蓝图、模板和板块

实体 责任
site_blueprints 蓝图稳定身份
site_blueprint_versions 不可变蓝图 Manifest 和安装包版本
blueprint_installations 某站安装、升级、失败和回滚记录
page_template_definitions 页面模板和插槽约束
page_instances 站点真实页面
page_revisions 页面不可变修订
block_definitions 板块 Schema、UI Schema 和兼容版本
block_instances 页面中的板块实例
block_instance_revisions 板块不可变修订
menus / menu_items 导航结构和内部链接

10.3 内容与修订

实体 责任
content_types 内容类型 Schema 和版本
content_entries 稳定内容身份、站点、类型、Locale
content_revisions 不可变内容版本和 Hash
content_publication_pointers current/published 双指针
taxonomies / terms 分类法和分类项
content_term_relations 内容与分类关系
content_links 内部引用和删除影响分析

导入只更新 current revision,不得自动修改 published revision。只有显式发布动作才能改变 published pointer。

10.4 来源、快照和导入

实体 责任
source_connections 来源逻辑连接和 Secret 引用
source_snapshots 某次 WXR、文件、接口响应和媒体目录的不可变证据
source_records 来源稳定键与平台对象身份映射
mapping_profiles 字段映射和转换规则版本
import_jobs 一次导入任务
import_items 每条来源记录的 created/updated/skipped/conflict/failed
import_conflicts 人工决定保留、覆盖、合并或忽略

来源稳定身份使用来源系统 ID 或受控复合键,不能使用 Permalink 作为内容主键。

10.5 媒体

实体 责任
media_assets 媒体稳定身份、Hash、MIME、安全状态
media_variants WebP/AVIF/缩略图等衍生版本
media_usages 正文、板块、特色图等引用位置
legacy_asset_routes 旧资源 URL 到新资源的映射

媒体删除前必须执行引用检查。默认软删除,不直接清除物理原件。

10.6 路由与 SEO

实体 责任
route_registry 精确路径、类型、目标、状态和来源证据
route_collisions 大小写、尾斜杠、静态文件映射等碰撞风险
redirect_rules 301/302 和目标
seo_revisions Title、Description、Canonical、Robots、OG、JSON-LD
source_page_snapshots 旧站原始/渲染 SEO 证据
sitemap_entries Sitemap 纳入与排除理由

精确路由键和碰撞检测键必须分离,避免错误地把大小写或尾斜杠不同的历史 URL 合并。

10.7 构建、验收和发布

实体 责任
build_jobs 构建状态、输入、日志和结果
build_input_snapshots 冻结构建输入和总 Hash
validation_runs 门禁规则、结果、豁免和报告
artifacts 构建产物、Manifest 和 Checksums
releases 可发布的不可变版本
deployments 发布目标、步骤和结果
publish_locks 防止同站并发发布
rollback_events 回滚版本、原因和结果
audit_logs 关键操作审计

11. 来源适配与导入系统

11.1 适配器协议

每个来源适配器实现:

interface SourceAdapter {
  probe(input: SourceInput): Promise<CapabilityReport>
  snapshot(input: SourceInput): Promise<SourceSnapshotRef>
  discover(snapshot: SourceSnapshotRef): AsyncIterable<SourceRecord>
  normalize(record: SourceRecord, profile: MappingProfile): Promise<NormalizedRecord>
  diff?(previous: SourceSnapshotRef, current: SourceSnapshotRef): Promise<SourceDiff>
}

适配器只负责来源发现和标准化,不直接发布内容、不写生产路径、不调用主题。

11.2 首版适配器优先级

P0:

  • WordPress WXR。
  • 已解包 uploads 媒体目录。
  • Sitemap/Sitemap Index。
  • CSV。
  • JSON。
  • 后台手工录入。

P1:

  • WordPress REST API。
  • WordPress SQL 只读导出。
  • HTML 抓取。
  • ZIP 上传和安全解包。
  • 通用 REST API。

P2:

  • PHP/MySQL 自研 CMS。
  • Drupal/Joomla 等专用适配器。
  • Excel 和第三方业务系统连接。

11.3 WordPress 首版范围

必须支持:

  • post、page、product CPT。
  • 分类、标签、产品分类、产品标签及关系。
  • Attachment、特色图片、正文图片和产品图库。
  • Yoast 常见 Title、Description、Canonical 和主分类字段。
  • 原 Permalink,包括 .html、.php、目录和非标准后缀。
  • Sitemap 中额外的已知 URL。
  • 试点明确使用的少量主题字段。

必须识别并报告但允许暂不转换:

  • 未配置的 CPT。
  • Elementor/WPBakery 等复杂布局数据。
  • 未知短代码。
  • 插件私有表数据。
  • WooCommerce 订单、支付、库存和复杂变体。
  • 评论、用户和敏感个人数据。

11.4 CSV/JSON 新站导入

新站导入至少支持:

  • 选择目标内容类型。
  • 自动识别列名/键名和数据类型。
  • 交互式建立字段映射。
  • 预览转换和验证错误。
  • 设置唯一键和更新策略。
  • 下载错误行报告。
  • 重跑幂等。
  • 将映射保存为版本化 Profile。

11.5 冲突策略

每次导入可选择默认策略,但冲突必须逐条留痕:

create_only
update_if_unchanged
overwrite_current
merge_selected_fields
skip
manual_review

已经在后台人工修改的字段默认受保护,迁移差量不得静默覆盖。


12. URL、SEO 与迁移保真

12.1 URL 来源

迁移站的已知 URL 基线至少由以下集合组成:

WXR 可推导 URL
∪ Attachment URL
∪ Sitemap/Sitemap Index
∪ HTML 抓取结果
∪ 服务器 Rewrite/Redirect 规则
∪ 访问日志、GSC、GA4(可获得时)
∪ 人工补充清单

报告必须明确列出已接入和未接入来源,禁止把“当前已知 URL”描述为“所有历史 URL”。

12.2 路径处置

每条迁移 URL 必须进入一种状态:

preserve      原路径输出 200
redirect      明确跳转
gone          明确 410
exclude       批准排除并记录原因
unresolved    未处理;发布门禁前必须清零

新站 URL 则由蓝图和内容类型规则生成,不要求存在旧 URL 基线,但仍需执行冲突、Canonical、Sitemap 和内部链接检查。

12.3 SEO 三方对比

source_raw → source_rendered → target_build
  • source_raw:旧数据库、插件、WXR 或 API 中的 SEO 数据。
  • source_rendered:旧网站最终 HTML 和响应头。
  • target_build:新静态预览的真实 HTTP 结果。

对比至少包含:

  • Title、Description。
  • Canonical。
  • Robots 和 X-Robots-Tag。
  • H1 和标题结构。
  • OG/Twitter Card。
  • JSON-LD。
  • hreflang。
  • 状态码、Redirect 和链路。
  • Sitemap 纳入情况。
  • 内部链接和媒体可达性。

12.4 门禁严重级别

  • P0:发布阻断,必须修复。
  • P1:默认阻断,可由超管填写理由、影响和到期时间后豁免。
  • P2:告警,不阻断但进入报告。
  • P3:优化建议。

Canonical 指向错误域名、关键 URL 404、Redirect 环、noindex 误设、Sitemap 包含错误页面等均属于 P0。


13. 媒体与静态资源

13.1 处理流程

登记来源
→ 下载或读取本地输入
→ 协议/MIME/大小/像素安全校验
→ Hash 去重
→ 保存原件
→ 生成受控衍生图
→ 建立使用关系
→ 建立旧路径映射
→ 构建输出

13.2 安全规则

  • 拒绝 file://、内网地址、回环地址和受限协议。
  • 处理 DNS 重绑定、跳转后目标和下载总预算。
  • MIME 必须通过文件内容验证,不能只信扩展名。
  • SVG 默认清洗或转安全格式,未经允许不得原样内联。
  • ZIP 必须限制条目数、展开大小、目录穿越和符号链接。
  • EXIF 和潜在敏感元数据按策略清理。

13.3 路径策略

  • 迁移站优先保留重要旧媒体路径。
  • 新站使用稳定、可缓存的资源路径。
  • 构建产物不得引用控制面私有地址。
  • 外链资源必须在发布前明确选择保留远程、转存或阻断。

14. 内容发布与版本模型

14.1 双指针模型

每个内容、页面和站点配置都保留:

current_revision_id
published_revision_id
  • 保存编辑只更新 current。
  • 导入只创建或更新 current。
  • 发布内容时显式更新 published。
  • 静态构建默认只读取 published。
  • 预览可选择读取 current,但必须标识为预览并设置 noindex。

14.2 内容状态

draft
published
archived

V1 不实现复杂审批流。状态变更仍记录操作人、时间和原因。

14.3 删除规则

  • 被页面、菜单、板块、SEO 或其他内容引用时禁止直接删除。
  • 删除已发布内容前必须选择 Redirect、Gone 或替代目标。
  • 默认软删除,物理清理通过独立受控任务执行。
  • 删除不得导致历史 Release 无法回滚。

15. 静态构建体系

15.1 冻结构建输入

BuildInput = PublishedContentSnapshot
           + PageAndBlockSnapshot
           + RouteAndSeoSnapshot
           + MediaManifest
           + BlueprintBinding
           + ThemeBuildSnapshot
           + SiteEnvironmentSnapshot

构建期间不得读取变化中的在线业务表、Seed 数据或远程内容。

15.2 Render Snapshot

主题只接收冻结文件,例如:

site.json
blueprint.json
content.json
pages.json
blocks.json
menus.json
taxonomies.json
routes.json
seo.json
assets.json
render-manifest.json

主题不得:

  • 查询 PostgreSQL。
  • 调用控制面 API。
  • 读取原始 Source Snapshot。
  • 使用站点专属 Seed fallback。
  • 在构建时访问网络。

15.3 Artifact 结构

artifacts/jobs/<build-job-id>/
  input/
  dist/
  manifests/
    build-manifest.json
    route-manifest.json
    asset-manifest.json
    checksums.txt
  reports/
    validation-summary.json
    validation-report.html
    url-coverage.json
    seo-diff.json
  logs/
    build.log

15.4 可复现性

同一 Build Input 连续构建两次应满足:

  • HTML、CSS、JS、媒体和 Manifest 的业务 Hash 一致。
  • Job ID 和时间可以不同,但不得进入业务页面内容。
  • 排序、时区、随机数和生成时间必须固定或显式注入。
  • 输入为空、Hash 不符、未知 Block 或不兼容主题时立即失败。

15.5 增量构建

V1 先实现可靠全量构建。只有在依赖图、缓存失效和回滚模型稳定后,才引入选择性增量构建,不能为了速度牺牲正确性。


16. 自动验收门禁

16.1 所有站点共用门禁

  • 构建输入 Schema 和 Hash 完整。
  • 所有内部链接可达。
  • 资源不存在 404。
  • Title、Description、Canonical 和 H1 符合规则。
  • Sitemap 与 Robots 一致。
  • JSON-LD 可解析。
  • HTML 结构和关键可访问性规则通过。
  • 无控制面地址、临时域名和未批准远程依赖。
  • 无未知 Block、缺失 Renderer 和未发布引用。
  • 目标文件系统不存在大小写、保留名和路径长度冲突。

16.2 迁移站额外门禁

  • URL 基线 unresolved=0。
  • 所有保留 URL 在预览真实 HTTP 返回正确状态。
  • Redirect 无环、无超长链、目标可达。
  • P0 SEO 差异为 0。
  • 关键页面内容和媒体数量达到验收阈值。
  • 最终差量后无未审查覆盖冲突。

16.3 新站额外门禁

  • 蓝图必需页面、菜单和站点配置齐全。
  • 示例内容没有被误发布,除非明确转为正式内容。
  • 新域名、Canonical、Sitemap 和结构化数据一致。
  • 不存在占位 Logo、测试联系方式和默认文案。
  • CSV/JSON 导入错误已清零或批准排除。

16.4 复制站额外门禁

  • 未复制 Secret、部署目标、历史 Release 和统计标识。
  • 域名、品牌、Canonical、表单收件地址和隐私信息已替换。
  • 不存在来源站点 ID 或内部地址泄漏。

17. 预览、发布与回滚

17.1 Preview

  • Preview 只读取该 Build 的 Dist 和 Route Manifest。
  • Preview 必须自包含,不查询实时数据库。
  • 预览入口需要访问控制并默认 noindex。
  • 必须正确模拟 HTML、Asset、301、410 和 404。

17.2 Release 状态机

draft
→ building
→ validating
→ ready
→ deploying
→ active

异常状态:

failed
cancelled
superseded
rolled_back

17.3 发布流程

  1. 获取站点环境发布锁。
  2. 校验 Release、门禁和批准豁免。
  3. 上传不可变版本目录。
  4. 校验文件数量、大小和 Hash。
  5. 对临时入口执行真实 HTTP 冒烟。
  6. 原子切换当前版本指针。
  7. 刷新 CDN。
  8. 对生产域名执行关键路径检查。
  9. 记录 Deployment 和 Audit。

17.4 回滚

  • 回滚是把活动指针切回历史不可变 Release,不是重新构建旧代码。
  • 回滚前检查历史产物仍然完整。
  • 回滚后执行生产冒烟和 CDN 刷新。
  • 至少保留最近 N 个 Release;N 由存储策略配置。
  • 上线前必须完成一次生产等价环境回滚演练。

18. 管理后台设计

18.1 技术原则

管理后台采用 Art Design Pro 作为工程底座:

  • Vue 3 + TypeScript 实现业务页面和组合式逻辑。
  • Element Plus 提供表格、表单、上传、树和弹窗。
  • Pinia 管理客户端状态。
  • OpenAPI 或共享契约生成 API 类型。
  • 移除或关闭多角色、注册、演示菜单等不需要的底座功能。

控制台主题与生产网站主题完全独立。

18.2 信息架构

一级菜单 核心页面
工作台 站点概览、失败任务、构建状态、线上告警
网站工厂 新建网站向导、复制网站、蓝图目录
网站 基本信息、域名、环境、主题、部署目标
数据源 来源连接、快照、能力探测、凭据引用
导入与映射 导入任务、字段映射、预览、冲突和错误
内容 页面、产品、新闻、分类、品牌、FAQ、下载
页面设计 页面模板、板块实例、排序、可见性和预览
菜单 菜单树、内部链接和多语言项
媒体 原件、衍生图、引用、旧路径和安全状态
URL 路径注册表、冲突、Redirect、Gone
SEO 元信息、Sitemap、结构化数据、迁移差异
主题 主题版本、预设、Token、兼容性报告
构建与测试 构建快照、日志、产物和门禁报告
发布 Release、部署、生产检查和回滚
系统 超管账号、会话、密钥、备份、审计和通知

18.3 新建网站向导

步骤:

  1. 选择创建方式:迁移、迁移改版、全新、复制。
  2. 填写站点名称、标识、语言和目标域名。
  3. 选择蓝图。
  4. 选择主题和主题预设。
  5. 填写品牌、Logo、联系方式和基础 SEO。
  6. 配置来源或选择手工/文件导入。
  7. 预览即将创建的内容类型、页面和菜单。
  8. 确认安装并进入站点工作台。

安装必须由后台 Job 执行,失败时可回滚,不留下半安装状态。

18.4 页面编辑器

V1 页面编辑器提供:

  • 选择允许的页面模板。
  • 新增、复制、排序、隐藏和删除板块。
  • Schema 驱动字段表单。
  • 媒体、内容和内部链接选择器。
  • 桌面、平板、手机静态预览。
  • 当前草稿与已发布版本对比。

不提供自由拖拽坐标、任意嵌套和在线写代码。

18.5 Schema 驱动表单

每个 Content Type、Block、Blueprint 和 Theme Config 提供:

  • 数据 Schema。
  • UI Schema。
  • 默认值。
  • 校验消息。
  • 版本号和迁移函数。

前端和后端必须使用同一契约验证。生产构建遇到未知版本时必须失败,不能静默忽略。


19. API 与 CLI 范围

19.1 首版 API 模块

/auth
/sites
/site-environments
/blueprints
/themes
/content-types
/contents
/pages
/blocks
/menus
/sources
/source-snapshots
/mapping-profiles
/imports
/media
/routes
/seo
/builds
/validations
/releases
/deployments
/audit-logs

所有站点级接口必须显式带 site_id 上下文,并通过 Repository 级隔离测试。

19.2 首版 CLI

CLI 用于早期纵向切片、自动化和故障恢复,不替代最终后台:

site:create
site:clone
site:inspect
blueprint:list
blueprint:validate
blueprint:install
theme:list
theme:compatibility
source:snapshot
content:import-wxr
content:import-csv
content:import-json
content:add
content:publish
route:compile
build:create
build:validate
preview:start
release:create
release:deploy
release:rollback

破坏性或生产操作必须要求站点、环境和确认参数,不允许模糊默认目标。


20. 动态能力边界

纯静态网站仍可能需要表单、搜索和第三方功能。

20.1 首版处理

能力 方案
联系/询价表单 独立 Form API,静态页只提交请求
搜索 小站构建静态索引;大站接独立搜索服务
地图 受控第三方脚本或静态地图
视频 隐私增强嵌入或自托管
统计 每站独立配置 ID,构建时注入
多语言 模型预留 Locale;完整工作流进入 V1.1
登录/会员/支付 V1 不做,必要时对接外部系统

20.2 Form API 最低要求

  • Origin 和站点校验。
  • CSRF/滥用防护、速率限制和蜜罐。
  • 输入 Schema、长度和附件校验。
  • 隐私同意和数据保留策略。
  • WebHook/邮件重试及死信队列。
  • 接收成功与转发成功分开记录。
  • 后台查看状态,但敏感内容最小化保存。

21. 安全、备份与可观测性

21.1 安全基线

  • Secret 只保存引用,不写入数据库明文字段、日志或构建产物。
  • 采集器执行 SSRF 防护和受控出口。
  • HTML 采用白名单清洗,原始内容只保存在受控 Source Snapshot。
  • 文件上传执行 MIME、大小、恶意内容和路径安全检查。
  • 构建默认断网、受限 CPU/内存/磁盘和超时。
  • 管理后台启用 CSP、CSRF、防点击劫持和安全 Cookie。
  • 依赖执行许可证、漏洞和锁文件检查。
  • 跨站数据访问通过自动测试阻断。

21.2 备份对象

  • PostgreSQL。
  • 原始来源快照。
  • 媒体原件。
  • Blueprint、Theme 和构建镜像版本。
  • Artifact 和 Release Manifest。
  • Secret 管理系统配置的独立备份流程。

必须定期进行从空环境恢复演练,只完成“备份成功”不算闭环。

21.3 任务可靠性

所有长任务必须具备:

  • 持久化状态。
  • 心跳和 stale 检测。
  • 幂等键。
  • 重试策略。
  • 取消能力。
  • 超时和资源预算。
  • 死信记录。
  • 结构化进度和错误摘要。

21.4 关键指标

  • 导入吞吐量、失败率和冲突数。
  • 构建时长、排队时长和成功率。
  • 门禁 P0/P1 数量。
  • 部署成功率和回滚次数。
  • 媒体缺失和死链数量。
  • Form API 成功率和转发延迟。
  • 存储使用量和备份恢复结果。

22. 测试策略

22.1 单元测试

  • 内容 Schema 和修订逻辑。
  • 蓝图安装/升级规划。
  • 字段转换和映射函数。
  • URL 规范化、精确键和碰撞键。
  • Redirect 图和 Sitemap。
  • SEO 合并优先级。
  • 媒体类型、安全和路径映射。
  • Block Schema 迁移。
  • 构建快照 Canonical JSON 和 Hash。

22.2 契约测试

  • Source Adapter 协议。
  • Blueprint Manifest。
  • Theme Manifest 和 Render Contract。
  • Block Definition 和 Renderer。
  • Deployment Adapter。
  • API OpenAPI/共享类型。

22.3 集成测试

  • 数据库约束、事务和站点隔离。
  • 同一 Source Snapshot 重跑幂等。
  • 导入不自动发布。
  • 蓝图安装失败完整回滚。
  • 当前/已发布双指针。
  • Build Input 冻结后不受在线编辑影响。
  • Job 进程中断后识别 stale 并安全恢复。
  • Release 发布锁防止并发覆盖。

22.4 构建和端到端测试

  • WXR → 内容 → 页面 → 静态站。
  • CSV/JSON → 新站 → 静态站。
  • 老内容 → 新主题 → 原路径输出。
  • 后台新增产品/新闻 → 发布 → 重建。
  • Theme/Blueprint 不兼容时阻断。
  • 预览返回 200/301/410/404 正确。
  • 发布、生产冒烟和回滚。

22.5 视觉与质量测试

  • 两套主题的关键模板截图基线。
  • 桌面、平板和手机视口。
  • 关键组件可访问性。
  • Core Web Vitals 和页面体积预算。
  • 图片比例、溢出、字体和交互回归。

22.6 必备测试夹具

  • 最小 WXR。
  • 重复 ID、重复 Slug 和特殊 URL WXR。
  • 含短代码和恶意 HTML 的 WXR。
  • 缺失媒体和错误 MIME。
  • CSV/JSON 正常、缺字段、重复唯一键和类型错误样本。
  • Redirect 环、链和路径碰撞。
  • 两个蓝图版本及升级样本。
  • 两个主题及缺失 Renderer 的失败样本。

23. V1 产品范围

23.1 P0 必须交付

  • 单一超级管理员登录、MFA、会话和审计。
  • 多站点和 preview/staging/production 环境。
  • corporate-basic 站点蓝图。
  • 第一套正式主题和公共组件协议。
  • WXR、Sitemap、已解包媒体、CSV、JSON 和手工内容输入。
  • 统一内容、修订、页面、板块、菜单和媒体模型。
  • URL 注册表、SEO 三方对比和门禁。
  • 冻结构建输入、Astro 静态构建和自包含 Preview。
  • Nginx/SSH 或 OSS/CDN 中至少一个正式部署适配器。
  • Release、原子发布、生产检查和回滚。
  • Vue 3 管理后台核心业务页面。
  • 三类真实样板验收。

23.2 P1 建议随 V1 完成

  • 第二套主题。
  • catalog-pro 蓝图。
  • WordPress REST 差量输入。
  • HTML 抓取和 Playwright 补扫。
  • 复制建站。
  • Form API。
  • 主题 Token 后台编辑。
  • 视觉回归和性能预算。

23.3 V1.1

  • 完整多语言和 hreflang 工作流。
  • 定时发布和批量操作。
  • WordPress SQL 深度适配。
  • ZIP 安全解包。
  • 图片 AVIF/WebP 衍生和智能裁切。
  • 选择性增量构建。
  • WebHook 与外部业务系统同步。
  • 搜索服务接入。
  • 更多蓝图、主题和适配器。

24. 项目实施策略

24.1 实施原则

  1. 先证明贯穿全链路的最小网站工厂,不先堆完整后台页面。
  2. 同时验证迁移站和全新站,防止数据模型只服务 WordPress。
  3. 先建立契约和冻结输入,再开发复杂主题和发布自动化。
  4. 先可靠全量构建,再优化增量构建。
  5. 所有阶段必须有可运行产物和明确 Gate,不以“代码基本完成”作为完成标准。
  6. 旧 cms 只按白名单复用,移植前先写契约测试。

24.2 第一纵向切片必须扩大为“双入口切片”

原 V2 只验证 WXR 迁移,容易把平台做成迁移工具。修正后的第一切片同时验证:

路径 A:迁移入口

hesupipe WXR/Sitemap/媒体
→ Source Snapshot
→ 标准内容
→ URL/SEO
→ pilot-minimal
→ 静态构建
→ Gate
→ Preview

路径 B:新站入口

site:create
→ corporate-basic 蓝图
→ corporate-modern 主题
→ CSV/JSON 产品和新闻
→ 手工新增页面
→ 静态构建
→ Gate
→ Preview

两条路径必须汇合到同一套标准内容、页面、路由、构建和门禁模型,不允许维护两套构建器。

24.3 切片阶段暂不实现完整后台

第一切片先用 CLI 和最小内部 API 证明模型正确,再开发 Art Design Pro 管理后台。否则容易在模型不稳定时投入大量表格和表单页面。

CLI 不是临时脚本,必须调用正式 Application Service,并被后续 HTTP Controller 和后台复用。


25. 分阶段实施计划

以下按 4–5 人核心团队估算约 24–28 周;单开发者 + AI 辅助通常需要约 36–48 周。真实周期必须在阶段 0 根据试点数据和团队能力重新校准。

阶段 0:范围冻结与资产基线(第 1–2 周)

任务:

  • 确定一个 WordPress 迁移试点和一个全新站业务样板。
  • 获取经授权的 WXR、媒体、Sitemap、服务器规则和字段样本。
  • 固定旧 cms 代码 Commit 并运行现有测试。
  • 建立可复用资产白名单和禁止复制清单。
  • 锁定 ADR:ORM、Schema、对象存储、构建沙箱、部署目标。
  • 建立 Git、CI、依赖和敏感数据规则。

交付物:

  • 试点数据清单。
  • URL/SEO 初始基线。
  • 蓝图业务需求。
  • ADR 集合。
  • 风险登记和校准排期。

Gate M0:输入合法可用,两个切片入口范围明确,所有 P0 决策有负责人和截止时间。

阶段 1:工程底座与领域契约(第 3–5 周)

任务:

  • 初始化 pnpm Monorepo、TypeScript Strict、Lint、Test 和 CI。
  • 建立 PostgreSQL、Drizzle Migration 和数据库测试。
  • 定义 Site、Revision、Source、Blueprint、Theme、Page、Block、Route、Build 契约。
  • 建立数据库持久化 Job Runner、心跳和 stale 状态。
  • 建立本地文件 Storage Adapter。
  • 完成第一批契约测试和安全测试框架。

交付物:

  • 可运行 CLI/API Application Context。
  • 正式数据库迁移。
  • 契约包。
  • Job 和 Artifact 基础设施。

Gate M1:空库可一键迁移;核心约束落数据库;任务中断可识别;测试在 CI 稳定通过。

阶段 2:蓝图与全新建站最小链路(第 6–8 周)

任务:

  • 实现 Blueprint Manifest、校验、安装和回滚。
  • 实现 corporate-basic。
  • 实现内容类型、页面、模板、板块和菜单安装。
  • 实现 site:create、blueprint:list/install。
  • 实现 CSV/JSON 导入、映射预览和幂等。
  • 实现手工 content:add/publish。
  • 建立新站默认 URL/SEO 规则。

交付物:

  • 无旧站数据也能创建完整数据库站点。
  • 样例 CSV/JSON 成功导入产品和新闻。
  • 蓝图安装失败可完整回滚。

Gate M2:新站入口不包含任何 WordPress 假设;同一蓝图可安装到两个站点且数据隔离。

阶段 3:WordPress 迁移与映射链路(第 9–12 周)

任务:

  • Source Connection/Snapshot 和 Hash。
  • 流式 WXR Parser 和 WordPress Adapter。
  • Sitemap、媒体目录和来源记录。
  • HTML 清洗、短代码报告和字段映射。
  • current/published 双指针和导入幂等。
  • 导入报告、冲突和人工覆盖保护。
  • URL 注册表和旧路径证据。

交付物:

  • 真实试点可重复导入。
  • 第二次导入同快照不产生重复修订。
  • 导入后不会自动发布。
  • 不支持对象有明确清单和原因。

Gate M3:试点范围内所有对象有 created/updated/skipped/conflict/failed 明确结果;URL unresolved 有可执行清理计划。

阶段 4:主题、板块和静态构建(第 13–16 周)

任务:

  • Theme Manifest、Render Contract 和公共组件包。
  • pilot-minimal 和 corporate-modern 两套主题或预设。
  • Block Schema、Renderer 和版本迁移。
  • 冻结 Render Snapshot。
  • Astro 构建、Route/Asset/Build Manifest。
  • 自包含 Preview Server。
  • 相同输入可复现构建。

交付物:

  • 迁移站和新站共用一个构建管线。
  • 同一内容能被两套主题渲染。
  • 主题缺少 Renderer 时明确阻断。

Gate M4:禁止数据库、Seed 和网络进入构建;两次构建业务 Hash 一致;两个样板均可 HTTP 预览。

阶段 5:管理后台核心闭环(第 17–20 周)

任务:

  • 接入 Art Design Pro,清理多角色和演示功能。
  • 超管登录、MFA、会话和审计。
  • 新建网站向导。
  • 站点、蓝图、主题和环境页面。
  • 内容、页面、板块、菜单和媒体管理。
  • 导入、映射、冲突和报告页面。
  • URL、SEO、构建和预览页面。

交付物:

  • 超管不依赖 CLI 完成日常建站和内容运营。
  • Schema 驱动表单复用 Content/Block/Theme 配置。

Gate M5:超管通过 UI 完成“创建新站 → 导入产品 → 新增新闻 → 调整页面 → 构建预览”。

阶段 6:SEO 门禁、Release 和正式部署(第 21–24 周)

任务:

  • SEO 三方差异和自动门禁。
  • Redirect 图、Sitemap、死链和媒体检查。
  • Release、发布锁、不可变版本和回滚。
  • 实现一个正式 Deployment Adapter。
  • 生产临时入口和 HTTP 冒烟。
  • 备份、恢复、日志、指标和告警。

交付物:

  • 可发布、可回滚的正式 Release。
  • JSON/HTML 验收报告。
  • 恢复和回滚演练记录。

Gate M6:全部 P0 清零;P1 均修复或正式豁免;发布与回滚演练通过。

阶段 7:三类样板验收和稳定期(第 25–28 周)

任务:

  • 样板 A:WordPress 原路径迁移。
  • 样板 B:老内容进入新主题。
  • 样板 C:蓝图 + CSV/JSON + 手工内容的新站。
  • 最终差量、切站和生产监控。
  • 修复性能、可访问性、视觉和运维问题。
  • 整理运行手册和后续蓝图/主题开发指南。

Gate M7:三类样板全部通过独立验收;至少一个真实生产发布;完成一次真实或生产等价回滚。


26. 三类样板的验收标准

26.1 样板 A:旧站原路径迁移

  • WXR 范围内内容、分类和媒体全部有明确结果。
  • 当前已知 URL 全部有处置,unresolved=0。
  • 核心旧路径真实 HTTP 状态正确。
  • P0 SEO 差异为 0。
  • 导入不覆盖人工修改,不自动发布。
  • 控制面关闭后静态站仍正常运行。

26.2 样板 B:老内容换新主题

  • 不复制迁移适配器到主题。
  • 标准内容直接进入新模板和板块。
  • 主题兼容报告列出缺失字段和 Renderer。
  • 旧路径保持或有批准的一对一跳转。
  • 新视觉下内容、SEO 和内部链接完整。
  • 可切回前一主题 Release。

26.3 样板 C:全新站

  • 没有旧站、WXR 和历史 URL 也能创建。
  • corporate-basic 自动建立内容类型、页面、菜单和 SEO 默认值。
  • CSV/JSON 导入产品,后台手工新增新闻和页面。
  • 示例数据不误入生产。
  • 选择主题后可生成完整静态站并发布。

27. Definition of Done

一个功能只有同时满足以下条件才算完成:

  • 产品验收条件清晰并通过。
  • 数据库约束和迁移存在。
  • API/CLI/UI 使用同一 Application Service。
  • 正常、异常、权限和跨站隔离测试通过。
  • 日志中无 Secret 和敏感原始数据。
  • 长任务可取消、重试、超时和恢复。
  • 有操作说明、错误说明和必要运行手册。
  • 不依赖本地 Seed、隐式环境变量或开发者电脑状态。
  • CI 中 lint、typecheck、unit、integration 和相关 e2e 通过。
  • 关键变更有 ADR 或更新本文档。

站点达到可发布状态还必须满足:

  • Build Input 已冻结并有 Hash。
  • 全部门禁通过或有有效豁免。
  • Preview 已人工确认。
  • Release 和部署目标明确。
  • 回滚目标存在且完整。
  • 生产冒烟检查清单已准备。

28. 关键风险与控制

风险 后果 控制措施
只围绕 WXR 建模 新站功能被迫伪装成迁移 第一切片同时实现新站入口
把主题当蓝图 换主题导致内容结构混乱 蓝图、模板、主题独立版本化
任意 JSON 泛滥 后台、验证和升级失控 Schema、版本和数据库关键约束
导入自动发布 未审查内容上线 current/published 双指针
Seed fallback 发布演示数据 生产构建禁止 Seed,输入为空即失败
旧路径处理错误 SEO 和外链损失 URL 注册表、真实 HTTP 门禁
同一站并发发布 版本覆盖和混合产物 发布锁和不可变版本目录
主题重复业务逻辑 后续主题成本失控 四层复用和契约测试
页面编辑器过度自由 内容不可迁移、样式不可控 有限插槽和结构化板块
旧项目直接复制 把安全和一致性缺陷带入新系统 白名单移植、先测试后复用
媒体下载 SSRF/恶意文件 内网泄露或执行风险 出口限制、MIME 检测、配额和清洗
单超管账号丢失 平台无法操作 MFA、恢复码、离线恢复流程和备份
工期被主题定制吞噬 平台能力无法闭环 每站专属需求进入扩展包并控制范围
追求增量构建过早 缓存错误发布旧内容 V1 先可靠全量构建

29. 团队职责建议

职责 主要工作
产品/项目负责人 范围、试点、验收、变更控制
后端/平台工程 领域模型、API、Job、构建和发布
前端工程 Art Design Pro 后台和 Schema 表单
主题工程 Astro 主题、板块和公共展示组件
数据/迁移工程 来源盘点、适配器、映射和差异处理
QA/运维 门禁、E2E、部署、监控和恢复演练
设计 主题规范、响应式和组件视觉

单开发者 + AI 模式下,上述职责仍然存在,只是由同一人分阶段承担。应严格控制并行工作,每个阶段先完成 Gate 再进入下一阶段。


30. 项目治理与变更控制

30.1 决策记录

以下变更必须写 ADR:

  • 数据模型核心身份和修订语义。
  • 蓝图、主题和 Block 协议。
  • 构建输入和可复现策略。
  • 路由、Redirect 和部署映射。
  • 安全边界和 Secret 管理。
  • ORM、队列、存储和部署适配器变更。

30.2 范围变更

新增需求按以下分类:

  • P0:不做就不能安全上线。
  • P1:明显影响首版业务闭环。
  • P2:可进入 V1.1。
  • P3:长期候选。

任何新增主题专属功能都要先判断:

  1. 是否是公共数据或业务逻辑。
  2. 是否应成为通用 Block。
  3. 是否只属于主题展示。
  4. 是否应作为站点扩展包,而不是进入核心平台。

30.3 文档同步

实现与本文发生差异时,不能只改代码。必须更新本文或 ADR,并在发布说明中写出兼容影响和迁移方案。


31. 立即执行的前两周计划

第 1–2 天:冻结事实基线

  • 固定 D:\project\cms 可参考 Commit。
  • 在干净环境运行现有 lint、typecheck、unit、e2e 和 build。
  • 记录通过项、失败项和无法运行项。
  • 确认 D:\project\cms-one 为新架构主仓库。

第 3–4 天:准备双入口样本

  • 准备脱敏最小 WXR、Sitemap 和媒体样本。
  • 准备新站 products.csv、news.json 和品牌配置。
  • 定义两个样本预期页面、菜单、URL 和 SEO。

第 5–6 天:冻结核心契约

  • Site、Source Snapshot、Content Entry/Revision。
  • Blueprint、Page Template、Block Definition/Instance。
  • Route、SEO、Build Input 和 Theme Manifest。
  • 编写 ADR 和契约测试样例。

第 7–8 天:建立工程骨架

  • 初始化 Workspace、CI 和 TypeScript Strict。
  • 建立 PostgreSQL/Drizzle Migration。
  • 建立 API Standalone Context、CLI 和持久化 Job。
  • 建立 Artifact 和本地 Storage 目录约定。

第 9–10 天:做最小双入口证明

  • site:create 安装最小蓝图。
  • CSV 导入 2–3 个产品。
  • WXR 导入 2–3 条内容。
  • 两边都转换为同一内容模型。
  • 生成最小 Render Snapshot。
  • 用同一主题输出静态 HTML。

两周结束必须回答:

  1. 新站流程是否完全不依赖 WordPress 字段。
  2. 迁移内容和新内容是否真正进入同一模型。
  3. 蓝图、主题和页面模板边界是否清晰。
  4. 构建是否只读取冻结文件。
  5. 现有 cms 资产哪些能低风险复用。

如果以上任一问题答案是否定,不进入完整后台开发。


32. 立项前必须确认的事项

  • 第一迁移试点的真实数据授权和范围。
  • 第一全新站的业务类型、内容字段和设计目标。
  • 首个正式部署目标是 Nginx/SSH 还是 OSS/CDN。
  • 是否要求首版公网开放管理后台;若是,MFA 和安全基线进入 P0。
  • 表单、搜索、多语言和第三方统计的首版边界。
  • 两套主题是完全独立设计还是一个主题的两个预设。
  • 旧 URL 可允许的 Redirect 比例和 SEO 豁免审批方式。
  • 迁移完成后的 WordPress 是否下线、保留只读或继续短期差量。
  • 团队配置和可接受的首版周期。

这些事项影响排期,但不改变本文的核心架构方向。


33. 最终交付物

33.1 软件

  • SiteForge 超级管理员后台。
  • NestJS API、CLI 和 Worker。
  • PostgreSQL Schema 和迁移。
  • Blueprint SDK、Theme Runtime、Import SDK、Deployment SDK。
  • WordPress WXR、CSV、JSON、Sitemap 和媒体输入能力。
  • corporate-basic 蓝图。
  • 至少两套可验证主题或一套主题加一套明显差异化主题。
  • Astro 静态构建、Preview、Gate 和 Release。
  • 至少一个生产部署适配器。
  • Form API(若列为首版试点 P0)。

33.2 文档

  • 架构和 ADR。
  • Blueprint、Theme、Block 和 Adapter 开发规范。
  • WordPress 迁移手册。
  • 新站创建和内容运营手册。
  • 发布、回滚、备份和恢复手册。
  • 安全和 Secret 管理手册。
  • 测试报告、URL/SEO 报告和试点验收报告。

33.3 样板

  • 一个原路径 WordPress 静态迁移站。
  • 一个老内容换新主题的改版站。
  • 一个由蓝图和新数据生成的全新站。

34. 最终判断

按照本文实施后,SiteForge 将具备以下完整能力:

它既能把旧网站搬过来,
也能把旧内容装进全新设计,
还能完全不依赖旧站,从蓝图和新数据创建新网站;
随后继续在同一个后台维护内容,
通过统一的静态构建、SEO 门禁、发布和回滚体系长期运营。

这才是目标中的“网站生产工厂”。

原纵向切片 V2 的迁移、路由、构建和门禁设计可以保留,但必须按本文补入站点蓝图、全新建站、CSV/JSON 映射、页面/板块实例和双入口验收。若仍只完成 WXR → 静态站,最终只能得到优秀的迁移工具,不能得到完整的网站工厂。