test-backend/deploy/docker-compose.cloud.yml

202 lines
5.5 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ============================================
# Spring Cloud 微服务编排
# Nacos + Gateway + System + MySQL + Redis + MinIO(可选)
# 中间件通过 profiles 按需启用:
# --profile mysql → Docker MySQLexternal 时不激活)
# --profile redis → Docker Redisexternal 时不激活)
# --profile minio → Docker MinIO
# --profile frontend → 前端 Nginx
# 启动顺序由 deploy.sh 控制
# Demo 服务默认注释,按需取消
# ============================================
services:
mysql:
build: ../db
image: ${APP_NAME}-mysql:latest
container_name: ${APP_NAME}-mysql
restart: unless-stopped
ports:
- "0.0.0.0:${MYSQL_PORT:-3306}:3306"
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${DB_NAME}
TZ: Asia/Shanghai
command: --lower_case_table_names=1
volumes:
- mysql-data:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MYSQL_ROOT_PASSWORD}"]
interval: 10s
timeout: 5s
retries: 10
start_period: 60s
profiles:
- mysql
networks:
- default
redis:
image: redis:7-alpine
container_name: ${APP_NAME}-redis
restart: unless-stopped
ports:
- "0.0.0.0:${REDIS_HOST_PORT:-6379}:6379"
command: redis-server --appendonly yes ${REDIS_PASS:+--requirepass $REDIS_PASS}
volumes:
- redis-data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
profiles:
- redis
networks:
- default
# MinIO 文件存储(可选,通过 --profile minio 启用)
minio:
image: minio/minio:RELEASE.2025-04-08T15-41-24Z
container_name: ${APP_NAME}-minio
restart: unless-stopped
ports:
- "${MINIO_PORT:-9000}:9000"
- "${MINIO_CONSOLE_PORT:-9001}:9001"
environment:
MINIO_ROOT_USER: ${MINIO_ACCESS_KEY:-minioadmin}
MINIO_ROOT_PASSWORD: ${MINIO_SECRET_KEY:-minioadmin}
command: server /data --console-address ":9001"
volumes:
- minio-data:/data
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 10s
retries: 3
profiles:
- minio
networks:
- default
nacos:
build:
context: ..
dockerfile: ghb-server-cloud/ghb-cloud-nacos/Dockerfile
image: ${APP_NAME}-nacos:latest
container_name: ${APP_NAME}-nacos
restart: unless-stopped
ports:
- "0.0.0.0:${NACOS_PORT:-8848}:8848"
environment:
MYSQL_HOST: ${MYSQL_HOST:-mysql}
MYSQL_PORT: "${MYSQL_PORT:-3306}"
MYSQL_DB: nacos
MYSQL_USER: ${MYSQL_USER:-root}
MYSQL_PWD: ${MYSQL_PASS:-${MYSQL_ROOT_PASSWORD}}
JAVA_OPTS: "-Xms512m -Xmx512m"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8848/nacos/v1/console/health/liveness"]
interval: 15s
timeout: 10s
retries: 20
start_period: 90s
networks:
- default
system:
build:
context: ..
dockerfile: ghb-server-cloud/ghb-system-cloud-start/Dockerfile
image: ${APP_NAME}-system-cloud:latest
container_name: ${APP_NAME}-system-cloud
restart: unless-stopped
ports:
- "0.0.0.0:${SYSTEM_PORT:-7001}:7001"
env_file:
- .env
environment:
SPRING_PROFILES_ACTIVE: dev
SPRING_CLOUD_NACOS_DISCOVERY_SERVER-ADDR: nacos:8848
SPRING_CLOUD_NACOS_CONFIG_SERVER-ADDR: nacos:8848
volumes:
- /opt/upFiles:/opt/upFiles
depends_on:
nacos:
condition: service_healthy
networks:
- default
gateway:
build:
context: ..
dockerfile: ghb-server-cloud/ghb-cloud-gateway/Dockerfile
image: ${APP_NAME}-gateway:latest
container_name: ${APP_NAME}-gateway
restart: unless-stopped
ports:
- "0.0.0.0:${GATEWAY_PORT:-9999}:9999"
env_file:
- .env
environment:
SPRING_PROFILES_ACTIVE: dev
SPRING_CLOUD_NACOS_DISCOVERY_SERVER-ADDR: nacos:8848
SPRING_CLOUD_NACOS_CONFIG_SERVER-ADDR: nacos:8848
depends_on:
nacos:
condition: service_healthy
system:
condition: service_started
networks:
- default
# 前端(可选,通过 --profile frontend 启用)
# 启用前需先在 ghb-frontend 目录执行 pnpm build 生成 dist/
frontend:
build:
context: ../../ghb-frontend
dockerfile: deploy/Dockerfile
image: ${APP_NAME}-frontend:latest
container_name: ${APP_NAME}-frontend
restart: unless-stopped
ports:
- "${FRONTEND_PORT:-80}:80"
environment:
BACKEND_PROXY: http://${APP_NAME}-gateway:${GATEWAY_PORT:-9999}
depends_on:
- gateway
profiles:
- frontend
networks:
- default
# Demo 服务(默认不启用,需要时取消注释)
#demo:
# build:
# context: ..
# dockerfile: ghb-server-cloud/ghb-demo-cloud-start/Dockerfile
# image: ${APP_NAME}-demo-cloud:latest
# container_name: ${APP_NAME}-demo-cloud
# restart: unless-stopped
# ports:
# - "0.0.0.0:${DEMO_PORT:-7002}:7002"
# env_file:
# - .env
# environment:
# SPRING_PROFILES_ACTIVE: dev
# SPRING_CLOUD_NACOS_DISCOVERY_SERVER-ADDR: nacos:8848
# SPRING_CLOUD_NACOS_CONFIG_SERVER-ADDR: nacos:8848
# depends_on:
# nacos:
# condition: service_healthy
# networks:
# - default
volumes:
mysql-data:
redis-data:
minio-data:
networks:
default:
name: ${NETWORK_NAME:-ghb-net}