version: '3.8' services: # MySQL数据库 mysql: image: mysql:8.0 container_name: medical-info-mysql restart: always environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root123} MYSQL_DATABASE: medical_info_system MYSQL_USER: ${MYSQL_USER:-medical_user} MYSQL_PASSWORD: ${MYSQL_PASSWORD:-medical_pass} TZ: Asia/Shanghai ports: - "3306:3306" volumes: - mysql-data:/var/lib/mysql - ./database/schema.sql:/docker-entrypoint-initdb.d/1-schema.sql - ./database/sample_data.sql:/docker-entrypoint-initdb.d/2-sample_data.sql command: --default-authentication-plugin=mysql_native_password networks: - medical-info-network # 后端Spring Boot应用 backend: build: context: ./backend dockerfile: Dockerfile container_name: medical-info-backend restart: always environment: SPRING_PROFILES_ACTIVE: ${SPRING_PROFILES_ACTIVE:-prod} DB_HOST: mysql DB_PORT: 3306 DB_NAME: medical_info_system DB_USERNAME: ${MYSQL_USER:-medical_user} DB_PASSWORD: ${MYSQL_PASSWORD:-medical_pass} JWT_SECRET: ${JWT_SECRET:-your-secret-key-change-in-production} DIFY_API_URL: ${DIFY_API_URL:-https://api.dify.ai/v1} DIFY_API_KEY: ${DIFY_API_KEY} LLM_API_URL: ${LLM_API_URL:-https://api.openai.com/v1} LLM_API_KEY: ${LLM_API_KEY} LLM_MODEL: ${LLM_MODEL:-gpt-4} ports: - "8080:8080" volumes: - ./downloads:/app/downloads - ./logs:/app/logs depends_on: - mysql networks: - medical-info-network # 前端Vue3应用 frontend: build: context: ./frontend dockerfile: Dockerfile container_name: medical-info-frontend restart: always ports: - "80:80" depends_on: - backend networks: - medical-info-network volumes: mysql-data: driver: local networks: medical-info-network: driver: bridge