anxin-ruoyi/docker/docker-compose.development.yml
2026-01-05 01:46:20 +08:00

179 lines
5.1 KiB
YAML

# Docker Compose开发环境配置文件
# 若依框架前后端分离Docker部署方案 - 开发环境
# Requirements: 5.3, 6.5
version: '3.8'
services:
# MySQL数据库服务 - 开发环境配置
anxin-mysql:
image: mysql:8.0
container_name: anxin-mysql-dev
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-dev_root_password}
MYSQL_DATABASE: ${DB_NAME:-anxin_dev}
MYSQL_USER: ${DB_USER:-anxin_dev}
MYSQL_PASSWORD: ${DB_PASSWORD:-dev_password}
TZ: Asia/Shanghai
ports:
- "${DB_PORT:-3306}:3306"
volumes:
- mysql-data-dev:/var/lib/mysql
- ./database/init:/docker-entrypoint-initdb.d:ro
- ./configs/my.cnf:/etc/mysql/conf.d/my.cnf:ro
- mysql-logs-dev:/var/log/mysql
networks:
- anxin-dev-network
deploy:
resources:
limits:
memory: ${DATABASE_MEMORY_LIMIT:-256M}
cpus: '${DATABASE_CPU_LIMIT:-0.25}'
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MYSQL_ROOT_PASSWORD:-dev_root_password}"]
timeout: 20s
retries: 10
interval: 30s
start_period: 60s
# Spring Boot后端服务 - 开发环境配置
anxin-backend:
build:
context: ../
dockerfile: docker/backend/Dockerfile
target: development
image: anxin-backend:dev
container_name: anxin-backend-dev
restart: unless-stopped
environment:
SPRING_PROFILES_ACTIVE: ${SPRING_PROFILES_ACTIVE:-dev}
SPRING_DATASOURCE_URL: jdbc:mysql://anxin-mysql:3306/${DB_NAME:-anxin_dev}?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8
SPRING_DATASOURCE_USERNAME: ${DB_USER:-anxin_dev}
SPRING_DATASOURCE_PASSWORD: ${DB_PASSWORD:-dev_password}
JAVA_OPTS: ${JAVA_OPTS:--Xms256m -Xmx512m -Djava.security.egd=file:/dev/./urandom}
LOG_LEVEL: ${LOG_LEVEL:-DEBUG}
TZ: Asia/Shanghai
# 开发环境特有配置
SPRING_DEVTOOLS_RESTART_ENABLED: true
SPRING_DEVTOOLS_LIVERELOAD_ENABLED: true
LOGGING_LEVEL_COM_RUOYI: DEBUG
LOGGING_LEVEL_ROOT: DEBUG
ports:
- "${BACKEND_PORT:-8080}:8080"
- "35729:35729" # LiveReload端口
volumes:
- backend-logs-dev:/app/logs
- backend-uploads-dev:/app/uploadPath
- ./configs:/app/config:ro
# 开发环境代码热重载
- ../ruoyi-admin/src:/app/src:ro
networks:
- anxin-dev-network
depends_on:
anxin-mysql:
condition: service_healthy
deploy:
resources:
limits:
memory: ${BACKEND_MEMORY_LIMIT:-512M}
cpus: '${BACKEND_CPU_LIMIT:-0.5}'
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:8080/actuator/health || exit 1"]
timeout: 30s
retries: 5
interval: 30s
start_period: 90s
# Vue3前端服务 - 开发环境配置
anxin-frontend:
build:
context: ../
dockerfile: docker/frontend/Dockerfile
target: development
args:
API_BASE_URL: ${API_BASE_URL:-http://localhost:8080}
NODE_ENV: development
image: anxin-frontend:dev
container_name: anxin-frontend-dev
restart: unless-stopped
environment:
TZ: Asia/Shanghai
NODE_ENV: development
ports:
- "${FRONTEND_PORT:-3000}:80"
- "24678:24678" # Vite HMR端口
volumes:
- frontend-logs-dev:/var/log/nginx
- ./configs/nginx.conf.dev:/etc/nginx/conf.d/default.conf:ro
# 开发环境源码挂载用于热重载
- ../RuoYi-Vue3/src:/app/src:ro
networks:
- anxin-dev-network
depends_on:
anxin-backend:
condition: service_healthy
deploy:
resources:
limits:
memory: ${FRONTEND_MEMORY_LIMIT:-128M}
cpus: '${FRONTEND_CPU_LIMIT:-0.25}'
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost/ || exit 1"]
timeout: 10s
retries: 3
interval: 30s
start_period: 30s
# 网络配置 - 开发环境
networks:
anxin-dev-network:
name: ${NETWORK_NAME:-anxin-dev-network}
driver: bridge
ipam:
driver: default
config:
- subnet: ${SUBNET:-172.21.0.0/16}
gateway: ${GATEWAY:-172.21.0.1}
# 卷配置 - 开发环境
volumes:
# 数据库数据持久化卷
mysql-data-dev:
driver: local
driver_opts:
type: none
o: bind
device: ${MYSQL_DATA_PATH:-./data/dev/mysql}
# 数据库日志卷
mysql-logs-dev:
driver: local
driver_opts:
type: none
o: bind
device: ${MYSQL_LOG_PATH:-./data/dev/mysql-logs}
# 后端应用日志卷
backend-logs-dev:
driver: local
driver_opts:
type: none
o: bind
device: ${BACKEND_LOG_PATH:-./data/dev/backend-logs}
# 后端文件上传卷
backend-uploads-dev:
driver: local
driver_opts:
type: none
o: bind
device: ${BACKEND_UPLOAD_PATH:-./data/dev/uploads}
# 前端Nginx日志卷
frontend-logs-dev:
driver: local
driver_opts:
type: none
o: bind
device: ${FRONTEND_LOG_PATH:-./data/dev/nginx-logs}