# Docker Compose开发环境配置文件 # 若依框架前后端分离Docker部署方案 - 开发环境 # Requirements: 5.3, 6.5 version: '3.8' services: # Redis缓存服务 - 开发环境配置 anxin-redis: image: redis:7.2-alpine container_name: anxin-redis-dev restart: unless-stopped environment: TZ: Asia/Shanghai ports: - "${REDIS_PORT:-6379}:6379" volumes: - redis-data-dev:/data - redis-logs-dev:/var/log/redis networks: - anxin-dev-network deploy: resources: limits: memory: ${REDIS_MEMORY_LIMIT:-128M} cpus: '${REDIS_CPU_LIMIT:-0.25}' healthcheck: test: ["CMD", "redis-cli", "ping"] timeout: 10s retries: 5 interval: 30s start_period: 30s command: redis-server --appendonly yes --maxmemory 100mb --maxmemory-policy allkeys-lru # MySQL数据库服务 - 开发环境配置 anxin-mysql: image: mysql:8.0.36 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.dev:/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 anxin-redis: 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: # Redis数据持久化卷 redis-data-dev: driver: local driver_opts: type: none o: bind device: ${REDIS_DATA_PATH:-./data/development/redis} # Redis日志卷 redis-logs-dev: driver: local driver_opts: type: none o: bind device: ${REDIS_LOG_PATH:-./data/development/redis-logs} # 数据库数据持久化卷 mysql-data-dev: driver: local driver_opts: type: none o: bind device: ${MYSQL_DATA_PATH:-./data/development/mysql} # 数据库日志卷 mysql-logs-dev: driver: local driver_opts: type: none o: bind device: ${MYSQL_LOG_PATH:-./data/development/mysql-logs} # 后端应用日志卷 backend-logs-dev: driver: local driver_opts: type: none o: bind device: ${BACKEND_LOG_PATH:-./data/development/backend-logs} # 后端文件上传卷 backend-uploads-dev: driver: local driver_opts: type: none o: bind device: ${BACKEND_UPLOAD_PATH:-./data/development/uploads} # 前端Nginx日志卷 frontend-logs-dev: driver: local driver_opts: type: none o: bind device: ${FRONTEND_LOG_PATH:-./data/development/nginx-logs}