# ===================================================================== # 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 自动执行 V1.0.0 与 V1.1.0 迁移 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: