Files
msgexchange-v2/compose.integration.yaml
T
windyboy 25cc967bd2 feat(acm2-76): 联调栈数据库自动初始化——基础数据/字典/信箱报文/历史索引
- postgres-init:02 建 basicdata schema 与 25 张基础数据表(表列对齐
  admin-api secondary 实体注解),03 灌双流 T2 种子(fims_* 待 Q25 不造数);
  独立 schema 避免 public 非空导致 Flyway 首次 migrate 失败
- admin-mysql-init:原样引入 admin-api 仓库 adminapi_* 建表与字典/UI 种子,
  v0.0.2 补 FLIGHT_TASK/FLIGHT_TYPE 条目;compose 强制 utf8mb4 并设 LANG,
  防 initdb 客户端落 latin1 造成中文双重编码
- es-init 一次性服务:按 admin-api mapping 建 flight_hts2(别名 flight_hts),
  副本置 0 保持单节点 green
- dev/mysql-init:CMINMSGS 5 条样例报文(SCHD/FLOP×2/REGN/ARPT),
  REGN/ARPT 标注现状预期(SKIPPED / DEAD(EXHAUSTED))
- seed-flight.sql:Flyway 建表后手动执行,8 条航班 6 场景 + 资源明细
- admin-api.yml secondary 加 currentSchema=basicdata,public
- README:初始化/种子/重建卷/验收边界说明

已用 podman compose 重建数据卷全链实测;ACM2-76 有评审与验收全记录。
2026-09-19 11:09:58 +08:00

155 lines
5.2 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 独立联调依赖栈;应用在宿主机运行,固定测试凭据,禁止用于生产。
name: msgx-integration
services:
mysql:
image: mysql:8.4
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: root_dev_pass
MYSQL_DATABASE: cdairport
MYSQL_USER: msgx_dev
MYSQL_PASSWORD: msgx_dev_pass
ports:
- "0.0.0.0:13306:3306"
volumes:
# 与开发栈共用目录,使用共享 SELinux 标签。
- ./deploy/dev/mysql-init:/docker-entrypoint-initdb.d:ro,z
- mysql_data:/var/lib/mysql
healthcheck:
test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 -u$$MYSQL_USER -p$$MYSQL_PASSWORD --silent || exit 1"]
interval: 5s
timeout: 5s
retries: 10
start_period: 15s
postgres:
image: postgres:17-alpine
restart: unless-stopped
environment:
POSTGRES_DB: msgx
POSTGRES_USER: msgx_dev
POSTGRES_PASSWORD: msgx_dev_pass
ports:
- "0.0.0.0:15432:5432"
volumes:
- pg_data:/var/lib/postgresql/data
- ./deploy/integration/postgres-init:/docker-entrypoint-initdb.d:ro,Z
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB -h 127.0.0.1 || exit 1"]
interval: 5s
timeout: 5s
retries: 10
start_period: 5s
redis:
image: valkey/valkey:8-alpine
restart: unless-stopped
command: ["valkey-server", "--appendonly", "yes"]
ports:
- "0.0.0.0:16379:6379"
volumes:
- redis_data:/data
healthcheck:
test: ["CMD-SHELL", "valkey-cli ping | grep PONG || exit 1"]
interval: 5s
timeout: 5s
retries: 10
start_period: 5s
kafka:
image: apache/kafka:3.8.0
restart: unless-stopped
ports:
- "0.0.0.0:19092:9092"
environment:
KAFKA_NODE_ID: 1
KAFKA_PROCESS_ROLES: broker,controller
KAFKA_CLUSTER_ID: "4L622nShTUiT8tCdRvgqgA"
KAFKA_LISTENERS: EXTERNAL://:9092,INTERNAL://:29092,CONTROLLER://:9093
KAFKA_ADVERTISED_LISTENERS: EXTERNAL://${TEST_SERVER_HOST:?Set TEST_SERVER_HOST to the server IP or DNS}:19092,INTERNAL://kafka:29092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: EXTERNAL:PLAINTEXT,INTERNAL:PLAINTEXT,CONTROLLER:PLAINTEXT
KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
KAFKA_CONTROLLER_QUORUM_VOTERS: 1@localhost:9093
KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
KAFKA_DEFAULT_REPLICATION_FACTOR: 1
KAFKA_NUM_PARTITIONS: 1
KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true"
KAFKA_LOG_DIRS: /tmp/kraft-combined-logs
healthcheck:
test: ["CMD-SHELL", "/opt/kafka/bin/kafka-topics.sh --bootstrap-server localhost:29092 --list || exit 1"]
interval: 5s
timeout: 5s
retries: 10
start_period: 10s
# 独立于共享信箱;兼容 admin-api 旧 MySQL JDBC 的认证方式。
admin-mysql:
image: mysql:8.4
restart: unless-stopped
# mysql-native-password:兼容 admin-api 旧 MySQL JDBC 的认证方式;
# 字符集双保险:服务端默认 utf8mb4LANG 让 initdb 的 mysql 客户端
# 不落到 latin1(否则 UTF-8 种子双重编码成 mojibake)。
command: ["--mysql-native-password=ON", "--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci"]
environment:
MYSQL_ROOT_PASSWORD: admin_root_dev_pass
MYSQL_DATABASE: adminapi
MYSQL_USER: admin_dev
MYSQL_PASSWORD: admin_dev_pass
LANG: C.UTF-8
ports:
- "0.0.0.0:13307:3306"
volumes:
- admin_mysql_data:/var/lib/mysql
- ./deploy/integration/admin-mysql-init:/docker-entrypoint-initdb.d:ro,Z
healthcheck:
test: ["CMD-SHELL", "MYSQL_PWD=$$MYSQL_PASSWORD mysql -h 127.0.0.1 -u$$MYSQL_USER -D adminapi -e 'SELECT 1' || exit 1"]
interval: 5s
timeout: 5s
retries: 20
start_period: 30s
# admin-api 使用 TransportClient 6.4.2,不可直接改成现代 ES 的 REST 端口。
# 旧版仅供受控测试网络,Apple Silicon 需要 amd64 模拟运行支持。
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:6.4.2
platform: linux/amd64
restart: unless-stopped
environment:
discovery.type: single-node
cluster.name: docker-cluster
xpack.security.enabled: "false"
ES_JAVA_OPTS: "-Xms512m -Xmx512m"
ports:
- "0.0.0.0:19200:9200"
- "0.0.0.0:19300:9300"
volumes:
- es_data:/usr/share/elasticsearch/data
healthcheck:
test: ["CMD-SHELL", "curl -fsS 'http://localhost:9200/_cluster/health?wait_for_status=yellow&timeout=3s' | grep -q '\"timed_out\":false'"]
interval: 10s
timeout: 5s
retries: 30
start_period: 30s
# 一次性建历史索引 flight_hts(别名→flight_hts2),映射取自 admin-api 仓库。
es-init:
image: curlimages/curl:8.10.1
restart: "no"
depends_on:
elasticsearch:
condition: service_healthy
volumes:
- ./deploy/integration/es-init:/init:ro,Z
entrypoint: ["/bin/sh", "/init/init-flight-hts.sh"]
volumes:
admin_mysql_data:
es_data:
mysql_data:
pg_data:
redis_data: