# 应用服务 services: # 数据库服务 mysql: container_name: mysql image: mysql:8.0 restart: always environment: TZ: "Asia/Shanghai" MYSQL_ROOT_PASSWORD: "your_mysql_root_password" MYSQL_DATABASE: "fastapiadmin" MYSQL_PASSWORD: "your_mysql_password" MYSQL_USER: "fastapiadmin" MYSQL_TZINFO_TO_SYS_TABLES: 1 # 初始化MySQL时区表,解决时差问题 ports: - "3306:3306" volumes: # 挂载数据卷,持久化MySQL数据(docker-compose down不会删除数据) - ./devops/mysql/data:/var/lib/mysql # 挂载宿主机时区文件,双重保障时区同步(只读,避免容器修改) - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro networks: - app_network # 健康检查:检测MySQL是否真正就绪,避免后端启动早于MySQL healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-pyour_mysql_root_password"] interval: 5s # 每5秒检测一次 timeout: 30s # 超时时间30秒 retries: 10 # 重试10次,失败则认为容器未就绪 start_period: 20s # 容器启动后,延迟20秒开始检测 # redis服务 redis: container_name: redis image: redis:7.0 restart: always environment: TZ: "Asia/Shanghai" ports: - "6379:6379" volumes: # 挂载Redis配置文件,实现自定义配置 - ./devops/redis/data:/data command: redis-server --requirepass your_redis_password networks: - app_network # 后端服务 backend: container_name: backend build: context: ./ dockerfile: ./devops/backend/Dockerfile image: backend:latest restart: always environment: TZ: "Asia/Shanghai" DATABASE_HOST: "mysql" DATABASE_PASSWORD: "your_mysql_password" REDIS_HOST: "redis" REDIS_PASSWORD: "your_redis_password" ports: - "8001:8001" volumes: - ./backend:/home depends_on: - mysql - redis networks: - app_network # 前端nginx服务 nginx: container_name: nginx image: nginx:latest restart: always environment: TZ: "Asia/Shanghai" ports: - "80:80" - "443:443" volumes: - ./devops/nginx/nginx.conf:/etc/nginx/nginx.conf # 挂载前端dist目录,实现动态加载前端资源 - ./devops/nginx/frontend:/usr/share/nginx/html/frontend # 挂载H5dist目录,实现动态加载H5资源 - ./devops/nginx/fastapp:/usr/share/nginx/html/fastapp # 挂载官网dist目录,实现动态加载文档资源 - ./devops/nginx/fastdocs:/usr/share/nginx/html/fastdocs # ssl 证书,如果无证书则注释这行,并在nginx.conf中注释ssl相关配置 - ./devops/nginx/ssl:/etc/nginx/ssl:ro depends_on: - backend networks: - app_network # 网络 networks: app_network: driver: bridge