2026-07-16-local-isolated-test-stack-design.md 3.9 KB

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 dataopsn8n 两个隔离数据库
neo4j 7474 / 7687 17474 / 17687 图数据和浏览器管理界面
minio 9000 / 9001 19000 / 19001 对象 API 和控制台
n8n 5678 15678 执行编排与 API

启动顺序和健康条件

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.143company.citupro.comn8n.citupro.com
  • 七个服务均为 running,有健康检查的服务均为 healthy
  • GET http://localhost:18183/ 返回 200。
  • GET http://localhost:18183/api/system/health 返回业务码 200,PostgreSQL 和 Neo4j 均为 true。
  • PostgreSQL 存在 usersdata_ordersdata_productsmetadata_review_recordsmetadata_version_historytask_list
  • MinIO 中存在 dataops-bucket
  • GET http://localhost:15678/healthz 返回 200。
  • 当前 Python 测试和前端生产构建继续通过。

非目标

  • 不在本次实现正式 RBAC、知识库、Workflow 版本表或工作台持久化接口。
  • 不迁移 Vue 3。
  • 不验证 DeepSeek 计费调用。
  • 不对生产表执行任何 DDL 或数据迁移。