| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- # 应用服务
- 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
|