原 V1–V10 的净结构全部合并进 V1__flight_state_baseline.sql,迁移链收敛为一条。 表集合、逐列类型/非空/默认值、表级约束、索引与种子行经重放比对与旧链条一致; 仅丢弃 5 条只对既有库有意义的存量数据语句(RECEIVED_AT/ENQUEUED_AT 回填、 schd 与开放请求去重、SENT_AT 回写)。 已按旧链迁移过的库版本链与校验和对不上,必须重建 schema 或删除数据卷后重跑, 禁止手工 repair 或改写 flyway_schema_history。 - 删除 V2–V10 共 9 个迁移文件 - 注释统一范式并改用稳定 ID(INV-x/C-x/G-x),修正 KAFKA_MSG/KAFKA_SCHD 与实际值不符 - 同步 docs/reference.md、docs/user-stories.md、oracle11g/README.md、README、application.yml、compose.yaml - FlywayMigrationTest 改为断言单基线,并补 MSG_EVENT.SENT_AT 覆盖
108 lines
3.8 KiB
YAML
108 lines
3.8 KiB
YAML
# =====================================================================
|
||
# msgexchange-v2 本地开发依赖中间件栈(ACM2-13 口径)
|
||
# 兼容 Podman Compose 与 Docker Compose
|
||
# 包含:
|
||
# - mysql: 共享信箱 MySQL 8.4 LTS(库 cdairport,初始化 CMINMSGS/COUTMSGS)
|
||
# - postgres: 自有 PostgreSQL 17-alpine(库 msgx,由应用 Flyway 建表)
|
||
# - redis: 航班动态 + 快照 gen 开源替代品 Valkey 8-alpine(兼容 Redis 7.2+ 协议与 Lua)
|
||
# - kafka: 单节点 Apache Kafka 3.8.0 KRaft
|
||
# =====================================================================
|
||
|
||
services:
|
||
mysql:
|
||
image: mysql:8.4
|
||
container_name: msgx-dev-mysql
|
||
restart: unless-stopped
|
||
environment:
|
||
MYSQL_ROOT_PASSWORD: root_dev_pass
|
||
MYSQL_DATABASE: cdairport
|
||
MYSQL_USER: ${MSGX_MAILBOX_USER:-msgx_dev}
|
||
MYSQL_PASSWORD: ${MSGX_MAILBOX_PASSWORD:-msgx_dev_pass}
|
||
ports:
|
||
- "3306:3306"
|
||
volumes:
|
||
- ./deploy/dev/mysql-init:/docker-entrypoint-initdb.d:ro
|
||
- 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
|
||
|
||
# 由 Flyway 自动执行单基线迁移(db/migration/V1__flight_state_baseline.sql)
|
||
postgres:
|
||
image: postgres:17-alpine
|
||
container_name: msgx-dev-postgres
|
||
restart: unless-stopped
|
||
environment:
|
||
POSTGRES_DB: msgx
|
||
POSTGRES_USER: ${MSGX_PG_USER:-msgx_dev}
|
||
POSTGRES_PASSWORD: ${MSGX_PG_PASSWORD:-msgx_dev_pass}
|
||
ports:
|
||
- "${MSGX_PG_PORT:-5432}:5432"
|
||
volumes:
|
||
- pg_data:/var/lib/postgresql/data
|
||
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
|
||
|
||
# ACM2-28:Redis 已退出阶段 A 权威与写路径(FLIGHT_SCHD 落自有 PG)。
|
||
# 本服务保留至切流,供 FS7 影子 diff 对拍工具读取现役 legacy Redis flightInfo 与本地辅助冒烟。
|
||
redis:
|
||
image: valkey/valkey:8-alpine
|
||
container_name: msgx-dev-redis
|
||
restart: unless-stopped
|
||
command: ["valkey-server", "--appendonly", "yes"]
|
||
ports:
|
||
- "6379: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
|
||
container_name: msgx-dev-kafka
|
||
restart: unless-stopped
|
||
ports:
|
||
- "9092:9092"
|
||
environment:
|
||
# KRaft 单节点角色与集群 ID
|
||
KAFKA_NODE_ID: 1
|
||
KAFKA_PROCESS_ROLES: broker,controller
|
||
KAFKA_CLUSTER_ID: "4L622nShTUiT8tCdRvgqgA"
|
||
# 监听器与协议映射
|
||
KAFKA_LISTENERS: PLAINTEXT://:9092,CONTROLLER://:9093
|
||
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
|
||
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT
|
||
KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
|
||
KAFKA_CONTROLLER_QUORUM_VOTERS: 1@localhost:9093
|
||
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
|
||
# 单节点副本与分区配置(满足 acks=all + 幂等生产者)
|
||
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:9092 --list || exit 1"]
|
||
interval: 5s
|
||
timeout: 5s
|
||
retries: 10
|
||
start_period: 10s
|
||
|
||
volumes:
|
||
mysql_data:
|
||
pg_data:
|
||
redis_data:
|