Files
cms-SiteForge/docs/SiteForge_V2_Architecture.md
T

906 lines
42 KiB
Markdown
Raw Normal View History

# SiteForge 智能网站生产工厂
> **完整产品需求与技术架构方案(PRD + Architecture + Implementation Plan)**
> 版本:V2.0(对 V1.0“通用多站点迁移与静态建站平台”的定位升级)
> 日期:2026-10-21
> 状态:产品与研发规划版
> 适用:产品经理、设计师、前后端研发、测试、运维、Claude 等编程助手
---
## 0. 核心定义与产品定位
**SiteForge 不只是旧网站迁移工具,而是“网站工厂(Website Factory)”:以模板、数据、页面结构和站点配置为原材料,经过装配、构建、验证和发布,持续生产完全独立的网站。**
网站可以:
1. **旧站改造**:从 WordPress、其他 CMS、自研 PHP 或普通网站导入既有内容,选用全新主题,保留旧站 SEO 和 URL,重建设计不同的静态网站。
2. **模板建站**:没有旧站,选择行业模板,填入企业资料、Logo、产品、文章和媒体文件,直接形成新站。
3. **数据建站**:从 Excel/CSV/JSON/XML、API、数据库或图片资料批量导入新内容,自动建立内容类型和页面,匹配模板生成网站。
4. **自由建站**:从空白项目开始创建导航、页面、区块、数据集合、主题和页面规则;最终保存为可复用的新模板。
5. **混合建站**:上述方式可自由组合,例如“旧站文章 + 新 Excel 产品 + 新模板 + 自定义页面”。
统一原则:**内容和视觉彻底分离,迁移和新建使用同一个内容模型、页面装配器、静态构建器、质量检测及发布系统。**
### 0.1 产品成功标准
- 非迁移用户也能完整创建、编辑、构建并发布一个新网站。
- 旧站迁移不是复制旧视觉,而是按“内容映射 → 新主题 → 全新网站”装配。
- 同一份数据可以切换不同主题、重复构建;主题切换不得无故删除内容。
- 一份设计可以保存为模板;模板升级不能未经确认覆盖站点定制内容。
- 多网站独立运行、互不影响;输出静态文件后生产站不依赖中心平台在线。
- 迁移站保留需要保留的 URL、SEO、链接和媒体访问行为;全新站可自由制定 URL/SEO 策略。
- 导出物有真实 HTML/CSS/JS/媒体、必要的路由/重定向/服务器配置,而非只提供开发框架项目。
### 0.2 非目标与边界
- 不是承诺对任何公开 URL 一键获得不可见的后台、私有数据或完整业务代码。
- 不是将所有交互功能硬转为静态 HTML;账号、支付、订单、实时库存、复杂搜索等需要独立 API/服务。
- 不是初期一次性建成可对任意复杂页面精准拖拽设计的通用 Webflow 类编辑器。
- 不保证迁移后搜索排名零波动;系统负责风险降低、可追溯验证和监测。
---
## 1. 四大建站入口与混合生产工作流
| 模式 | 起始条件 | 用户主要步骤 | 输出 |
|---|---|---|---|
| A 旧站重建 | 有旧网站 | 识别旧站 → 导入内容/SEO/URL → 选主题 → 映射 → 预览 → 构建 → 发布 | 新设计的独立网站 |
| B 模板新建 | 无旧站 | 选行业模板 → 填公司信息 → 导入或新增内容 → 配置栏目 → 预览 → 发布 | 全新网站 |
| C 数据驱动 | 有 Excel/API/数据库 | 导入数据 → 字段映射 → 生成内容集合 → 选模板 → 自动建立列表/详情页 → 发布 | 数据驱动批量页面网站 |
| D 空白搭建 | 需要自主设计 | 创建站点 → 可视化组装页面 → 配置设计变量/数据 → 预览 → 发布 → 沉淀为模板 | 定制网站与可复用模板 |
### 1.1 “继续生产”能力
网站创建完后可继续:新增文章和产品、批量导入新数据、替换 Banner、维护多语言、增删栏目、修改 SEO、调整主题样式、升级组件、局部/全站重建、回滚到旧版本。**迁移任务完成不等于站点项目结束。**
### 1.2 三个关键产品动作
- **Create Site**:从空白、模板或克隆既有站点结构新建。
- **Import Content**:随时将旧站、文件、API 等数据导入现有站点,映射、去重、合并和校验。
- **Build & Publish**:将某一明确的数据版本 + 主题版本 + 站点配置打包成可追溯静态发布版本。
不能把“导入网站”与“创建网站”绑定成一对一:一个站点允许多个数据源,一个数据源也可按授权复用到多个站点。
---
## 2. 总体架构:三条输入管线、一个生产流水线
```mermaid
flowchart TB
subgraph Inputs[网站生产输入]
I1[旧站导入:WP/CMS/PHP/HTML]
I2[新内容导入:Excel/CSV/JSON/API/媒体]
I3[从零创建:内容编辑器/页面编辑器]
end
subgraph Core[SiteForge 网站工厂控制中心]
C1[通用内容中心 / 媒体中心]
C2[模板市场 / 主题设计系统]
C3[页面编辑器 / 页面装配规则]
C4[网站蓝图 Site Blueprint]
C5[URL / SEO / 多语言规则]
C6[任务引擎 / 版本 / 权限]
end
subgraph Pipeline[网站生产流水线]
P1[数据校验与字段映射]
P2[站点装配与路由解析]
P3[静态构建 HTML/CSS/JS]
P4[预览 / SEO / 功能 / 链接检查]
P5[发布 / ZIP 导出 / 回滚]
end
I1 --> P1
I2 --> P1
I3 --> C1
P1 --> C1
C1 --> C4
C2 --> C4
C3 --> C4
C5 --> C4
C6 --> C4
C4 --> P2 --> P3 --> P4 --> P5
P5 --> S[独立运行的网站 A / B / C ...]
```
### 2.1 控制面与生产面分离
控制面:SiteForge 后台、API、数据/媒体资产、模板、采集、构建任务、发布/审核。生产面:各网站独立的静态文件/CDN/Nginx 与可选独立业务 API。**线上网站运行不要求 SiteForge API 或数据库常驻可用。**
### 2.2 “网站”并不是“主题”
一个网站由以下因素组合:
```
Website Release =
Site Configuration
+ Site Blueprint (页面/栏目/菜单/区块/路由规则)
+ Theme & Component Version
+ Content Snapshot
+ Asset Snapshot
+ SEO & Redirect Rules
+ Environment & Build Settings
```
这是保证可重复构建、主题更换和版本回滚的核心公式。
---
## 3. 关键领域模型(必须从第一天设计好)
### 3.1 Site(站点)
唯一站点 ID、站点类型、语言/地区、域名、环境、数据源、主题引用、权限、发布策略。
### 3.2 Site Blueprint(网站蓝图)
蓝图描述**网站结构而不是内容本身**:
- 页面树:主页、关于我们、联系方式、服务、产品、新闻、品牌、活动等。
- 导航树:顶部主导航、Mega Menu、页脚、移动导航。
- 页面类型:普通静态页、内容集合列表、集合详情、分类聚合、专题页。
- 路由规则:固定页 slug、列表分页、产品 URL 格式、语言前缀。
- SEO 规则:title 模板、canonical、sitemap/noindex、结构化数据类型。
- 区块编排:Banner、产品网格、优势、表单、统计、FAQ、CTA 等。
- 设计变量:品牌色、字体、布局宽度、间距、圆角、响应式断点。
- 模板绑定:哪个页面类型使用哪套布局及组件。
- 功能扩展:搜索、询盘、表单、在线聊天、外部 API 等。
站点蓝图可以从模板初始化,也可以由编辑器独立创建;保存之后属于站点自身,主题升级不得悄悄覆盖人工更改。
### 3.3 Content Type(内容类型)与 Entry(内容条目)
内容中心不能硬编码只支持“文章”和“产品”,应支持动态类型:
- 默认类型:Page、Post、Product、Category、Brand、Service、Case、FAQ、Team、Download。
- 自定义内容类型:如汽车的 Vehicle、工业管材的 Pipe、房地产的 Property。
- 字段定义:短文本、富文本、数字、布尔、日期、枚举、关系、数组、媒体、SEO 字段、多语言字段、引用。
- 校验规则:是否必填、唯一性、格式、单位、可搜索/筛选、跨字段规则。
- 数据状态:draft / review / published / archived;版本和来源可追踪。
### 3.4 Theme(主题)/ Template(页面模板)/ Component(组件)
- **主题 Theme**:完整设计风格及组件集合、页面模板、响应式规则、设计 Token。
- **页面模板 Page Template**:例如首页、产品列表、产品详情、文章详情、专题落地页。
- **组件 Component**:Hero、图片网格、产品卡、参数表、图文交错、导航栏、页脚等。
- **主题实例 Theme Instance**:某站点在主题基础上的参数覆盖与自定义区块配置。
### 3.5 Route Registry(路由注册表)
一切最终发布 URL 的唯一事实源:`site_id + method + normalized_path + locale + route_behavior`;必须记录来源及冲突处理,不能仅由标题推断路径。
---
## 4. 模板工厂:不仅选模板,还要生产模板
### 4.1 模板分类
- 行业模板:汽车出口、工业品、制造业、外贸 B2B、企业介绍、服务类、资讯类。
- 页面模板:首页、列表、详情、关于、联系、新闻、案例、FAQ、落地专题等。
- 区块库:Hero、统计、产品参数、网格、时间线、客户评价、团队、展会等。
- 布局方案:顶部导航、侧边导航、全宽、多列、自适应等。
### 4.2 模板选择体验
每个主题展示 PC/移动端预览、适合行业、支持的内容类型、内置页面数量、菜单形态和可编辑范围。选择主题后运行 `compatibilityCheck`,提示当前内容是否满足主题必需字段,并提供字段映射或替代组件选项。
### 4.3 模板来源
1. 平台预置主题。
2. 开发人员以标准主题 SDK 编写并注册主题。
3. 在设计器中制作页面,保存为模板或区块。
4. 从现有网站**复制结构/设计配置**作为新项目起点,不自动复制私有数据。
### 4.4 防止主题与数据耦合
主题只能根据语义接口取数据,例如 `products.featured`、`company.name`、`posts.latest`。不能把某个具体产品、域名或 WordPress ID 硬编码进主题组件。
### 4.5 模板升级
主题使用不可变版本号。站点自行选择是否升级;升级前进行数据兼容性检测和区块差异预览;不支持自动合并的站点私有修改应手动解决。
---
## 5. 可视化建站编辑器(分级实现)
### 5.1 编辑器 V1:区块式编辑
支持:增删页面、排列标准区块、替换组件样式、设定图片/文案/数据引用、编辑导航与页脚、调整设计 Token、切换 PC/平板/手机预览、草稿/审核/发布。
### 5.2 编辑器 V2:结构化可视化编排
支持:嵌套容器、列布局、响应式属性、条件显示、组件插槽、集合绑定、重复列表、页面模板编辑和全站设计系统管理。
### 5.3 编辑器 V3(可选):高级自由设计
高级拖拽、交互动效、定制脚本、组件市场等;需严格控制任意 HTML/JS 注入与主题兼容问题。
**不建议 V1 开发任意像素拖拽引擎。** 先用区块式编辑器建立高复用度和稳定构建体验;高级主题仍允许开发者编写独立代码。
### 5.4 主题自由度分级
- L1 配置型:换色、Logo、素材和文案即可上线。
- L2 区块型:调整首页和内页的组件排列及内容映射。
- L3 高级定制型:独立开发主题,完全自定义 HTML、样式、交互和布局。
这避免为了统一拖拽而让不同网站“长得一样”。
---
## 6. 内容工厂:手动、批量、API 与旧站多源输入
### 6.1 数据输入管道
| 输入渠道 | 典型数据 | 数据处理 |
|---|---|---|
| 后台手动新增 | 文章、产品、服务、页面 | 表单编辑和字段校验 |
| Excel / CSV | 车型、价格、参数、批量产品 | 预览字段、列映射、类型推断、增量更新 |
| JSON / XML | 第三方结构化数据 | schema 映射、字段转换、关系解析 |
| API / Webhook | ERP、CRM、内部商品系统 | 授权连接、定时/手动同步、冲突策略 |
| SQL / 备份 | 原数据库内容 | 隔离解析、适配映射、数据脱敏 |
| WordPress XML/API | 文章、产品、分类、meta | WordPress 插件与字段适配器 |
| 通用网站抓取 | 公开页面、SEO、图片、菜单 | 页面发现、JS 渲染、去噪和人工确认 |
| 媒体 ZIP / 对象存储 | 图片、PDF、视频 | 去重、批量命名和资源引用映射 |
### 6.2 通用导入工作台
选择数据源 → 预览 → 识别内容类型 → 字段映射 → 数据清洗 → 去重/冲突策略 → 导入模拟运行(dry-run) → 确认入库 → 验证关联与资源 → 保留导入快照。
支持“仅新增”“按唯一键更新”“新增+更新”“人工审核冲突”;**默认不得直接覆盖人工编辑过的字段**。保留来源字段值、最新导入值、人工覆盖值及优先级。
### 6.3 内容与页面的区别
- 录入 1000 个车型,不意味着手工建 1000 个页面。
- 车型都是 `Vehicle` 内容条目;系统采用一个 `vehicle-detail` 页面模板批量生成 1000 个对应 URL。
- 新增车型后自动生成新详情页并更新分类列表、筛选数据、站点地图与内部链接。
### 6.4 媒体中心
- 原图存储,派生多尺寸格式;保留 alt、文件名、来源 URL 和使用关系。
- 旧站媒体需维护原路径映射,必要时保留原 URL 的资源响应。
- 批量上传、图库、资源去重、视频外链、PDF 和下载附件。
- 资源删除时检查使用关系;不能造成已上线页面引用失效。
---
## 7. 网站装配引擎(全产品最核心的技术)
### 7.1 输入
`site_blueprint.json + theme@version + content_snapshot + asset_manifest + route_registry + SEO_policy`
### 7.2 核心过程
1. 验证主题与内容类型是否兼容。
2. 解析页面树与导航,构造页面上下文。
3. 读取数据绑定配置,生成列表和详情集合。
4. 根据 URL/语言规则生成页面路径,检测重复与冲突。
5. 按页面模板渲染静态 HTML,并生成 CSS/JS。
6. 生成 sitemap、robots、结构化数据和必要的重定向配置。
7. 执行页面链接、SEO、媒体、性能及功能验证。
8. 形成不可变构建产物、版本元数据和差异报告。
### 7.3 装配示例:汽车站
- 公司信息绑定 `company.*`。
- 首页精选车型绑定 `vehicles where featured=true`。
- 品牌列表绑定 `brands`,每个品牌生成 `/brands/{slug}/`。
- 车型详情绑定 `vehicles`,生成 `/models/{slug}/` 或从旧站注册表获取原有 URL。
- 新闻内容绑定 `posts`,自动生成新闻列表和详情。
- PC 和移动端页面由同一语义内容驱动,但主题可采用不同响应式布局。
### 7.4 蓝图 JSON 示例
```json
{
"siteKey": "export-auto-demo",
"mode": "migration-redesign",
"theme": {"id": "automotive-premium", "version": "1.4.0"},
"locale": "en",
"designTokens": {"primaryColor": "#1765B2", "contentWidth": "1280px"},
"pages": [
{"kind": "static", "path": "/", "template": "home"},
{"kind": "collection", "path": "/products/", "template": "product-list", "contentType": "vehicle"},
{"kind": "entry", "template": "product-detail", "contentType": "vehicle", "routeSource": "registry"}
],
"navigation": {"header": ["/", "/products/", "/about-us/", "/contact/"]},
"seoPolicy": "preserve-imported"
}
```
### 7.5 主题数据绑定示例
```json
{
"template": "home",
"slots": {
"hero": {"type": "Hero", "bindings": {"title": "site.homeHero.title", "image": "site.homeHero.image"}},
"featured": {"type": "VehicleGrid", "source": {"contentType": "vehicle", "filter": {"featured": true}, "limit": 8}},
"news": {"type": "LatestPosts", "source": {"contentType": "post", "limit": 3}}
}
}
```
规则应由受控 schema/查询 DSL 解释,**禁止把任意用户输入作为数据库查询或 JS/SQL 执行**。
---
## 8. 旧站迁移子系统(Website Factory 的一个入口)
### 8.1 兼容范围与优先顺序
P0:WordPress(REST API + WXR XML + SQL + `wp-content`)、HTML 静态站、普通 PHP 公开站。P1:Drupal、Joomla、自定义 CMS、Vue/React 渲染站。P2:电商、会员、复杂业务站专用适配器。
### 8.2 自动扫描
抓取 robots、sitemap、内部链接、菜单、页面、分页、媒体和 head SEO;识别 CMS、页面类型、动态表单、语言、状态码和 canonical;得到带来源、置信度和异常标记的扫描清单。
### 8.3 迁移独有工作流
`Old Site → Snapshot → Extract → Normalize → Map To Theme → Route/SEO Preserve → Preview/QA → Cutover`
1. 建立旧站不可变快照,记录内容、URL、响应状态、SEO、媒体。
2. 能取得权限时优先组合 API/备份/网页数据,不能取得权限时抓取公开内容并标记未知项。
3. 将旧站类型映射到统一类型,例如 WooCommerce product → Product / ACF car → Vehicle。
4. 让用户选择新的视觉主题,映射旧数据字段到新页面组件。
5. 保留旧 URL 注册表、历史 301、canonical 和 SEO 元数据;异常需明示审核。
6. 禁止新主题自动重写旧路由。新增加的内容可按新建路由规则生成。
7. 预览视觉不同的新站并以旧站数据基线自动验收。
8. 发布时注意 DNS、CDN、缓存、预览 noindex、必要 API 以及回滚。
9. 上线后追踪 404、搜索抓取和流量变化;上线前后还可进行增量同步直至冻结旧站写入。
### 8.4 关键事实
公开页面采集无法保证后台未展示字段完整;网站登录、支付、购物车及实时功能不能纯静态复制;要在扫描报告中明确“可自动”“需授权”“需开发扩展”“不迁移”四种处置结果。
---
## 9. 新站创建子系统(与迁移同等优先级)
### 9.1 模板新建流程
1. 输入网站名称、主语言、品牌信息、目标行业、域名(可延后绑定)。
2. 选择模板并预览 PC/移动端。
3. 从模板生成站点蓝图、页面树、导航和内容类型定义。
4. 进入引导式公司资料表:名称、Logo、联系方式、社媒、地址、企业简介。
5. 手工或批量添加产品、文章、品牌、图片;主题根据字段绑定渲染页面。
6. 修改页面区块、主色、字体和导航,设置联系表单目标。
7. 自动生成页面、站点地图与 SEO 默认值;检查内容完整性。
8. 预览、发布、绑定域名;未来继续从后台更新。
### 9.2 空白新建流程
1. 创建站点与内容类型。
2. 配置导航/页脚和布局框架。
3. 通过区块编辑器建立页面和模板。
4. 建立动态集合页及详情路由规则。
5. 绑定内容和媒体,预览并发布。
6. 经审核将该站的可复用结构导出为主题/站点模板。
### 9.3 导入内容建站流程
1. 上传 `vehicles.xlsx`,识别标题、品牌、图片、价格、参数等。
2. 创建或选择 `Vehicle` 内容类型,建立字段映射、唯一键和数据校验。
3. 选择适合的产品站主题;若字段不足,提示补齐,而不是凭空生成。
4. 由车型集合创建列表、详情、品牌聚合页,生成对应 URL。
5. 配置通用企业资料、SEO、导航,发布成完整新站。
### 9.4 主题替换机制
切换主题时预检查必需字段、页面类型、交互能力、导航结构及 URL 兼容性。允许在临时预览环境试装,保留旧主题和站点蓝图版本;确认后切换,不删除原内容和媒体。
---
## 10. URL 与 SEO:区分“迁移”和“新建”两种政策
### 10.1 迁移站(Preserve Mode)
- 以实际旧站最终有效访问行为为基线,保留用户可见有效 URL、状态码和所需重定向链。
- Title、Description、Canonical、Robots、Hreflang、JSON-LD、Open Graph、图片 alt、内链和 sitemap 做差异比对。
- 旧 URL 到新构建产物一对一登记,包含中文路径、大小写、尾部斜杠、`.html`、分页、文件、查询参数规则。
- 404 处理必须区分原本无效和新迁移导致;如果页面已批准下线,应设置合适的 301/410 行为。
- 允许设计变化,但不能因使用新模板悄悄改变原 SEO/URL。
### 10.2 新站(Generate Mode)
- 按站点定义 slug 策略和 URL 规则;允许人工指定覆盖。
- 使用 SEO 默认模板,例如 `{product.name} | {site.name}`,并提示检查重复标题/空描述。
- 自动生成 robots、sitemap、Open Graph、必要的 JSON-LD 和 canonical。
- 多语言模式需完整管理 locale URL、翻译关联和 hreflang。
- 预览域名必须鉴权并禁止搜索索引。
### 10.3 混合模式
来源于旧站的内容使用 Preserve URL,新增内容使用 Generate URL;注册表统一检查冲突。**不能简单设置一个整站 `preserve=true` 就忽略新内容路径生成。**
### 10.4 质量门禁
迁移站关键 URL 和 SEO 的未批准差异必须阻止发布;新站的门禁主要是 URL 冲突、重复规范地址、无效内链、关键必填字段缺失和资源失效。
---
## 11. 管理后台信息架构(建议菜单)
```
SiteForge
├── 工作台 Dashboard
│ ├── 网站数量 / 最近发布 / 失败任务 / 风险
│ └── 快速操作:新建网站 / 导入内容 / 创建模板
├── 网站工厂
│ ├── 所有网站
│ ├── 创建网站向导(空白 / 模板 / 旧站 / 数据)
│ ├── 网站蓝图 / 页面树 / 菜单 / 域名
│ └── 预览 / 历史版本 / 克隆结构
├── 内容中心
│ ├── 内容类型设计器
│ ├── 文章 / 产品 / 自定义集合
│ ├── 公司资料 / 全局数据
│ ├── 数据导入与同步
│ └── 媒体资源库
├── 设计中心
│ ├── 模板库 / 主题库
│ ├── 页面模板 / 区块库
│ ├── 页面编辑器
│ ├── 全站设计 Token
│ └── 自定义主题注册与版本
├── 迁移中心
│ ├── 网站技术扫描
│ ├── WordPress / CMS 导入
│ ├── 字段映射 / 旧站快照
│ ├── URL / SEO 基线
│ └── 迁移差异报告
├── 构建与发布
│ ├── 构建任务 / 预览
│ ├── 自动验收与报告
│ ├── 发布审批 / 目标服务器
│ ├── ZIP 导出 / 历史版本
│ └── 回滚 / CDN 缓存刷新
└── 系统设置
├── 用户 / 团队 / 角色
├── API 密钥 / 数据源凭证
├── 适配器 / 扩展服务
├── 审计日志 / 告警
└── 存储 / 域名 / 环境
```
### 11.1 新建网站首页建议
四个同级入口卡片:**旧站改造、使用模板新建、导入数据建站、空白建站**。不要把“迁移”置于唯一入口,也不要把“选择模板”藏在迁移流程中。
### 11.2 网站内部工作台
概览 → 内容 → 页面 → 设计 → SEO/路由 → 预览 → 发布 → 设置。便于独立运营每个网站,不要求管理员理解数据仓库和构建细节。
---
## 12. 推荐技术选型与研发边界
| 部分 | 推荐 | 备注 |
|---|---|---|
| 后台界面 | Vue 3 + TypeScript + Element Plus / Art Design Pro | 多站点、内容编辑、区块页面编辑器 |
| 核心 API | Python FastAPI + Pydantic + SQLAlchemy | 复用 Python 采集、数据处理和内部工程经验 |
| 异步任务 | Celery + Redis(或 Dramatiq) | 采集、媒体、导入、同步、质量任务 |
| 数据库 | PostgreSQL | JSONB 扩展字段、关系表和审计日志 |
| 采集服务 | Python httpx/Scrapy + Playwright | SSR/动态页面扫描与插件适配 |
| 模板及静态生成 | Astro + TypeScript/Node Worker | 主题组件、静态页面编译、增量/全量构建 |
| 资产存储 | S3 兼容对象存储/OSS + 本地缓存 | 原图、附件、站点版本和静态包 |
| 部署 | Nginx / 对象存储 + CDN / SSH 或 Git 工作流 | 独立站交付和可回滚 |
| 任务与日志 | PostgreSQL + Redis + 集中日志 | 可追踪的导入和发布作业 |
| 运行 | Docker Compose 首选 | 后期再按规模拆分服务 |
**为什么不强制全部使用一种语言**:数据采集/规范化适合 Python;静态主题的现代前端生态适合 TypeScript/Astro。通过版本化 JSON 契约连接两个 Worker,避免牺牲网站的设计自由度。若团队对 NestJS 更熟,也可替换 API 层,不影响领域模型和构建协议。
### 12.1 部署架构
- API、PostgreSQL、Redis、导入 Worker、构建 Worker、管理前端、对象存储等分别通过容器管理。
- 每个网站生成独立不可变 `release_id` 的产物并可单独导出、上传和回滚。
- 为不同域名、地区和站点提供独立构建与部署配置。
- 预览站点与生产站点隔离,预览授权、禁止索引。
---
## 13. 数据库详细方案
### 13.1 数据库分域
**组织与权限**:`organizations`、`users`、`memberships`、`roles`、`permissions`。
**网站与蓝图**:`sites`、`site_environments`、`site_blueprints`、`site_settings`、`page_nodes`、`navigation_menus`、`navigation_items`、`site_domains`。
**内容模型**:`content_types`、`field_definitions`、`content_entries`、`entry_versions`、`entry_relations`、`content_localizations`、`global_entries`。
**媒体**:`media_assets`、`media_variants`、`media_references`、`media_source_urls`。
**模板与组件**:`themes`、`theme_versions`、`page_templates`、`component_definitions`、`component_instances`、`design_tokens`、`site_theme_bindings`。
**数据输入与适配器**:`data_sources`、`adapter_definitions`、`import_jobs`、`import_items`、`field_mappings`、`sync_policies`、`source_snapshots`、`source_identity_map`。
**URL 与 SEO**:`routes`、`redirect_rules`、`seo_records`、`seo_snapshots`、`link_checks`、`route_diffs`。
**构建发布**:`build_jobs`、`build_artifacts`、`releases`、`deployments`、`quality_reports`、`audit_events`。
### 13.2 SQL 示意
```sql
CREATE TABLE sites (
id UUID PRIMARY KEY,
organization_id UUID NOT NULL,
name TEXT NOT NULL,
site_key TEXT NOT NULL,
creation_mode TEXT NOT NULL CHECK (creation_mode IN
('blank','template','migration','data_import','clone_structure')),
default_locale TEXT NOT NULL DEFAULT 'en',
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
UNIQUE (organization_id, site_key)
);
CREATE TABLE content_types (
id UUID PRIMARY KEY,
site_id UUID NOT NULL REFERENCES sites(id),
type_key TEXT NOT NULL,
schema_json JSONB NOT NULL,
UNIQUE (site_id, type_key)
);
CREATE TABLE content_entries (
id UUID PRIMARY KEY,
site_id UUID NOT NULL REFERENCES sites(id),
content_type_id UUID NOT NULL REFERENCES content_types(id),
source_identity TEXT,
slug TEXT,
locale TEXT NOT NULL DEFAULT 'en',
status TEXT NOT NULL DEFAULT 'draft',
data_json JSONB NOT NULL,
version INTEGER NOT NULL DEFAULT 1,
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE TABLE site_blueprints (
id UUID PRIMARY KEY,
site_id UUID NOT NULL REFERENCES sites(id),
revision INTEGER NOT NULL,
blueprint_json JSONB NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
UNIQUE (site_id, revision)
);
CREATE TABLE routes (
id UUID PRIMARY KEY,
site_id UUID NOT NULL REFERENCES sites(id),
locale TEXT NOT NULL,
path TEXT NOT NULL,
behavior TEXT NOT NULL, -- render | redirect | gone | proxy
target_entry_id UUID NULL REFERENCES content_entries(id),
target_url TEXT NULL,
source_kind TEXT NOT NULL, -- imported | generated | manual
UNIQUE (site_id, locale, path)
);
CREATE TABLE build_jobs (
id UUID PRIMARY KEY,
site_id UUID NOT NULL REFERENCES sites(id),
blueprint_revision INTEGER NOT NULL,
theme_version TEXT NOT NULL,
input_manifest JSONB NOT NULL,
status TEXT NOT NULL,
started_at TIMESTAMPTZ,
finished_at TIMESTAMPTZ
);
```
数据库 DDL 只是结构示意;正式实现应补全租户隔离策略、外键/索引、关系类型、软删、版本表、迁移脚本和审计字段。`source_identity_map` 不应在跨数据源之间简单依赖 slug 去重。
### 13.3 数据治理约束
- 以 `organization_id + site_id` 强制作用域隔离,查询接口必须实现授权校验。
- 导入前保存 raw source;标准化后保留原来源与变更来源。
- 使用内容版本快照支持回滚和差异查看。
- 记录手动字段覆盖,不允许重导入无声覆盖。
- 涉及多语言、复杂关系、复用媒体时,不用一张任意 JSONB 表取代所有关系模型。
---
## 14. 核心 API 契约(示意)
```text
POST /api/sites # 建立网站;body.creationMode
GET /api/sites # 站点清单
GET /api/sites/{siteId}
POST /api/sites/{siteId}/clone-structure
GET /api/themes # 主题库
GET /api/themes/{themeId}/versions
POST /api/sites/{siteId}/theme/preview # 试装主题/兼容性检查
POST /api/sites/{siteId}/theme/activate
GET /api/sites/{siteId}/blueprint
PUT /api/sites/{siteId}/blueprint # 乐观锁 revision
GET /api/sites/{siteId}/content-types
POST /api/sites/{siteId}/content-types
GET /api/sites/{siteId}/entries
POST /api/sites/{siteId}/entries
PATCH /api/sites/{siteId}/entries/{entryId}
POST /api/sites/{siteId}/imports # 文件/API/CMS/旧站导入
POST /api/imports/{jobId}/dry-run
POST /api/imports/{jobId}/commit
GET /api/imports/{jobId}/conflicts
GET /api/sites/{siteId}/routes
GET /api/sites/{siteId}/seo-audit
POST /api/sites/{siteId}/builds
GET /api/builds/{buildId}
POST /api/sites/{siteId}/releases/{releaseId}/publish
POST /api/sites/{siteId}/deployments/{deployId}/rollback
GET /api/sites/{siteId}/quality-reports
```
### 14.1 任务状态机
`created → queued → running → needs_review | failed | completed`;构建验收后再从 `completed` 经 `approved → published`,允许取消、重试、失败恢复,但每个状态转换须有审计记录。
### 14.2 构建契约
Node/Astro 构建 Worker 只接受经过签名/授权访问的不可变输入 manifest,输出静态包路径、构建报告、内容 hash、资源清单和验收结果;不要将数据库直接暴露给静态构建主题代码。
---
## 15. 质量验收体系(按建站模式执行)
### 15.1 通用验收
- 所有必需页面可访问、无冲突路由、没有意外 404/5xx。
- 内容、分类、关联、图片和附件链接完整;过滤 XSS 等不可信脚本。
- PC / 移动端核心页面无溢出、错位和严重布局问题。
- sitemap、robots、canonical 与发布目标域名一致。
- 站点预览不被搜索引擎收录,正式站按配置开放索引。
- 表单、询盘、导航、搜索等启用功能经过实际测试。
- 发布包可在隔离环境部署并独立访问;能回滚。
### 15.2 迁移专用验收
- 旧站已发现的有效 URL 都有一致访问或批准例外;关键路径的未批准变化阻断发布。
- SEO 标题、描述、canonical、robots、hreflang 等做旧/新对照。
- 产品/文章/页面数与旧站基线差异有解释;不可获取内容明确列出。
- 资源与重定向规则逐项校验;上线后持续关注抓取和错误。
### 15.3 新站专用验收
- 必填企业信息、Logo、联系路径和站点语言完整。
- 集合列表与详情页数量正确,新增内容可以重新生成网页。
- SEO 自动生成规则没有导致大量重复标题或无意义内容。
- 所选模板适用内容字段,缺失信息不能通过臆造补全。
### 15.4 验收报告分级
`BLOCKER`(必须解决)/ `WARNING`(可人工批准)/ `INFO`。不要把“页面加载成功”视作“内容迁移完整”。
---
## 16. 构建、部署、静态导出与持续更新
### 16.1 全量与局部构建
V1 可先全量构建保证正确性;V2 根据内容变化计算影响依赖:更新车型 → 对应详情、分类、品牌列表、首页精选和 sitemap 等重建。依赖图要可追踪,以免漏刷引用页。
### 16.2 交付格式
```
release-2026-10-21-a1b2/
├── public/
│ ├── index.html
│ ├── about-us/index.html
│ ├── products/index.html
│ ├── products/example/index.html
│ ├── assets/...
│ ├── sitemap.xml
│ └── robots.txt
├── server/
│ ├── nginx.conf.example
│ └── redirects.json
├── manifest.json
├── quality-report.json
└── deployment-notes.md
```
旧站存在 `.html`、尾斜杠与目录结构差异时,按照路由注册表选择适当静态目录或 Web 服务器规则;**输出文件路径本身不代表 HTTP 访问语义自动等同**,必须经过实际服务器验收。
### 16.3 部署策略
- 预览 / staging / production 三级环境,可选择简化为 preview + production。
- 产物不可变、版本化;原子切换部署;媒体缓存和 HTML 缓存采用不同策略。
- 支持 ZIP 下载、SSH/SFTP、Git CI、对象存储 + CDN;不同站点独立域名和缓存。
- 发布操作与回滚操作留存操作人、时间、版本和差异。
### 16.4 外部服务扩展
表单、询盘、搜索、评论、登录等由独立功能适配器负责;主题仅通过公开的组件/客户端 SDK 调用,避免各站重复实现且不把平台后台变成生产站依赖。
---
## 17. 安全、权限、成本与可维护性
- **采集 SSRF**:阻断内部 IP、云元数据地址、敏感主机及重定向跳转;抓取速率限制、URL 白名单、robots 与站点使用权限审查。
- **文件安全**:ZIP 解压路径穿越、恶意 HTML/JS/PHP、上传扩展名、MIME、体积限制与资源扫描。
- **数据隔离**:租户、站点、内容、媒体、API 凭证严格隔离,导出权限与发布权限分离。
- **主题安全**:主题依赖锁定、审核第三方组件、禁止把未审核用户表达式转换为运行代码。
- **SEO 安全**:导入外站数据时不能盲目继承失效域名 canonical/跳转目标;必须判别并显示冲突。
- **构建安全**:构建 Worker 沙箱、资源/CPU/时间限制、审计命令、脱离机密生产凭证。
- **版本安全**:导入快照、内容版本、主题版本、发布版本皆可追溯与恢复。
- **数据备份**:数据库备份、媒体/源快照、构建物及密钥轮换政策。
---
## 18. 开发路线图:从最小“网站工厂”开始
### 阶段 0 — 架构与样本验证(建议 2–3 周)
成果:Site Blueprint schema、内容类型/字段协议、主题 manifest、路由引擎规则、导入/构建 JSON 契约、站点项目 UI 原型;准备 3 个试点样本(WordPress 迁移、新站模板、新数据批量导入)。
### 阶段 1 — MVP 网站工厂(建议 6–10 周)
**必须同时具备“新建”和“迁移”两条路径。**
- 站点项目管理、主题目录(至少两套不同设计)、站点蓝图。
- 内容模型(页面/文章/产品/分类、可扩展字段)、媒体上传与基础编辑。
- 模板新建、CSV/Excel 导入、WordPress 核心内容导入。
- 页面装配/静态构建、基本 URL/SEO 模式、预览与 ZIP 导出。
- 自动验收、单站版本管理。
验收:同一系统能生产一个无旧站的新网站和一个 WP 迁移重建网站;两站视觉结构不同且可独立访问。
### 阶段 2 — 可规模化多站点运营(建议 6–10 周)
- 通用网站爬虫与插件适配器、字段映射工作台。
- 主题兼容性检测、区块式编辑器、页面/菜单可视化设置。
- 增量导入、媒体处理、版本化部署与一键回滚。
- URL/SEO 完整旧新站差异报告、批量质量门禁。
- 多站点、多权限、多环境和站点克隆结构。
验收:至少一个非 WordPress 站可迁移,模板与数据独立升级可运行。
### 阶段 3 — 完整模板工厂与自动化(按实际业务决定)
- 可视化页面模板编辑、组合式区块库。
- 自定义主题 SDK 和内部主题市场、模板版本升级迁移。
- API 数据同步、任务计划、依赖图增量构建。
- AI 内容分类、字段匹配和页面布局建议(人工审核)。
- 更多 CMS / ERP 适配器和复杂组件。
> 时间均为粗略研发规划区间,不是工期承诺;应基于团队人数、模板复杂度、实际旧站数据和试点验收调整。
---
## 19. 研发团队协作与目录建议
```text
siteforge/
├── apps/
│ ├── admin-web/ # Vue 管理后台
│ └── api/ # FastAPI 主服务
├── workers/
│ ├── imports/ # 导入与数据清洗
│ ├── crawler/ # 旧站抓取和 CMS 适配
│ ├── media/ # 媒体处理
│ ├── builder/ # Astro 构建服务
│ └── qa/ # URL/SEO/功能验收
├── packages/
│ ├── blueprint-schema/ # 站点蓝图协议
│ ├── content-schema/ # 内容与字段协议
│ ├── adapter-sdk/ # 数据源接入接口
│ ├── theme-sdk/ # 主题数据绑定/组件接口
│ ├── route-engine/ # 路由规则与映射
│ └── build-contract/ # 输入/输出 manifest
├── themes/
│ ├── corporate-clean/
│ ├── automotive-premium/
│ └── industrial-b2b/
├── migrations/ # 数据库演进
├── docs/ # PRD、ADR、API、模板规范
├── tests/ # 完整端到端样本
└── infra/ # Docker、Nginx、CDN、CI
```
### 19.1 设计/数据/研发协作界面
- 设计师交付主题原型与组件规范。
- 研发把组件封装成可配置主题,声明需要哪些数据字段。
- 内容人员录入内容和映射字段,不需修改代码。
- 项目负责人检查预览并发布。
- 可选开发人员继续以 SDK 开发特殊功能,保持独立品牌差异。
### 19.2 文档最小集合
PRD、站点蓝图 JSON Schema、Theme Manifest、组件数据绑定规范、适配器 SDK、数据模型 ERD、API OpenAPI、任务状态机、部署/回滚手册、验收测试用例。
---
## 20. 首批试点与详细验收用例
### 试点 A:旧 WordPress 汽车网站 → 新汽车主题
提供 WordPress XML + SQL/媒体(若可用)+ 网站 URL;输出文章/车型/品牌/分类和 SEO;选择全新汽车主题;旧站现存核心 URL 不改变;首页/品牌/车型详情样式与旧站不同;确认可离线发布。
### 试点 B:新建工业品网站(无任何旧站)
选择工业主题 → 添加公司 Logo/简介/联系方式 → 批量上传管材 Excel 和图片 → 自动生成产品分类与详情 → 配置联系页面 → 预览 → 以纯静态文件发布。
### 试点 C:已有网站 + 新数据混合
在 A 项目后续导入新一批产品 CSV:仅新增/更新相应产品,不覆盖旧文章与人工编辑;新增页面按新规则生成路由;原迁移 URL 不改变;系统更新受影响页面与 sitemap。
### 试点 D:空白页面 → 保存为模板 → 复用到第二个网站
从空白建立官网页面树和首页组件结构,绑定内容字段,保存为可复用模板;新项目使用该模板和另一套公司资料生成不同网站,不复制试点的私有内容。
**上述四个试点是网站工厂成功与否的核心验收,不允许用“只完成 WP 迁移”代替。**
---
## 21. 风险与关键决策
| 风险/问题 | 对策 |
|---|---|
| 模板不适配导入数据 | 主题声明字段和页面能力,预检查并引导补齐字段 |
| “一键搬家”遗漏旧数据 | 多源交叉提取、数据覆盖率报告、人工审核和异常列表 |
| 新主题导致旧 URL 改变 | URL 注册表独立于主题、迁移模式发布门禁 |
| 模板升级覆盖独立设计 | 主题版本锁定、兼容检测、差异预览、独立站点覆盖层 |
| 内容修改无法及时更新静态站 | 事件触发构建、预览与人工或自动发布策略 |
| 大站生成耗时过长 | 静态构建分批、缓存、增量依赖、构建 Worker 并发 |
| 复杂业务功能无法静态化 | 独立服务/API 适配器、功能清单和迁移边界确认 |
| AI 生成错误产品参数或公司事实 | 不凭空补全、标记来源和置信度、人工审阅 |
| 运营长期绑定平台无法退出 | 保证完整静态包、资源与服务器规则可导出 |
### 21.1 推荐冻结的架构决策
1. Website Factory 为总产品;Migration Center 仅是子模块。
2. 模板和内容分离;Site Blueprint 负责装配。
3. 四种同级建站入口;导入在网站创建后随时可用。
4. “旧站 SEO 保真”与“新站 SEO 生成”是两种独立策略。
5. 线上输出优先真正静态文件;额外动态能力作为可选扩展。
6. 站点、内容、媒体、主题、蓝图、构建物独立版本化。
7. 第一阶段不追求任意像素自由拖拽,保留独立主题开发能力。
---
## 22. 可立即拆解的第一轮开发任务
### Sprint A:基础项目与协议
- 建立仓库、开发环境、CI、PostgreSQL、Redis、身份与网站项目模型。
- 完成 Site Blueprint / Theme Manifest / Content Type Schema 草案及验证器。
- 创建模板库 UI、四入口建站首页和站点工作台初版。
### Sprint B:内容 + 模板 + 构建闭环
- 手动创建产品、文章、基本页面和媒体。
- 实现两种设计风格不同的主题,完成数据绑定和列表/详情页生成。
- 输入规范 manifest,Astro 全量构建、预览站点和 ZIP 导出。
### Sprint C:数据导入 + WordPress 迁移
- CSV/Excel 字段映射、dry-run、幂等更新、异常行报告。
- WordPress WXR/API 导入和图片资源迁移。
- 旧站 URL/SEO 基线及 Preserve Mode。
### Sprint D:上线级质量闭环
- URL/SEO/媒体/内链验收、构建版本、发布审批和回滚。
- 四项端到端试点验收;填写已知限制和改进清单。
---
## 23. 最终交付物清单
- SiteForge 管理后台(含四种建站入口)。
- 通用内容中心、动态内容类型、媒体库、导入工作台。
- 模板/主题/组件中心、站点蓝图、区块式页面配置。
- WordPress 适配器、通用爬虫、Excel/CSV/JSON 导入能力。
- 静态装配与构建引擎,包含 ZIP 导出与独立服务器部署。
- 旧站路由与 SEO 比对、新站 SEO 自动生成、自动验收和质量报告。
- 多网站环境/发布/回滚/权限/审计能力。
- 至少三套不同业务风格的参考主题与必要主题 SDK 文档。
- 四个试点通过报告、自动化测试、开发部署手册和数据恢复演练。
---
## 24. 一句话总结
**SiteForge 是“有内容就能造网站、没有内容也能从零造网站、有旧网站就能搬内容换设计、造完还能持续管理和再次生成”的通用网站工厂。**
旧站迁移、内容管理、主题市场、页面设计、SEO、静态构建与发布,都是围绕“生产网站”这一核心能力服务的工序,而不是独立产品的拼接。