chore(infra): 增加本地中间件编排、环境配置与 Kafka 降级支持
This commit is contained in:
+104
@@ -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:
|
||||
Reference in New Issue
Block a user