e8f5c4330a
Co-Authored-By: Claude Code <noreply@anthropic.com>
160 lines
9.5 KiB
Markdown
160 lines
9.5 KiB
Markdown
# 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/凭据)永不入库
|