Files
msgexchange-v2/compose.integration.yaml
T

140 lines
4.5 KiB
YAML
Raw Normal View History

# 独立联调依赖栈;应用在宿主机运行,固定测试凭据,禁止用于生产。
name: msgx-integration
services:
mysql:
image: mysql:8.4
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: root_dev_pass
MYSQL_DATABASE: cdairport
MYSQL_USER: msgx_dev
MYSQL_PASSWORD: msgx_dev_pass
ports:
- "0.0.0.0:13306:3306"
volumes:
# 与开发栈共用目录,使用共享 SELinux 标签。
- ./deploy/dev/mysql-init:/docker-entrypoint-initdb.d:ro,z
- 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
restart: unless-stopped
environment:
POSTGRES_DB: msgx
POSTGRES_USER: msgx_dev
POSTGRES_PASSWORD: msgx_dev_pass
ports:
- "0.0.0.0:15432:5432"
volumes:
- pg_data:/var/lib/postgresql/data
- ./deploy/integration/postgres-init:/docker-entrypoint-initdb.d:ro,Z
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
restart: unless-stopped
command: ["valkey-server", "--appendonly", "yes"]
ports:
- "0.0.0.0:16379: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
restart: unless-stopped
ports:
- "0.0.0.0:19092:9092"
environment:
KAFKA_NODE_ID: 1
KAFKA_PROCESS_ROLES: broker,controller
KAFKA_CLUSTER_ID: "4L622nShTUiT8tCdRvgqgA"
KAFKA_LISTENERS: EXTERNAL://:9092,INTERNAL://:29092,CONTROLLER://:9093
KAFKA_ADVERTISED_LISTENERS: EXTERNAL://${TEST_SERVER_HOST:?Set TEST_SERVER_HOST to the server IP or DNS}:19092,INTERNAL://kafka:29092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: EXTERNAL:PLAINTEXT,INTERNAL:PLAINTEXT,CONTROLLER:PLAINTEXT
KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
KAFKA_CONTROLLER_QUORUM_VOTERS: 1@localhost:9093
KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
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:29092 --list || exit 1"]
interval: 5s
timeout: 5s
retries: 10
start_period: 10s
# 独立于共享信箱;兼容 admin-api 旧 MySQL JDBC 的认证方式。
admin-mysql:
image: mysql:8.4
restart: unless-stopped
command: ["--mysql-native-password=ON"]
environment:
MYSQL_ROOT_PASSWORD: admin_root_dev_pass
MYSQL_DATABASE: adminapi
MYSQL_USER: admin_dev
MYSQL_PASSWORD: admin_dev_pass
ports:
- "0.0.0.0:13307:3306"
volumes:
- admin_mysql_data:/var/lib/mysql
- ./deploy/integration/admin-mysql-init:/docker-entrypoint-initdb.d:ro,Z
healthcheck:
test: ["CMD-SHELL", "MYSQL_PWD=$$MYSQL_PASSWORD mysql -h 127.0.0.1 -u$$MYSQL_USER -D adminapi -e 'SELECT 1' || exit 1"]
interval: 5s
timeout: 5s
retries: 20
start_period: 30s
# admin-api 使用 TransportClient 6.4.2,不可直接改成现代 ES 的 REST 端口。
# 旧版仅供受控测试网络,Apple Silicon 需要 amd64 模拟运行支持。
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:6.4.2
platform: linux/amd64
restart: unless-stopped
environment:
discovery.type: single-node
cluster.name: docker-cluster
xpack.security.enabled: "false"
ES_JAVA_OPTS: "-Xms512m -Xmx512m"
ports:
- "0.0.0.0:19200:9200"
- "0.0.0.0:19300:9300"
volumes:
- es_data:/usr/share/elasticsearch/data
healthcheck:
test: ["CMD-SHELL", "curl -fsS 'http://localhost:9200/_cluster/health?wait_for_status=yellow&timeout=3s' | grep -q '\"timed_out\":false'"]
interval: 10s
timeout: 5s
retries: 30
start_period: 30s
volumes:
admin_mysql_data:
es_data:
mysql_data:
pg_data:
redis_data: