test-backend/deploy/docker-compose.yml

124 lines
3.2 KiB
YAML
Raw Permalink 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.

# ============================================
# 单体部署编排
# 中间件通过 profiles 按需启用:
# --profile mysql → Docker MySQL
# --profile redis → Docker Redis
# --profile minio → Docker MinIO
# --profile frontend → 前端 Nginx
# 启动顺序由 deploy.sh 控制app 不写 depends_on
# ============================================
services:
mysql:
build: ../db
image: ${APP_NAME}-mysql:latest
container_name: ${APP_NAME}-mysql
restart: unless-stopped
ports:
- "${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
app:
build:
context: ..
dockerfile: Dockerfile
image: ${APP_NAME}-backend:latest
container_name: ${APP_NAME}-backend
restart: unless-stopped
ports:
- "0.0.0.0:${APP_PORT}:8081"
env_file:
- .env
environment:
SPRING_PROFILES_ACTIVE: prod
volumes:
- ./config/application-prod.yml:/app/config/application-prod.yml:ro
- /opt/upFiles:/opt/upFiles
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}-backend:8081/ghb
profiles:
- frontend
networks:
- default
volumes:
mysql-data:
redis-data:
minio-data:
networks:
default:
name: ${NETWORK_NAME:-ghb-net}