# ============================================================ # 药品管理系统 — Docker Compose 编排 # 启动: docker-compose up -d # ============================================================ version: '3.8' services: mysql: image: mysql:8.0 container_name: medicine-mysql restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: ${DB_PASSWORD:-root} MYSQL_DATABASE: ${DB_NAME:-medicine_manager} TZ: Asia/Shanghai ports: - "3306:3306" volumes: - mysql_data:/var/lib/mysql - ./backend/src/main/resources/database/init.sql:/docker-entrypoint-initdb.d/init.sql healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] interval: 10s timeout: 5s retries: 5 redis: image: redis:7-alpine container_name: medicine-redis restart: unless-stopped ports: - "6379:6379" volumes: - redis_data:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 backend: build: context: ./backend dockerfile: Dockerfile container_name: medicine-backend restart: unless-stopped depends_on: mysql: condition: service_healthy environment: DB_HOST: mysql DB_PORT: 3306 DB_NAME: ${DB_NAME:-medicine_manager} DB_USERNAME: root DB_PASSWORD: ${DB_PASSWORD:-root} JWT_SECRET: ${JWT_SECRET} SERVER_PORT: 8080 SPRING_DATA_REDIS_HOST: redis SPRING_DATA_REDIS_PORT: 6379 ports: - "8080:8080" frontend: build: context: ./frontend dockerfile: Dockerfile container_name: medicine-frontend restart: unless-stopped depends_on: - backend ports: - "80:80" volumes: mysql_data: redis_data: