docker-compose_example.yaml 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. # 应用服务
  2. services:
  3. # 数据库服务
  4. mysql:
  5. container_name: mysql
  6. image: mysql:8.0
  7. restart: always
  8. environment:
  9. TZ: "Asia/Shanghai"
  10. MYSQL_ROOT_PASSWORD: "your_mysql_root_password"
  11. MYSQL_DATABASE: "fastapiadmin"
  12. MYSQL_PASSWORD: "your_mysql_password"
  13. MYSQL_USER: "fastapiadmin"
  14. MYSQL_TZINFO_TO_SYS_TABLES: 1 # 初始化MySQL时区表,解决时差问题
  15. ports:
  16. - "3306:3306"
  17. volumes:
  18. # 挂载数据卷,持久化MySQL数据(docker-compose down不会删除数据)
  19. - ./devops/mysql/data:/var/lib/mysql
  20. # 挂载宿主机时区文件,双重保障时区同步(只读,避免容器修改)
  21. - /etc/localtime:/etc/localtime:ro
  22. - /etc/timezone:/etc/timezone:ro
  23. networks:
  24. - app_network
  25. # 健康检查:检测MySQL是否真正就绪,避免后端启动早于MySQL
  26. healthcheck:
  27. test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-pyour_mysql_root_password"]
  28. interval: 5s # 每5秒检测一次
  29. timeout: 30s # 超时时间30秒
  30. retries: 10 # 重试10次,失败则认为容器未就绪
  31. start_period: 20s # 容器启动后,延迟20秒开始检测
  32. # redis服务
  33. redis:
  34. container_name: redis
  35. image: redis:7.0
  36. restart: always
  37. environment:
  38. TZ: "Asia/Shanghai"
  39. ports:
  40. - "6379:6379"
  41. volumes:
  42. # 挂载Redis配置文件,实现自定义配置
  43. - ./devops/redis/data:/data
  44. command: redis-server --requirepass your_redis_password
  45. networks:
  46. - app_network
  47. # 后端服务
  48. backend:
  49. container_name: backend
  50. build:
  51. context: ./
  52. dockerfile: ./devops/backend/Dockerfile
  53. image: backend:latest
  54. restart: always
  55. environment:
  56. TZ: "Asia/Shanghai"
  57. DATABASE_HOST: "mysql"
  58. DATABASE_PASSWORD: "your_mysql_password"
  59. REDIS_HOST: "redis"
  60. REDIS_PASSWORD: "your_redis_password"
  61. ports:
  62. - "8001:8001"
  63. volumes:
  64. - ./backend:/home
  65. depends_on:
  66. - mysql
  67. - redis
  68. networks:
  69. - app_network
  70. # 前端nginx服务
  71. nginx:
  72. container_name: nginx
  73. image: nginx:latest
  74. restart: always
  75. environment:
  76. TZ: "Asia/Shanghai"
  77. ports:
  78. - "80:80"
  79. - "443:443"
  80. volumes:
  81. - ./devops/nginx/nginx.conf:/etc/nginx/nginx.conf
  82. # 挂载前端dist目录,实现动态加载前端资源
  83. - ./devops/nginx/frontend:/usr/share/nginx/html/frontend
  84. # 挂载H5dist目录,实现动态加载H5资源
  85. - ./devops/nginx/fastapp:/usr/share/nginx/html/fastapp
  86. # 挂载官网dist目录,实现动态加载文档资源
  87. - ./devops/nginx/fastdocs:/usr/share/nginx/html/fastdocs
  88. # ssl 证书,如果无证书则注释这行,并在nginx.conf中注释ssl相关配置
  89. - ./devops/nginx/ssl:/etc/nginx/ssl:ro
  90. depends_on:
  91. - backend
  92. networks:
  93. - app_network
  94. # 网络
  95. networks:
  96. app_network:
  97. driver: bridge