version: '3.8' services: mysql: image: mysql:8.0 container_name: etest-mysql restart: always environment: MYSQL_ROOT_PASSWORD: Tgzz2025+ MYSQL_DATABASE: ruoyi-fastapi MYSQL_USER: cpy_admin MYSQL_PASSWORD: Tgzz2025+ TZ: Asia/Shanghai ports: - "3307:3306" volumes: - mysql_data:/var/lib/mysql - ./sql/init:/docker-entrypoint-initdb.d:ro command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci networks: - etest-network healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-pTgzz2025+"] interval: 10s timeout: 5s retries: 5 start_period: 30s redis: image: redis:7-alpine container_name: etest-redis restart: always ports: - "6379:6379" volumes: - redis_data:/data command: redis-server --appendonly yes networks: - etest-network healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 start_period: 10s backend: build: context: ./ruoyi-fastapi-backend dockerfile: Dockerfile container_name: etest-backend restart: always ports: - "9099:9099" environment: - APP_ENV=prod - DB_HOST=mysql - DB_PORT=3306 - DB_USERNAME=cpy_admin - DB_PASSWORD=Tgzz2025+ - DB_DATABASE=ruoyi-fastapi - REDIS_HOST=redis - REDIS_PORT=6379 depends_on: mysql: condition: service_healthy redis: condition: service_healthy networks: - etest-network volumes: - ./ruoyi-fastapi-backend/logs:/app/logs frontend: build: context: ./ruoyi-fastapi-frontend dockerfile: Dockerfile container_name: etest-frontend restart: always ports: - "80:80" environment: - VITE_APP_BASE_API=http://localhost:9099/prod-api depends_on: - backend networks: - etest-network volumes: mysql_data: redis_data: networks: etest-network: driver: bridge