- 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 有评审与验收全记录。
155 lines
5.2 KiB
YAML
155 lines
5.2 KiB
YAML
# 独立联调依赖栈;应用在宿主机运行,固定测试凭据,禁止用于生产。
|
||
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 的认证方式;
|
||
# 字符集双保险:服务端默认 utf8mb4,LANG 让 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:
|