跳转至

QDATA 部署与基础设施报告

生成日期:2026-08-27 | 基于源码深度分析


一、服务架构总览

qData 采用**三后端 + 一前端**的微服务架构,通过 Docker Compose 编排,支持 light(轻量)和 all(全量)两种部署模式。

┌────────────────────────────────────────────────────────────────────┐
│                         Nginx :80                                   │
│              /prod-api → qdata-api:8080                             │
│              /prod-ai  → qdata-service-ai:8087                      │
│              /         → 前端静态文件                                │
├────────────────────────────────────────────────────────────────────┤
│                                                                    │
│  ┌──────────────────┐  ┌──────────────────┐  ┌──────────────────┐ │
│  │   qdata-api       │  │  qdata-service-ai │  │  qdata-service-  │ │
│  │   :8080           │  │  :8087            │  │  quality :8083   │ │
│  │   JDK 8           │  │  JDK 17           │  │  JDK 8           │ │
│  │   146 Controller  │  │  Text2SQL         │  │  质量规则引擎     │ │
│  └────────┬─────────┘  └──────────────────┘  └────────┬─────────┘ │
│           │                                            │           │
│  ┌────────┼────────────────────────────────────────────┼────────┐  │
│  │        ▼                                            ▼        │  │
│  │  ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐        │  │
│  │  │ MySQL/DM8│ │  Redis   │ │ RabbitMQ │ │ MongoDB  │        │  │
│  │  │  :3306   │ │  :6379   │ │  :5672   │ │ :27017   │        │  │
│  │  │  主数据库 │ │  缓存/会话│ │  消息队列 │ │ 错误数据  │        │  │
│  │  └──────────┘ └──────────┘ └──────────┘ └──────────┘        │  │
│  │                                                              │  │
│  │  ┌──────────┐ ┌──────────────────┐ ┌──────────────────────┐ │  │
│  │  │  Neo4j   │ │ DolphinScheduler │ │   Spark + Hadoop     │ │  │
│  │  │  :7687   │ │  :12345          │ │   :7077 / :8020      │ │  │
│  │  │  血缘图谱 │ │  分布式调度       │ │   分布式 ETL          │ │  │
│  │  └──────────┘ └──────────────────┘ └──────────────────────┘ │  │
│  └─────────────────────────────────────────────────────────────┘  │
└────────────────────────────────────────────────────────────────────┘

二、Docker Compose 编排

2.1 文件结构

文件 说明
docker-compose.yml 主入口(DM8 数据库)
docker-compose-mysql.yml MySQL 数据库入口
docker-compose-base.yml 基础服务(Redis、RabbitMQ、Nginx、数据库、MongoDB、Neo4j)
docker-compose-dolphinscheduler.yml DolphinScheduler 全家桶
docker-compose-spark.yml Spark Master + Worker
docker-compose-hadoop.yml Hadoop HDFS(NameNode、DataNode、ResourceManager、NodeManager)
docker-compose-qdata.yml 三个 qData 后端服务
docker-compose-demo.yml 演示数据库(MySQL、Oracle、DM8)
.env / .env.example 环境变量配置

使用 include 指令组合(需要 Compose v2.20.2+)。

2.2 部署模式

Profile 服务数 说明
light ~10 核心服务:数据库 + Redis + RabbitMQ + MongoDB + Neo4j + Nginx + 3 个 qData 服务
all ~22 全量:light + DolphinScheduler + Spark + Hadoop
local ~18 本地开发:all 但不含 Nginx

2.3 完整服务清单(22 个服务)

基础服务:

服务 镜像 端口 Profile
redis redis:6-alpine 6379 all, light, local
rabbitmq rabbitmq:3.12-management 5672, 15672 all, light, local
nginx nginx:1.24.0 80 all, light
dm8 dm8:mixed 5236 all, light, schema
mysql mysql:8.0 3306 all, light, schema
mongodb mongo:4.4 27017 all, light, schema
neo4j neo4j:4.4.40 7474, 7687 all, light, neo4j

DolphinScheduler:

服务 端口 依赖
dolphinscheduler-postgresql 5432 —
dolphinscheduler-zookeeper — —
dolphinscheduler-api 12345, 25333 zookeeper, rabbitmq
dolphinscheduler-alert — zookeeper, rabbitmq
dolphinscheduler-master — zookeeper, rabbitmq
dolphinscheduler-worker — zookeeper, rabbitmq

Spark + Hadoop:

服务 说明
spark Spark Master
spark-worker-1 Spark Worker
namenode HDFS NameNode
datanode HDFS DataNode
resourcemanager YARN ResourceManager
nodemanager YARN NodeManager

qData 服务:

服务 端口 依赖
qdata-api 8080 redis, rabbitmq, dm8/mysql
qdata-service-quality 8083 redis, rabbitmq, dm8/mysql, mongodb
qdata-service-ai 8087 redis, rabbitmq, dm8/mysql

2.4 网络配置

  • 网络名称:qdatanet
  • 子网:172.28.0.0/16
  • 所有服务通过服务名互相访问(如 redis、rabbitmq、dm8)

2.5 命名卷

卷 用途
dolphinscheduler-postgresql DS PostgreSQL 数据
dolphinscheduler-zookeeper ZooKeeper 数据
dolphinscheduler-worker-data DS Worker 数据

三、部署管理脚本

3.1 qdata.sh 命令

命令 说明
start light 轻量模式启动
start all 全量模式启动
start local 本地开发模式
stop 停止所有服务
restart 重启
status 查看服务状态
logs 查看日志
doctor 环境诊断
uninstall 卸载

3.2 启动选项

选项 说明
--db dm8\|mysql 选择数据库类型
--demo 启动演示数据库
--offline 离线模式
--force 强制重建

3.3 预检检查

检查项 light 要求 all/local 要求
Docker 版本 ≥ 20.10.0 ≥ 20.10.0
Compose 版本 ≥ 2.20.2 ≥ 2.20.2
CPU ≥ 4 核 ≥ 8 核
内存 ≥ 8 GB ≥ 14 GB
Linux 容器模式 是 是
Rootless Docker 拒绝 拒绝
端口可用性 检查 检查
网络子网冲突 检查 检查
包完整性 检查 检查

四、Nginx 配置

4.1 主配置

配置项 值
Worker 进程 8
最大连接数 3000
Gzip 启用
代理缓冲 启用
Keepalive 300s

4.2 站点配置

路径 目标 说明
/ /usr/share/nginx Vue SPA(try_files $uri $uri/ /index.html)
/prod-api http://qdata-api:8080 主后端代理(剥离 /prod-api/ 前缀)
/prod-ai http://qdata-service-ai:8087 AI 服务代理(剥离 /prod-ai/ 前缀)
配置项 值
client_max_body_size 500M
代理超时 600s(connect/send/read)
Keepalive 600s

五、环境变量

5.1 qData 核心

变量 说明 默认值
QDATA_HUB 容器镜像仓库 Aliyun ACR
QDATA_TAG 镜像标签 1.6.1
DB_TYPE 数据库类型 dm8

5.2 数据库

DM8:

变量 说明
CASE_SENSITIVE 大小写敏感(0)
INSTANCE_NAME 实例名(QDATA)
SYSDBA_PWD SYSDBA 密码
QDATA_USER / QDATA_PWD 应用用户

MySQL:

变量 说明
MYSQL_ROOT_PASSWORD Root 密码
MYSQL_DATABASE 数据库名(qdata)
MYSQL_USER / MYSQL_PASSWORD 应用用户

5.3 中间件

变量 说明 默认值
REDIS_PASSWORD Redis 密码 —
EXPOSE_REDIS_PORT Redis 端口 6379
RABBITMQ_DEFAULT_USER RabbitMQ 用户 admin
RABBITMQ_DEFAULT_PASS RabbitMQ 密码 —
MONGO_INITDB_ROOT_USERNAME MongoDB 用户 —
MONGO_INITDB_ROOT_PASSWORD MongoDB 密码 —

5.4 DolphinScheduler

变量 说明
DS_HUB DS 镜像仓库
DS_TAG DS 镜像标签
SPRING_DATASOURCE_URL DS 数据库 URL
REGISTRY_ZOOKEEPER_CONNECT_STRING ZooKeeper 地址
SPRING_RABBITMQ_HOST/PORT/USERNAME/PASSWORD RabbitMQ 连接

5.5 Spark + Hadoop

变量 说明 默认值
SPARK_MASTER_URL Spark Master spark://spark:7077
SPARK_WORKER_MEMORY Worker 内存 5G
SPARK_WORKER_CORES Worker 核数 4
Hadoop 变量 30+ 个 core-site.xml, hdfs-site.xml 等

5.6 前端环境变量

变量 开发 生产
VITE_APP_BASE_API /dev-api /prod-api/
VITE_APP_BASE_AI /dev-ai/ /prod-ai/
VITE_APP_AUTH_TYPE client client
VITE_APP_AES_KEY AD42F6697B035B75 AD42F6697B035B75
VITE_BUILD_COMPRESS — gzip

六、数据库版本管理

6.1 SQL 脚本结构

sql/
├── mysql/
│   ├── initialization/    # 全量初始化脚本(V1.0.6 ~ V1.6.1 + latest)
│   └── upgrade/           # 增量升级脚本
├── dm/
│   ├── initialization/    # DM8 初始化脚本
│   └── upgrade/           # DM8 增量升级
└── dolphinscheduler/
    └── upgrade/           # DS 数据更新

6.2 版本升级路径(13 步)

步骤 升级路径 变更规模
1 V1.0.6 → V1.0.7 极小(76B 数据)
2 V1.0.7 → V1.0.8 小(3.6KB)
3 V1.0.8 → V1.1.0 极小(483B)
4 V1.1.0 → V1.1.1 小(816B)
5 V1.1.1 → V1.1.2 极小(314B)
6 V1.1.2 → V1.2.0 中(5.6KB schema + 26.8KB data)
7 V1.2.0 → V1.3.0 中(4.7KB schema + 5.8KB data)
8 V1.3.0 → V1.4.0 大(38.5KB schema + 19.8KB data)
9 V1.4.0 → V1.5.2 中(8.2KB schema + 9.6KB data)
10 V1.5.2 → V1.5.3 无变更
11 V1.5.3 → V1.5.4 小(1KB data only)
12 V1.5.4 → V1.6.0 小(2.4KB schema only)
13 V1.6.0 → V1.6.1 中(947B schema + 5.8KB data)

6.3 表数量增长

版本 表数量
V1.0.6 ~ V1.1.2 746
V1.2.0 756
V1.3.0 761
V1.4.0 770
V1.5.4 770
V1.6.0 2,094
V1.6.1 2,095

V1.6.0 发生了**重大 Schema 扩展**(+1,324 表),表数量从 770 激增至 2,094。


七、CI/CD

7.1 GitHub Actions

.github/workflows/release.yml 实现 Release 自动化:

  • 触发条件:推送 v* 标签
  • 功能:从注解标签提取 Release Notes,通过 gh release create 创建/更新 GitHub Release
  • 不包含:构建产物、运行测试、推送 Docker 镜像

7.2 Docker 镜像

Dockerfile 位于:

服务 Dockerfile 路径
qdata-server qdata-server/docker/Dockerfile
qdata-service-quality qdata-service-quality/docker/Dockerfile
qdata-service-ai qdata-ai-server/docker/Dockerfile

镜像推送到 Aliyun ACR(crpi-kf13onfj0v8f6jax.cn-shanghai.personal.cr.aliyuncs.com/qiantongkeji)。


八、API 文档配置

配置项 值
框架 SpringDoc OpenAPI 3 + Knife4j
分组 system, example, ai, dm
Swagger UI /swagger-ui.html
API Docs /v3/api-docs
Knife4j 启用(zh-CN,基础认证 test/12313)
i18n SwaggerI18nCustomizer 运行时翻译 @Tag 和 @Operation

九、部署前置条件

组件 版本要求
JDK 1.8(AI 服务需 17)
Node.js 18+
yarn v1.22.22+
Maven 3.6+
Docker 20.10.0+
Docker Compose 2.20.2+
DM8 大小写不敏感,GB18030 编码
Redis 5.0+
RabbitMQ 任意版本

十、前端构建配置

10.1 开发服务器

配置 值
端口 81
host true
自动打开浏览器 是

10.2 代理规则

路径 目标 重写
/dev-api http://localhost:8080 剥离前缀
/dev-ai http://localhost:8087 剥离前缀
/jmreport http://localhost:8080 无
/v3/api-docs http://localhost:8080 无

10.3 Vite 插件

插件 说明
@vitejs/plugin-vue Vue 3 SFC 支持
unplugin-auto-import Vue/Router/Pinia API 自动导入
unplugin-vue-setup-extend-plus <script setup> 命名扩展
vite-plugin-svg-icons SVG 图标精灵(197 个)
vite-plugin-compression Gzip/Brotli 压缩(构建时)
vite-plugin-monaco-editor-esm Monaco Editor ESM 支持

10.4 构建优化

  • 手动 chunk 拆分:每个 node_modules 包独立分包
  • 路径别名:~ → 项目根,@ → src/
  • 支持扩展名:.mjs, .js, .ts, .jsx, .tsx, .json, .vue
  • PostCSS:移除 SCSS @charset 警告