# DataOps Platform 全本地隔离测试栈设计 ## 目标 为历史代码清理后的 DataOps Platform 建立可重复启动、可销毁、不会访问生产数据服务的本地验收环境,并把该环境作为后续 RBAC、DataFlow–n8n 版本映射、数据治理知识库和工作台迭代的共同验证基线。 ## 已确认边界 - PostgreSQL、Neo4j、MinIO、n8n、Flask 后端和 Vue 前端全部运行在 Docker Compose 的独立网络内。 - 仅 DeepSeek 保持外部依赖;未配置密钥时,平台基础功能仍可启动,只有显式调用生成式能力时返回配置错误。 - 不挂载、不导入、不连接任何生产数据库、生产 Neo4j、生产 MinIO 或生产 n8n。 - 使用 `dataops-test` Compose 项目名、独立命名卷和高位宿主机端口;销毁环境必须显式执行 `down -v`。 - 测试数据库使用仓库当前保留的建库 SQL;测试管理员仅用于本地验收,不代表下一轮正式 RBAC 已完成。 - `app/` 是后端唯一源码;Docker 镜像不得从 `deployment/app/` 构建。 ## 容器与端口 | 服务 | 容器端口 | 宿主机端口 | 说明 | |---|---:|---:|---| | frontend | 80 | 18183 | Nginx 承载 SPA,并把 `/api/` 代理到 backend | | backend | 5500 | 15500 | Gunicorn + Flask | | postgres | 5432 | 15432 | `dataops` 与 `n8n` 两个隔离数据库 | | neo4j | 7474 / 7687 | 17474 / 17687 | 图数据和浏览器管理界面 | | minio | 9000 / 9001 | 19000 / 19001 | 对象 API 和控制台 | | n8n | 5678 | 15678 | 执行编排与 API | ## 启动顺序和健康条件 ```mermaid flowchart LR P["PostgreSQL healthy"] --> N["n8n"] P --> B["Backend"] G["Neo4j healthy"] --> B M["MinIO healthy"] --> I["Bucket init complete"] I --> B B --> F["Frontend / Nginx"] ``` Compose 只把基础设施健康作为启动依赖。最终验收另外检查:前端首页、后端系统健康、PostgreSQL 初始化表、Neo4j 连通、MinIO bucket、n8n `/healthz`,以及后端日志中不存在生产域名和生产内网地址。 ## 数据初始化 PostgreSQL 官方入口按顺序执行: 1. 创建 n8n 独立数据库。 2. 通过 `\ir` 执行 `database/` 中当前保留的六个 SQL 文件。 3. 创建本地测试 `users` 表并写入 `admin` 测试账号。 现有认证仅使用 Base64 密码和 `is_admin` 标记,属于已知 P0 技术债。正式三角色 RBAC、密码哈希、JWT 和管理员创建用户由下一轮独立计划替换,本测试账号不得复制到其他环境。 ## 隔离保护 - Compose 显式设置每个依赖的容器内地址,后端不得使用代码中的默认生产地址。 - n8n 客户端不再包含线上 URL 或 API Key;配置缺失时必须失败关闭,而不是回退到线上。 - Compose 文件不保存 DeepSeek 或 n8n API Key;私密值只允许通过未跟踪的 `.env.local` 或当前 shell 注入。 - 本地 n8n 首次启动后由用户在 UI 完成 owner 初始化并生成 API Key,再通过 `N8N_API_KEY` 注入后端。未完成该步骤时 n8n 容器健康,但平台 n8n 管理 API 会明确显示未授权。 ## 验收口径 - `docker compose config` 成功,且渲染结果中不存在 `192.168.3.143`、`company.citupro.com`、`n8n.citupro.com`。 - 七个服务均为 `running`,有健康检查的服务均为 `healthy`。 - `GET http://localhost:18183/` 返回 200。 - `GET http://localhost:18183/api/system/health` 返回业务码 200,PostgreSQL 和 Neo4j 均为 true。 - PostgreSQL 存在 `users`、`data_orders`、`data_products`、`metadata_review_records`、`metadata_version_history`、`task_list`。 - MinIO 中存在 `dataops-bucket`。 - `GET http://localhost:15678/healthz` 返回 200。 - 当前 Python 测试和前端生产构建继续通过。 ## 非目标 - 不在本次实现正式 RBAC、知识库、Workflow 版本表或工作台持久化接口。 - 不迁移 Vue 3。 - 不验证 DeepSeek 计费调用。 - 不对生产表执行任何 DDL 或数据迁移。