# ============================================ # Spring Cloud 微服务编排 # Nacos + Gateway + System + MySQL + Redis + MinIO(可选) # 中间件通过 profiles 按需启用: # --profile mysql → Docker MySQL(external 时不激活) # --profile redis → Docker Redis(external 时不激活) # --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}