# SiteForge 网站工厂 — 完整实现补全计划 > 版本:v1.0(2026-10-22) > 目标读者:项目负责人 / 实施工程师 > 配套文档:[PRODUCTION_ROADMAP.md](PRODUCTION_ROADMAP.md)(生产化清单)、[superpowers/plans/](superpowers/plans/)(执行级任务计划) --- ## 1. 项目目标 **一句话:** 做一台"网站生产工厂"——原材料(旧站/模板/数据/自由设计)从任意入口进,流水线另一头产出可直接上线的纯静态网站,且四种方式可组合、成品可随时修改重发布。 **四种建站模式(需求定义):** | 模式 | 输入 | 输出 | |---|---|---| | A. 旧站迁移 | 旧网站地址(WordPress 等) | 原内容 + 全新视觉,SEO/URL 不丢 | | B. 模板建站 | 行业模板 + 公司资料/Logo/产品 | 完整新站 | | C. 数据装配 | Excel/CSV/JSON/XML/数据库/API | 自动识别类型、匹配模板、批量生成 | | D. 自由设计 | 可视化编辑器从零排版 | 个性站点,可存为新模板 | --- ## 2. 现状基线(2026-10-22 实测确认) 已在本机 Docker 环境完整验证:镜像构建、双容器启动、登录/CSRF、建站、自动栏目、同步+异步构建(10 页静态站 0 错误)、管理台/工厂 UI、静态站预览全部通过。 | 模块 | 完成度 | 结论 | |---|---|---| | 模式 A 旧站迁移 | ~70% | WordPress 路径可用(WXR/REST/爬虫/媒体ZIP/基线审计/发布门禁),但需手动 5 步,仅支持 WP | | 模式 B 模板建站 | ~90% | 基本完成;缺表单收件(外部化设计)、多语言 | | 模式 C 数据装配 | ~60% | Excel/CSV/JSON+字段映射强;缺 XML、数据库/API 连接器、类型/模板自动匹配 | | 模式 D 自由设计 | ~65% | 编辑器安全可控(12 区块/14 模板/列布局);缺常见商业区块、整站级模板保存 | | 组合与随时修改 | ~90% | 架构支持已验证;缺一键上线(发布连接器) | | 工程基础 | — | **已补齐:git 仓库已建立**(origin: xinyouhe/cms-SiteForge) | --- ## 3. 总体策略 1. **增量演进,不推倒重来**:现有 FastAPI + SQLite + 声明式主题架构质量良好,全部新功能在其上叠加。 2. **每个 Phase 独立交付**:完成后系统始终可运行、可演示,CI 全绿才算结束。 3. **顺序**:P0(工程前提)→ Phase 1 → 2 → 3 → 4 → 5;Phase 2/3 相互独立可并行。 4. **红线不破**:不执行用户上传的代码(主题/区块保持声明式白名单);不伪造业务数据;发布保持审批门禁。 --- ## 4. P0:工程前提(0.5–1 天) | 任务 | 内容 | 验收 | |---|---|---| | P0-1 ✅ | git 仓库 + 远程 origin + .gitignore(已完成并推送基线提交) | `git log` 可见基线 | | P0-2 | 修复 3 个实测缺陷:① compose.yaml 两服务同标签构建冲突(`up -d --build` 失败)② worker 容器假 unhealthy(继承镜像 HEALTHCHECK)③ favicon 404 | `docker compose up -d --build` 一条命令成功;两容器均 healthy;浏览器无 404 | | P0-3 | `scripts/ci.sh`:pytest + compileall + node --check 一键自检 | 本机跑通全绿,纳入每次提交前检查 | --- ## 5. Phase 1:模式 A 补全 — 迁移向导(3–5 天) **目标:** "输入旧站地址"从手动 5 步变一站式引导流程。纯编排层,无表结构大改,最快见效。 **任务分解:** | # | 任务 | 涉及文件 | |---|---|---| | 1.1 | 向导状态机(start→analyzed→importing→baseline→media→done,可重试/跳过/恢复) | 新 `app/migration_wizard.py`、`app/db.py`(wizard_state 表) | | 1.2 | `wizard/start {url}`:调 `adapters.analyze()` 识别平台,返回推荐路径 | `app/factory_api.py` | | 1.3 | WP REST 全量分页导入(上限 1000→10000,走 worker 异步 + 进度查询) | `app/adapters.py`、`app/worker.py`(job kind: wp-import) | | 1.4 | sitemap.xml 从 URL 拉取生成基线(现只能手动上传文件) | `app/migration_audit.py` | | 1.5 | 媒体自动清单:导入后自动生成 assets inventory + 待本地化列表 + 构建镜像开关 | 复用 `/assets/inventory` | | 1.6 | 爬虫容量 60→200 页 + robots.txt 检查 | `app/importers.py` | | 1.7 | 前端向导面板(分步 UI,挂在 factory-studio) | 新 `app/static/wizard.js`、`factory-v2.html` | **验收标准:** 输入一个真实 WordPress 站地址,向导引导完成 导入→基线→媒体清单→构建→审计报告 全流程;中途关闭页面重进可恢复状态。测试 `tests/test_migration_wizard.py` 全绿。 --- ## 6. Phase 2:模式 C 补全 — 数据源连接器 + 自动匹配(5–8 天) **目标:** 补上"XML / 数据库 / API"三种进料口和"自动识别类型、自动匹配模板"。 | # | 任务 | 涉及文件 | |---|---|---| | 2.1 | 通用 XML 数据导入(扁平/两层 XML → 行记录,进现有 mapping 管道) | `app/table_loader.py` | | 2.2 | **MySQL 只读连接器**:凭据 Fernet 加密存库;仅 SELECT;白名单表;单表 ≤10000 行;预览表结构→选表选列→mapping dry-run/commit | 新 `app/connectors.py` | | 2.3 | PostgreSQL 连接器(同框架第二实现) | `app/connectors.py` | | 2.4 | 内容类型 + 行业主题智能推荐(列名/样本值规则打分:品牌+续航→vehicle→automotive 主题),前端"智能推荐"一键采纳 | 新 `app/content_sense.py` | | 2.5 | 大批量异步导入:mapping commit 分批(500/批)入 worker 队列,进度条;总量上限 1000→50000 | `app/factory_api.py`、`app/worker.py` | **验收标准:** ① 5000 行车型 Excel → 推荐 vehicle+automotive → 异步导入 → 构建出含分类/品牌聚合页的站;② 测试 MySQL 库选表导入走通;③ 通用 XML 文件导入走通。测试 `tests/test_connectors.py`、`tests/test_content_sense.py` 全绿。 --- ## 7. Phase 3:模式 D 补全 — 编辑器扩充 + 整站模板(4–6 天) **目标:** 提升设计自由度与复用能力。 | # | 任务 | 涉及文件 | |---|---|---| | 3.1 | 新增 6 区块:轮播 carousel、视频 video(仅白名单 https YouTube/Vimeo embed)、选项卡 tabs、价格表 pricing、静态地图 map、表单链接 form-link —— 全部声明式、白名单校验 | `app/blueprints.py`、`app/static/blocks.css`、`editor.js` | | 3.2 | 整站模板:导出 = 多页面 blocks + 导航 + 设置 + 主题 + 设计令牌 打包 JSON;建站时可选整站模板初始化 | 新 `app/site_templates.py`、`app/db.py`(site_templates 表) | | 3.3 | 模板兼容性检查(区块类型是否被目标主题版本支持) | `app/site_templates.py` | | 3.4 | (可选,默认不做)草稿模式 entry status=draft —— 改动面大,需单独确认 | — | **验收标准:** 从零设计完整站点(多页+导航+令牌)→ 存为整站模板 → 新站套用 → 构建视觉与原站一致;6 个新区块在编辑器与构建产物中渲染正确并有测试覆盖。 --- ## 8. Phase 4:横向刚需 — 多语言 + 发布连接器(5–8 天) **目标:** 出口外贸场景的语言能力 + "重新发布一键上线"。 | # | 任务 | 涉及文件 | |---|---|---| | 4.1 | 站点 locale + 语言变体关系组;一键克隆翻译站(复制结构,内容置为待翻译占位,**不机器翻译不伪造**) | 新 `app/multilang.py`、`app/db.py`(sites.locale、site_relations) | | 4.2 | 各语言站 sitemap 互输 hreflang alternates;语言切换器区块(白名单) | `app/builder.py`、`app/blueprints.py` | | 4.3 | **SFTP 发布目标**:凭据加密、连通性测试、原子上传(.new→rename)、发布历史、失败提示 | 新 `app/publish_targets.py` | | 4.4 | S3 兼容发布目标(endpoint/key/secret/bucket/prefix) | `app/publish_targets.py` | | 4.5 | 外部发布强制走现有 release_requests 审批门禁 | `app/factory_api.py` | **验收标准:** 中文站克隆英文变体站,两站 sitemap hreflang 正确;任一构建版本经审批后一键 SFTP 推送到测试服务器可访问。测试全绿。 --- ## 9. Phase 5:生产化加固(另行立项,引用 PRODUCTION_ROADMAP.md) PostgreSQL/Redis、SSO/MFA、审计外置、E2E 视觉回归、供应链与渗透测试、监控 SLO。**功能闭环(Phase 1–4)验证后再启动**,避免过早优化。 --- ## 10. 里程碑与时间估算 | 里程碑 | 内容 | 估算(人日) | 交付物 | |---|---|---|---| | M0 | P0 完成 | 0.5–1 | 一条命令启动 + CI | | M1 | Phase 1 完成 | 3–5 | 一站式迁移演示(真实 WP 站) | | M2 | Phase 2 完成 | 5–8 | Excel/数据库/XML → 全自动建站演示 | | M3 | Phase 3 完成 | 4–6 | 整站模板库 + 富区块编辑器 | | M4 | Phase 4 完成 | 5–8 | 中英双语站 + 一键 SFTP 上线 | | M5 | Phase 5 | 另估 | 生产级部署 | 合计功能补全(M0–M4)约 **17–28 人日**。 --- ## 11. 待确认决策点(阻塞相应 Phase 开工) | # | 决策 | 推荐 | |---|---|---| | D1 | 多语言方案(阻塞 Phase 4) | 站点级复制 + hreflang 互链,不改 entries 表 | | D2 | 数据库连接器首发(阻塞 Phase 2) | MySQL 只读 | | D3 | PostgreSQL 时机 | 推迟到 Phase 5 | | D4 | Phase 顺序 | 1→2→3→4(2/3 可并行) | ## 12. 工作流程约定 - 每个 Phase 开工前:展开为任务级 TDD 详细计划(写入 `docs/superpowers/plans/`)并评审 - 每个 Phase 收尾:CI 全绿 + Docker 实测启动 + 浏览器验收(复用已验证的冒烟流程) - 提交规范:小步提交,`feat:/fix:/chore:` 前缀;敏感信息(.env/凭据)永不入库