docker-compose.prod.yml 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. services:
  2. # ========== Milvus 向量库及其依赖(与 MySQL 一样在 Docker 中运行) ==========
  3. etcd:
  4. image: quay.io/coreos/etcd:v3.5.5
  5. container_name: milvus-etcd
  6. environment:
  7. - ETCD_AUTO_COMPACTION_MODE=revision
  8. - ETCD_AUTO_COMPACTION_RETENTION=1000
  9. - ETCD_QUOTA_BACKEND_BYTES=4294967296
  10. - ETCD_SNAPSHOT_COUNT=50000
  11. volumes:
  12. - etcd_data:/etcd
  13. command: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd
  14. healthcheck:
  15. test: ["CMD", "etcdctl", "endpoint", "health"]
  16. interval: 30s
  17. timeout: 20s
  18. retries: 3
  19. networks:
  20. - ai-cs-network
  21. restart: unless-stopped
  22. minio:
  23. image: minio/minio:RELEASE.2023-03-20T20-16-18Z
  24. container_name: milvus-minio
  25. environment:
  26. MINIO_ACCESS_KEY: minioadmin
  27. MINIO_SECRET_KEY: minioadmin
  28. volumes:
  29. - minio_data:/minio_data
  30. command: minio server /minio_data --console-address ":9001"
  31. healthcheck:
  32. test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
  33. interval: 30s
  34. timeout: 20s
  35. retries: 3
  36. networks:
  37. - ai-cs-network
  38. restart: unless-stopped
  39. milvus-standalone:
  40. image: milvusdb/milvus:v2.3.3
  41. container_name: milvus-standalone
  42. command: ["milvus", "run", "standalone"]
  43. environment:
  44. ETCD_ENDPOINTS: etcd:2379
  45. MINIO_ADDRESS: minio:9000
  46. volumes:
  47. - milvus_data:/var/lib/milvus
  48. ports:
  49. - "${MILVUS_PORT:-19530}:19530"
  50. depends_on:
  51. etcd:
  52. condition: service_healthy
  53. minio:
  54. condition: service_healthy
  55. healthcheck:
  56. test: ["CMD", "curl", "-f", "http://localhost:9091/healthz"]
  57. interval: 30s
  58. start_period: 90s
  59. timeout: 20s
  60. retries: 5
  61. networks:
  62. - ai-cs-network
  63. restart: unless-stopped
  64. # MySQL 数据库
  65. mysql:
  66. image: mysql:8.0
  67. container_name: ai-cs-mysql
  68. environment:
  69. MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-rootpassword}
  70. MYSQL_DATABASE: ${MYSQL_DATABASE:-ai_cs}
  71. MYSQL_USER: ${MYSQL_USER:-ai_cs_user}
  72. MYSQL_PASSWORD: ${MYSQL_PASSWORD:-ai_cs_password}
  73. ports:
  74. - "${MYSQL_PORT:-3306}:3306"
  75. volumes:
  76. - mysql_data:/var/lib/mysql
  77. command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
  78. healthcheck:
  79. test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MYSQL_ROOT_PASSWORD:-rootpassword}"]
  80. interval: 10s
  81. timeout: 5s
  82. retries: 5
  83. start_period: 30s
  84. networks:
  85. - ai-cs-network
  86. restart: unless-stopped
  87. security_opt:
  88. - no-new-privileges:true
  89. cap_drop:
  90. - ALL
  91. cap_add:
  92. - CHOWN
  93. - DAC_OVERRIDE
  94. - FOWNER
  95. resources:
  96. limits:
  97. cpus: '2.0'
  98. memory: 2G
  99. reservations:
  100. cpus: '0.5'
  101. memory: 512M
  102. # 后端服务(使用预构建镜像)
  103. backend:
  104. image: ${BACKEND_IMAGE:-537yaha/ai-cs-backend:latest}
  105. container_name: ai-cs-backend
  106. environment:
  107. DB_HOST: mysql
  108. DB_PORT: 3306
  109. DB_USER: ${MYSQL_USER:-ai_cs_user}
  110. DB_PASSWORD: ${MYSQL_PASSWORD:-ai_cs_password}
  111. DB_NAME: ${MYSQL_DATABASE:-ai_cs}
  112. ADMIN_USERNAME: ${ADMIN_USERNAME:-admin}
  113. ADMIN_PASSWORD: ${ADMIN_PASSWORD:-admin123}
  114. SERVER_HOST: 0.0.0.0
  115. SERVER_PORT: 8080
  116. GIN_MODE: ${GIN_MODE:-release}
  117. ENCRYPTION_KEY: ${ENCRYPTION_KEY:-default-key}
  118. MILVUS_HOST: milvus-standalone
  119. MILVUS_PORT: 19530
  120. ports:
  121. - "${BACKEND_PORT:-18080}:8080"
  122. volumes:
  123. - ./backend/uploads:/app/uploads
  124. depends_on:
  125. mysql:
  126. condition: service_healthy
  127. milvus-standalone:
  128. condition: service_healthy
  129. networks:
  130. - ai-cs-network
  131. restart: unless-stopped
  132. security_opt:
  133. - no-new-privileges:true
  134. cap_drop:
  135. - ALL
  136. cap_add:
  137. - NET_BIND_SERVICE
  138. read_only: true
  139. tmpfs:
  140. - /tmp
  141. - /var/tmp
  142. resources:
  143. limits:
  144. cpus: '2.0'
  145. memory: 2G
  146. reservations:
  147. cpus: '0.5'
  148. memory: 512M
  149. # 前端服务(使用预构建镜像)
  150. frontend:
  151. image: ${FRONTEND_IMAGE:-537yaha/ai-cs-frontend:latest}
  152. container_name: ai-cs-frontend
  153. environment:
  154. NEXT_PUBLIC_API_BASE_URL: ${NEXT_PUBLIC_API_BASE_URL:-http://localhost:8080}
  155. ports:
  156. - "${FRONTEND_PORT:-3000}:3000"
  157. depends_on:
  158. - backend
  159. networks:
  160. - ai-cs-network
  161. restart: unless-stopped
  162. security_opt:
  163. - no-new-privileges:true
  164. cap_drop:
  165. - ALL
  166. cap_add:
  167. - NET_BIND_SERVICE
  168. read_only: true # 只读文件系统(防止写入恶意文件)
  169. tmpfs:
  170. - /tmp
  171. - /var/tmp
  172. - /app/.next/cache # Next.js 需要缓存目录
  173. resources:
  174. limits:
  175. cpus: '2.0'
  176. memory: 2G
  177. reservations:
  178. cpus: '0.5'
  179. memory: 512M
  180. volumes:
  181. mysql_data:
  182. driver: local
  183. etcd_data:
  184. driver: local
  185. minio_data:
  186. driver: local
  187. milvus_data:
  188. driver: local
  189. networks:
  190. ai-cs-network:
  191. driver: bridge