202 lines
5.5 KiB
YAML
202 lines
5.5 KiB
YAML
# ============================================
|
||
# 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}
|