Files
windyboy 800d7617f2 chore(db): 压缩 Flyway 迁移链为单基线
原 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 覆盖
2026-09-13 16:31:14 +08:00

108 lines
3.8 KiB
YAML
Raw Permalink 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.
# =====================================================================
# 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-28Redis 已退出阶段 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: