chore(infra): 增加本地中间件编排、环境配置与 Kafka 降级支持

This commit is contained in:
windyboy
2026-09-07 15:11:06 +08:00
parent abacd6a3f4
commit dc68f1e1f8
5 changed files with 217 additions and 10 deletions
+104
View File
@@ -0,0 +1,104 @@
# =====================================================================
# 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
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:
- "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
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: