# V2 全系统功能测试环境搭建 — 设计文档 **日期**: 2026-05-01 **状态**: 待实施 **关联**: AGENTS.md, maven-cw-elevator-application/deploy/ --- ## 1. 目标 搭建 cw-elevator-application V2 (v2.0.7) 的全系统集成功能测试环境,包含电梯应用及其所有上下游依赖服务(CRK人脸识别、报警、cwos-manager、ninca-common、component-organization等),能够: - 一键搭建全部 17 个组件 - 运行 V1 vs V2 API 对拍测试 - 验证 V2.0.7 租户访客固定楼层功能 - 验证 CRK 联动、报警联动等端到端链路 - 15-20 分钟内完成从零到全部验证 --- ## 2. 环境约束 | 约束 | 值 | |------|-----| | 部署方式 | 本机进程 (Java服务) + Docker 容器 (基础组件) | | MySQL | 复用现有: `192.168.3.12:3307`, `root/123456` | | JDK | Java 8 (`/usr/lib/jvm/java-8-openjdk-amd64`) | | Maven | 3.5+ | | Docker | 已安装, `docker compose` 可用 | | 代码分支 | `release/cw-elevator-v1-lib-min-risk` | | 测试范围 | 全系统集成 — 全部 17 个组件 | --- ## 3. 组件清单 ### 3.1 基础组件 (Docker) | # | 组件 | 端口 | 来源 | |---|------|------|------| | I1 | Consul | 8500 | 已有 `deploy/consul-docker/docker-compose.yml` | | I2 | Redis | 6379 | 需要新增 compose 条目 (`redis:7-alpine`) | | I3 | Kafka + Zookeeper | 9092, 2181 | 需要新增 compose 条目 (`bitnami/kafka:3.6`) | | I4 | Nginx (前端代理) | 8090 | 已有 `docker-compose.frontend-local.yml` | ### 3.2 应用服务 (本机进程) | # | 组件 | 端口 | 来源 | 数据库 | |---|------|------|------|--------| | A1 | ninca-common-backend | 33010 | `星中心/ninca_common_01-ninca_common_backend.tar.gz` | `ninca_common` | | A2 | component-organization | 33011 | `星中心/ninca_common_component_organization_01-...tar.gz` | `component-organization` | | A3 | cwos-system-api | 3333 | `星中心/cwos_system_api_01-cwos_system_api/` (已解压) | — | | A4 | cwos-manager | 3721 | Docker Harbor 镜像 (已有 compose) | `cwos_manager` | | A5 | cwos-portal | 33008 | `星中心/cwos_portal` SQL 备份 → 重建 | `cwos_portal` | | A6 | snap-app | 33012 | `星中心/ninca_common_snap_app_01-...tar.gz` | — | | A7 | vehicle-app | 33013 | `星中心/ninca_common_vehicle_app_01-...tar.gz` | — | | A8 | person-file-app | 33014 | `星中心/ninca-person-file-app-V2.9.2_20210216.tar.gz` | — | | A9 | monitor-app | 33015 | `星中心/ninca_common_monitor_app_01-...tar.gz` | — | | A10 | CRK-std | 16106 (app), 16114 (mgmt) | `星中心/ninca_crk_std_01-ninca_crk_std_backend/` (JAR已就绪) | `ninca_crk_std` | | A11 | alarm-app | 17011 (app), 17211 (mgmt) | `星中心/ninca_qk_alarm_app_01-ninca_qk_alarm_app/` (JAR已就绪) | `alarm_deploy` | | A12 | elevator V2 | 18081 | Maven 构建 `maven-cw-elevator-application` | `cw-elevator-application` | | A13 | elevator V1 | 18080 | 对照基线 (已有 JAR) | `cw-elevator-application` | ### 3.3 数据库 (MySQL 192.168.3.12:3307) | 数据库 | 备份文件 | 大小 | |--------|---------|------| | `cw-elevator-application` | `data_backup/12_*.sql.gz` + `34_*.sql.gz` | 158M + 2.5G | | `ninca_crk_std` | (含在 CRK 配置中,需确认备份) | — | | `alarm_deploy` | `data_backup/alarm_deploy_*.sql.gz` | 15M | | `cwos_manager` | `data_backup/cwos_manager_*.sql.gz` | 51K | | `cwos_portal` | `data_backup/cwos_portal_*.sql.gz` | 212M | | `ninca_common` | `data_backup/ninca_common_*.sql.gz` | 6M | | `component-organization` | `data_backup/component-organization_*.sql.gz` | 212M | | `ods` | `data_backup/ods_*.sql.gz` | 485K | | `cloudwalk_device_thirdparty` | `data_backup/cloudwalk_device_thirdparty_*.sql.gz` | 4K | | `g` / `p` / `12` / `34` | 其他备份 | 小量 | --- ## 4. 配置统一化 ### 4.1 环境变量 (`config/env.sh`) ```bash # 基础设施 MYSQL_HOST=192.168.3.12 MYSQL_PORT=3307 MYSQL_USER=root MYSQL_PASS=123456 REDIS_HOST=127.0.0.1 REDIS_PORT=6379 REDIS_PASS=1qaz!QAZ CONSUL_HOST=127.0.0.1 CONSUL_PORT=8500 KAFKA_HOST=127.0.0.1 KAFKA_PORT=9092 ZK_HOST=127.0.0.1 ZK_PORT=2181 # 服务端口 PORT_ELEVATOR_V2=18081 PORT_ELEVATOR_V1=18080 PORT_CRK_STD=16106 PORT_CRK_MGMT=16114 PORT_ALARM=17011 PORT_ALARM_MGMT=17211 PORT_CWOS_PORTAL=33008 PORT_COMPONENT_ORG=33011 PORT_NINCA_COMMON=33010 PORT_CWOS_MANAGER=3721 PORT_SYSTEM_API=3333 PORT_SNAP=33012 PORT_VEHICLE=33013 PORT_PERSON_FILE=33014 PORT_MONITOR=33015 PORT_NGINX=8090 # Java JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 JAVA_OPTS="-Xmx2048m -Xms512m" ``` ### 4.2 配置替换规则 每个 Java 服务的 `application.properties` / `bootstrap.properties` 中需要替换: | 原始值 (生产) | 替换为 (测试) | |--------------|-------------| | `mysql_01.mysql_ip` | `192.168.3.12` | | `redis_01.redis_ip` | `127.0.0.1` | | `371bfca....` (Consul UUID host) | `127.0.0.1` | | `44700995e....` (Kafka broker 1) | `127.0.0.1:9092` | | `0837a70b5....` (Kafka broker 2) | (移除,仅保留一个 broker) | | `10.128.161.95` (内网 IP 地址) | `127.0.0.1` | | `10.0.22.207` (内网 ZK) | `127.0.0.1:2181` | | `10.128.123.108` (内网 DB) | `192.168.3.12` | | `10.0.22.102` (内网 CRK IP) | `127.0.0.1` | | `3306` (生产 DB 端口) | `3307` | --- ## 5. 脚本设计 ### 5.1 文件结构 ``` 源码/scripts/test-env/ ├── docker-compose.infra.yml # 合并 Consul+Redis+Kafka+Nginx ├── config/ │ ├── env.sh # 统一环境变量 │ ├── consul/consul-config.json # Consul 初始化配置 │ └── service-templates/ # 配置文件模板 (.properties 模板) ├── setup.sh # 主入口: 一键搭建 ├── start-all.sh # 启动全部服务 ├── stop-all.sh # 停止全部服务 ├── health-check.sh # 探活检查 ├── prepare-db.sh # 数据库恢复 ├── prepare-services.sh # 解压 + 配置注入 ├── build-elevator-v2.sh # 编译 V2 电梯应用 └── verify-functional.sh # 功能验证 ``` ### 5.2 启动依赖拓扑 ``` I1 Consul ──┐ I2 Redis ───┤ (Docker 并行启动) I3 Kafka ───┤ I4 Nginx ───┘ A1 ninca-common ─────────────────────────┐ A2 component-org ←── common ─────────────┤ A3 system-api ←── manager ───────────────┤ A4 cwos-manager (Docker) ────────────────┤ A5 cwos-portal ←── org + manager ────────┤ A6 snap-app ←── portal + common ─────────┤ A7 vehicle-app ←── portal + common ──────┤ A8 person-file ←── portal ───────────────┤ A9 monitor-app (独立) ───────────────────┤ A10 CRK-std ←── portal + org + elevator ─┤ A11 alarm-app ←── portal + org + Kafka ──┤ A12 elevator-V2 ←── CRK + portal + org ──┤ A13 elevator-V1 (对拍对照) ───────────────┘ ``` ### 5.3 主入口执行流程 ``` setup.sh: Phase 1: 环境检查 (< 10s) ├── JDK 8 检查 ├── Maven 检查 ├── Docker 检查 ├── MySQL 连通性检查 (192.168.3.12:3307) └── 端口冲突检查 Phase 2: 数据库准备 (~5min) ├── 创建所有数据库 (如不存在) ├── 解压并导入 11 个 SQL 备份 └── 执行 V2 DDL (tenant_visitor_floor_policy.sql) Phase 3: Docker 启动 (~30s) ├── docker compose up infra ├── 等待 Consul Ready ├── 等待 Kafka Ready └── 启动 Nginx Phase 4: 服务准备 (~5-10min) ├── 解压 5 个 tar.gz ├── 从模板生成各服务配置文件 ├── 编译 V2 电梯应用 └── 同步 JAR 到 deploy/ Phase 5: 服务启动 (~2min) ├── 按拓扑序依次启动 13 个 Java 服务 ├── 每个服务启动后探活确认 └── 失败自动重试 (max 3 次) Phase 6: 验证 (~2min) ├── 全端口探活 ├── Consul 注册检查 ├── V1/V2 API 对拍 (pytest) └── 输出验证报告 总耗时: ~15-20 分钟 ``` --- ## 6. 验证矩阵 | ID | 验证项 | 命令/方法 | 通过标准 | |----|--------|----------|---------| | H1 | 所有端口可达 | `nc -z 127.0.0.1 ` x 15 | 全部 open | | H2 | 所有 HTTP 健康检查 | `curl /actuator/health` x 8 | 全部 200 + UP | | H3 | Consul 服务注册 | `curl :8500/v1/agent/services` | 10+ 服务已注册 | | F1 | V1/V2 API 对拍 | `pytest tools/elevator_api_parity/tests/` | 全部通过 | | F2 | V2.0.7 UC-01 基线 | 不传 floorIds, 无策略 | floorList 全集 | | F3 | V2.0.7 UC-01 固定楼层 | 不传 floorIds, 有策略 | floorList ∩ allow | | F4 | V2.0.7 无交集 | allow 与 floorList 无交集 | 错误码 76260532 | | F5 | V2.0.7 被访人无楼层 | personId 无楼层 | 错误码 76260531 | | F6 | V2.0.7 UC-02 | 显式传 floorIds | 不读策略表 | | F7 | CRK 联动 | curl CRK → 电梯回调 | CRK 日志有 Feign 记录 | | F8 | 报警 Kafka 消费 | 提交事件 → alarm 日志 | Kafka 消息到达 | | F9 | Nginx 前端代理 | `curl :8090` | cwos-portal 首页 | | I1 | MySQL 连通 | `mysql -h 192.168.3.12 -P3307 -e 'SELECT 1'` | 1 | --- ## 7. 已知风险与缓解 | 风险 | 影响 | 缓解 | |------|------|------| | `星中心/*.tar.gz` 内 JAR 版本与 DB 备份不匹配 | 启动失败 | 从同一时间点导出 (2026-04-23) 的 DB 备份对齐 | | Docker Kafka 首次启动慢 | Phase 3 超时 | 脚本增加 60s 等待 + 重试逻辑 | | V2 Maven 编译需 Nexus 私服 | 编译失败 | 已有 `build_nexus_only.sh` 降级方案 | | cwos-portal 无独立 JAR | 无法启动 | 从 DB 备份 `cwos_portal` 库确认部署方式 | | 端口冲突 (已有进程占用) | 启动失败 | Phase 1 预先检查, 用 `lsof` 检测并提示 | | ES (Elasticsearch) 依赖 | alarm 启动可能失败 | alarm `application.properties` 配置 ES, 需 Docker 添加 | --- ## 8. 未解决问题 1. **cwos-portal 部署方式**: 星中心中没有 cwos-portal 的 JAR 或 tarball, 仅 DB 备份中有 `cwos_portal` 数据。需确认其部署形态 (fat JAR? war? Docker?)。 2. **cwos-system-api 启动入口**: `cwos_system_api_01-cwos_system_api/` 已解压, 需确认 JAR 入口和端口。 3. **Elasticsearch**: alarm 依赖 ES (`elasticsearch.ip`), 是否需要在 Docker Compose 中添加 ES 容器? 4. **Dubbo/ZK**: V1 电梯 bootstrap 配置有 Dubbo + ZK, V2 是否需要?可以在 Docker Compose 中添加 ZK。 --- ## 9. 产出物 - `源码/scripts/test-env/docker-compose.infra.yml` — 基础组件 Docker Compose - `源码/scripts/test-env/setup.sh` — 一键搭建脚本 - `源码/scripts/test-env/config/env.sh` — 统一环境变量 - `源码/scripts/test-env/config/service-templates/` — 14 个配置模板 - `源码/scripts/test-env/start-all.sh` / `stop-all.sh` — 启停脚本 - `源码/scripts/test-env/verify-functional.sh` — 功能验证脚本