docker-compose.yml 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. version: '3.8'
  2. services:
  3. # ============================================
  4. # 多模态解析服务 (Python/FastAPI)
  5. # ============================================
  6. parse-service:
  7. build:
  8. context: ./parse-service
  9. dockerfile: Dockerfile
  10. container_name: parse-service
  11. ports:
  12. - "8000:8000"
  13. environment:
  14. - UPLOAD_DIR=/tmp/parse-service/uploads
  15. # AI 模型地址
  16. - MINERU_API_URL=http://10.192.72.13:7284
  17. - QWEN_VL_URL=http://10.192.72.13:7280
  18. - QWEN_ASR_URL=http://10.192.72.13:7283
  19. volumes:
  20. - parse-service-data:/tmp/parse-service/uploads
  21. networks:
  22. - multimodal-network
  23. healthcheck:
  24. test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
  25. interval: 30s
  26. timeout: 10s
  27. retries: 3
  28. restart: unless-stopped
  29. # ============================================
  30. # 向量化服务 (Java/Spring Boot)
  31. # ============================================
  32. embedding-api:
  33. build:
  34. context: ./schedule-embedding-api
  35. dockerfile: Dockerfile
  36. container_name: embedding-api
  37. ports:
  38. - "8084:8084"
  39. environment:
  40. - SPRING_PROFILES_ACTIVE=prod
  41. # Elasticsearch 配置
  42. - ELASTICSEARCH_URL=http://elasticsearch:9200
  43. # MySQL 配置
  44. - MYSQL_URL=jdbc:mysql://mysql:3306/multimodel?useUnicode=true&characterEncoding=utf-8
  45. - MYSQL_USERNAME=root
  46. - MYSQL_PASSWORD=root123456
  47. depends_on:
  48. - elasticsearch
  49. - mysql
  50. networks:
  51. - multimodal-network
  52. restart: unless-stopped
  53. # ============================================
  54. # Flink JobManager
  55. # ============================================
  56. flink-jobmanager:
  57. image: flink:1.18.1-scala_2.12-java17
  58. container_name: flink-jobmanager
  59. ports:
  60. - "8081:8081"
  61. command: jobmanager
  62. environment:
  63. - |
  64. FLINK_PROPERTIES=
  65. jobmanager.rpc.address: flink-jobmanager
  66. execution.checkpointing.interval: 60000
  67. state.backend: filesystem
  68. state.checkpoints.dir: /tmp/flink-checkpoints
  69. state.savepoints.dir: /tmp/flink-savepoints
  70. volumes:
  71. - flink-checkpoints:/tmp/flink-checkpoints
  72. - flink-savepoints:/tmp/flink-savepoints
  73. - ./schedule-flink/target:/opt/flink/usrlib
  74. networks:
  75. - multimodal-network
  76. restart: unless-stopped
  77. # ============================================
  78. # Flink TaskManager
  79. # ============================================
  80. flink-taskmanager:
  81. image: flink:1.18.1-scala_2.12-java17
  82. container_name: flink-taskmanager
  83. depends_on:
  84. - flink-jobmanager
  85. command: taskmanager
  86. deploy:
  87. replicas: 2
  88. environment:
  89. - |
  90. FLINK_PROPERTIES=
  91. jobmanager.rpc.address: flink-jobmanager
  92. taskmanager.numberOfTaskSlots: 4
  93. volumes:
  94. - flink-checkpoints:/tmp/flink-checkpoints
  95. - flink-savepoints:/tmp/flink-savepoints
  96. networks:
  97. - multimodal-network
  98. restart: unless-stopped
  99. # ============================================
  100. # Elasticsearch (向量存储 + 全文检索)
  101. # ============================================
  102. elasticsearch:
  103. image: elasticsearch:8.12.0
  104. container_name: elasticsearch
  105. ports:
  106. - "9200:9200"
  107. - "9300:9300"
  108. environment:
  109. - discovery.type=single-node
  110. - xpack.security.enabled=false
  111. - ES_JAVA_OPTS=-Xms4g -Xmx4g
  112. volumes:
  113. - es-data:/usr/share/elasticsearch/data
  114. networks:
  115. - multimodal-network
  116. restart: unless-stopped
  117. # ============================================
  118. # MySQL (元数据存储)
  119. # ============================================
  120. mysql:
  121. image: mysql:8.0
  122. container_name: mysql
  123. ports:
  124. - "3306:3306"
  125. environment:
  126. - MYSQL_ROOT_PASSWORD=root123456
  127. - MYSQL_DATABASE=multimodel
  128. volumes:
  129. - mysql-data:/var/lib/mysql
  130. networks:
  131. - multimodal-network
  132. restart: unless-stopped
  133. # ============================================
  134. # 管理前端 (Vue.js)
  135. # ============================================
  136. schedule-admin:
  137. build:
  138. context: ./schedule-admin
  139. dockerfile: Dockerfile
  140. container_name: schedule-admin
  141. ports:
  142. - "8080:80"
  143. depends_on:
  144. - parse-service
  145. - embedding-api
  146. networks:
  147. - multimodal-network
  148. restart: unless-stopped
  149. volumes:
  150. parse-service-data:
  151. flink-checkpoints:
  152. flink-savepoints:
  153. es-data:
  154. mysql-data:
  155. networks:
  156. multimodal-network:
  157. driver: bridge