143 lines
3.5 KiB
YAML
143 lines
3.5 KiB
YAML
# ========================================
|
||
# 物业管理系统 - 开发环境中间件编排
|
||
# 使用:docker-compose up -d
|
||
# 停止:docker-compose down
|
||
# ========================================
|
||
version: '3.8'
|
||
|
||
services:
|
||
# ====== MySQL 8.0 ======
|
||
mysql:
|
||
image: mysql:8.0
|
||
container_name: pms-mysql
|
||
restart: unless-stopped
|
||
ports:
|
||
- "3306:3306"
|
||
environment:
|
||
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root}
|
||
TZ: Asia/Shanghai
|
||
# 自动创建各服务数据库
|
||
MYSQL_DATABASE: auth_db
|
||
command: >
|
||
--character-set-server=utf8mb4
|
||
--collation-server=utf8mb4_unicode_ci
|
||
--default-authentication-plugin=mysql_native_password
|
||
--lower_case_table_names=1
|
||
volumes:
|
||
- mysql-data:/var/lib/mysql
|
||
- ./docker/mysql/init:/docker-entrypoint-initdb.d
|
||
healthcheck:
|
||
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-p${MYSQL_ROOT_PASSWORD:-root}"]
|
||
interval: 10s
|
||
timeout: 5s
|
||
retries: 5
|
||
networks:
|
||
- pms-net
|
||
|
||
# ====== Redis 7 ======
|
||
redis:
|
||
image: redis:7-alpine
|
||
container_name: pms-redis
|
||
restart: unless-stopped
|
||
ports:
|
||
- "6379:6379"
|
||
command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru
|
||
volumes:
|
||
- redis-data:/data
|
||
healthcheck:
|
||
test: ["CMD", "redis-cli", "ping"]
|
||
interval: 10s
|
||
timeout: 5s
|
||
retries: 5
|
||
networks:
|
||
- pms-net
|
||
|
||
# ====== RabbitMQ 3.12 ======
|
||
rabbitmq:
|
||
image: rabbitmq:3.12-management
|
||
container_name: pms-rabbitmq
|
||
restart: unless-stopped
|
||
ports:
|
||
- "5672:5672" # AMQP 端口
|
||
- "15672:15672" # 管理界面
|
||
environment:
|
||
RABBITMQ_DEFAULT_USER: ${RABBITMQ_USER:-guest}
|
||
RABBITMQ_DEFAULT_PASS: ${RABBITMQ_PASS:-guest}
|
||
volumes:
|
||
- rabbitmq-data:/var/lib/rabbitmq
|
||
healthcheck:
|
||
test: ["CMD", "rabbitmq-diagnostics", "check_port_connectivity"]
|
||
interval: 15s
|
||
timeout: 10s
|
||
retries: 5
|
||
networks:
|
||
- pms-net
|
||
|
||
# ====== Nacos 2.3.0 ======
|
||
nacos:
|
||
image: nacos/nacos-server:v2.3.0
|
||
container_name: pms-nacos
|
||
restart: unless-stopped
|
||
ports:
|
||
- "8848:8848" # Nacos 主端口
|
||
- "9848:9848" # gRPC 端口
|
||
- "9849:9849" # gRPC 端口
|
||
environment:
|
||
MODE: standalone
|
||
PREFER_HOST_MODE: hostname
|
||
SPRING_DATASOURCE_PLATFORM: ""
|
||
NACOS_AUTH_ENABLE: "false"
|
||
JVM_XMS: 256m
|
||
JVM_XMX: 512m
|
||
volumes:
|
||
- nacos-data:/home/nacos/data
|
||
- nacos-logs:/home/nacos/logs
|
||
healthcheck:
|
||
test: ["CMD", "curl", "-f", "http://localhost:8848/nacos/v1/console/health/readiness"]
|
||
interval: 15s
|
||
timeout: 10s
|
||
retries: 10
|
||
networks:
|
||
- pms-net
|
||
|
||
# ====== Elasticsearch 8.x ======
|
||
elasticsearch:
|
||
image: elasticsearch:8.11.0
|
||
container_name: pms-elasticsearch
|
||
restart: unless-stopped
|
||
ports:
|
||
- "9200:9200"
|
||
- "9300:9300"
|
||
environment:
|
||
discovery.type: single-node
|
||
ES_JAVA_OPTS: "-Xms256m -Xmx256m"
|
||
xpack.security.enabled: "false"
|
||
bootstrap.memory_lock: "true"
|
||
ulimits:
|
||
memlock:
|
||
soft: -1
|
||
hard: -1
|
||
volumes:
|
||
- es-data:/usr/share/elasticsearch/data
|
||
healthcheck:
|
||
test: ["CMD-SHELL", "curl -f http://localhost:9200/_cluster/health || exit 1"]
|
||
interval: 15s
|
||
timeout: 10s
|
||
retries: 10
|
||
networks:
|
||
- pms-net
|
||
|
||
# ====== 数据卷 ======
|
||
volumes:
|
||
mysql-data:
|
||
redis-data:
|
||
rabbitmq-data:
|
||
nacos-data:
|
||
nacos-logs:
|
||
es-data:
|
||
|
||
# ====== 网络 ======
|
||
networks:
|
||
pms-net:
|
||
driver: bridge
|