25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 
 

237 satır
6.6 KiB

  1. x-app-env: &app-env
  2. env_file:
  3. - .env
  4. restart: unless-stopped
  5. networks:
  6. - emp-net
  7. x-java-depends: &java-depends
  8. nacos:
  9. condition: service_healthy
  10. mysql:
  11. condition: service_healthy
  12. redis:
  13. condition: service_healthy
  14. services:
  15. mysql:
  16. image: ${MYSQL_IMAGE:-mysql:8.0}
  17. restart: unless-stopped
  18. ports:
  19. - "0.0.0.0:${MYSQL_HOST_PORT:-23306}:3306"
  20. environment:
  21. TZ: Asia/Shanghai
  22. MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
  23. MYSQL_DATABASE: ${MYSQL_DATABASE:-emp}
  24. command:
  25. - --character-set-server=utf8mb4
  26. - --collation-server=utf8mb4_0900_ai_ci
  27. - --default-time-zone=+08:00
  28. - --max-connections=1000
  29. volumes:
  30. - mysql_data:/var/lib/mysql
  31. healthcheck:
  32. test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 -uroot -p\"$${MYSQL_ROOT_PASSWORD}\" --silent"]
  33. interval: 10s
  34. timeout: 5s
  35. retries: 30
  36. networks:
  37. - emp-net
  38. redis:
  39. image: ${REDIS_IMAGE:-redis:7-alpine}
  40. restart: unless-stopped
  41. environment:
  42. REDIS_PASSWORD: ${REDIS_PASSWORD}
  43. command: ["sh", "-c", "redis-server --appendonly yes --requirepass \"$${REDIS_PASSWORD}\""]
  44. volumes:
  45. - redis_data:/data
  46. healthcheck:
  47. test: ["CMD-SHELL", "redis-cli -a \"$${REDIS_PASSWORD}\" ping | grep -q PONG"]
  48. interval: 10s
  49. timeout: 5s
  50. retries: 30
  51. networks:
  52. - emp-net
  53. kafka:
  54. image: ${KAFKA_IMAGE:-bitnami/kafka:3.7.0}
  55. restart: unless-stopped
  56. ports:
  57. - "0.0.0.0:${KAFKA_HOST_PORT:-29362}:9094"
  58. environment:
  59. ALLOW_PLAINTEXT_LISTENER: "yes"
  60. KAFKA_CFG_NODE_ID: 1
  61. KAFKA_CFG_PROCESS_ROLES: controller,broker
  62. KAFKA_CFG_CONTROLLER_QUORUM_VOTERS: 1@kafka:9093
  63. KAFKA_CFG_LISTENERS: INTERNAL://:9092,CONTROLLER://:9093,EXTERNAL://:9094
  64. KAFKA_CFG_ADVERTISED_LISTENERS: INTERNAL://kafka:9092,EXTERNAL://${PUBLIC_HOST}:${KAFKA_HOST_PORT:-29362}
  65. KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,CONTROLLER:PLAINTEXT,EXTERNAL:PLAINTEXT
  66. KAFKA_CFG_INTER_BROKER_LISTENER_NAME: INTERNAL
  67. KAFKA_CFG_CONTROLLER_LISTENER_NAMES: CONTROLLER
  68. KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE: "true"
  69. KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
  70. KAFKA_CFG_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
  71. KAFKA_CFG_TRANSACTION_STATE_LOG_MIN_ISR: 1
  72. volumes:
  73. - kafka_data:/bitnami/kafka
  74. healthcheck:
  75. test: ["CMD-SHELL", "/opt/bitnami/kafka/bin/kafka-topics.sh --bootstrap-server 127.0.0.1:9092 --list >/dev/null 2>&1"]
  76. interval: 10s
  77. timeout: 5s
  78. retries: 30
  79. networks:
  80. - emp-net
  81. kafka-init:
  82. image: ${KAFKA_IMAGE:-bitnami/kafka:3.7.0}
  83. restart: "no"
  84. depends_on:
  85. kafka:
  86. condition: service_healthy
  87. entrypoint: ["/bin/bash", "-ec"]
  88. environment:
  89. KAFKA_TOPIC: ${KAFKA_TOPIC:-vehicle-data}
  90. command: |
  91. echo "create kafka topic: $${KAFKA_TOPIC}"
  92. /opt/bitnami/kafka/bin/kafka-topics.sh \
  93. --bootstrap-server kafka:9092 \
  94. --create \
  95. --if-not-exists \
  96. --topic "$${KAFKA_TOPIC}" \
  97. --partitions 3 \
  98. --replication-factor 1
  99. /opt/bitnami/kafka/bin/kafka-topics.sh \
  100. --bootstrap-server kafka:9092 \
  101. --describe \
  102. --topic "$${KAFKA_TOPIC}"
  103. networks:
  104. - emp-net
  105. tdengine:
  106. image: ${TDENGINE_IMAGE:-tdengine/tdengine:3.3.6.0}
  107. hostname: tdengine
  108. privileged: true
  109. restart: unless-stopped
  110. ports:
  111. - "0.0.0.0:${TDENGINE_UI_HOST_PORT:-${TDENGINE_REST_HOST_PORT:-37363}}:6060"
  112. environment:
  113. TZ: Asia/Shanghai
  114. TAOS_FQDN: tdengine
  115. TDENGINE_DATABASE: ${TDENGINE_DATABASE:-emp}
  116. volumes:
  117. - tdengine_data:/var/lib/taos
  118. - tdengine_log:/var/log/taos
  119. healthcheck:
  120. test: ["CMD-SHELL", "taos -s \"create database if not exists $${TDENGINE_DATABASE}; show databases;\" >/dev/null 2>&1"]
  121. interval: 10s
  122. timeout: 5s
  123. retries: 30
  124. networks:
  125. - emp-net
  126. nacos:
  127. image: ${NACOS_IMAGE:-nacos/nacos-server:v2.3.2-slim}
  128. restart: unless-stopped
  129. environment:
  130. MODE: standalone
  131. SPRING_DATASOURCE_PLATFORM: ""
  132. NACOS_AUTH_ENABLE: ${NACOS_AUTH_ENABLE:-true}
  133. NACOS_AUTH_IDENTITY_KEY: ${NACOS_AUTH_IDENTITY_KEY:-emp}
  134. NACOS_AUTH_IDENTITY_VALUE: ${NACOS_AUTH_IDENTITY_VALUE:-emp2026}
  135. NACOS_AUTH_TOKEN: ${NACOS_AUTH_TOKEN}
  136. volumes:
  137. - nacos_data:/home/nacos/data
  138. - nacos_logs:/home/nacos/logs
  139. healthcheck:
  140. test: ["CMD-SHELL", "curl -sf http://127.0.0.1:8848/nacos/actuator/health || exit 1"]
  141. interval: 10s
  142. timeout: 5s
  143. retries: 30
  144. networks:
  145. - emp-net
  146. emp-gateway:
  147. <<: *app-env
  148. image: ${IMAGE_NAMESPACE:-emp-test}/emp-gateway:${IMAGE_TAG:-latest}
  149. depends_on:
  150. <<: *java-depends
  151. emp-auth:
  152. <<: *app-env
  153. image: ${IMAGE_NAMESPACE:-emp-test}/emp-auth:${IMAGE_TAG:-latest}
  154. depends_on:
  155. <<: *java-depends
  156. emp-monitor:
  157. <<: *app-env
  158. image: ${IMAGE_NAMESPACE:-emp-test}/emp-monitor:${IMAGE_TAG:-latest}
  159. depends_on:
  160. <<: *java-depends
  161. tdengine:
  162. condition: service_healthy
  163. emp-pdf:
  164. condition: service_healthy
  165. emp-data:
  166. <<: *app-env
  167. image: ${IMAGE_NAMESPACE:-emp-test}/emp-data:${IMAGE_TAG:-latest}
  168. depends_on:
  169. <<: *java-depends
  170. tdengine:
  171. condition: service_healthy
  172. kafka-init:
  173. condition: service_completed_successfully
  174. emp-ws:
  175. condition: service_started
  176. emp-pdf:
  177. <<: *app-env
  178. image: ${IMAGE_NAMESPACE:-emp-test}/emp-pdf:${IMAGE_TAG:-latest}
  179. environment:
  180. PORT: 3100
  181. healthcheck:
  182. test: ["CMD-SHELL", "node -e \"require('http').get('http://127.0.0.1:3100/pdf', r => { r.resume(); process.exit(r.statusCode < 500 ? 0 : 1) }).on('error', () => process.exit(1))\""]
  183. interval: 10s
  184. timeout: 5s
  185. retries: 30
  186. emp-ws:
  187. <<: *app-env
  188. image: ${IMAGE_NAMESPACE:-emp-test}/emp-ws:${IMAGE_TAG:-latest}
  189. ports:
  190. - "0.0.0.0:${WS_HOST_PORT:-37362}:3000"
  191. depends_on:
  192. mysql:
  193. condition: service_healthy
  194. redis:
  195. condition: service_healthy
  196. kafka-init:
  197. condition: service_completed_successfully
  198. emp-admin:
  199. image: ${IMAGE_NAMESPACE:-emp-test}/emp-admin:${IMAGE_TAG:-latest}
  200. restart: unless-stopped
  201. ports:
  202. - "0.0.0.0:${ADMIN_HOST_PORT:-37361}:80"
  203. depends_on:
  204. emp-gateway:
  205. condition: service_started
  206. emp-ws:
  207. condition: service_started
  208. networks:
  209. - emp-net
  210. networks:
  211. emp-net:
  212. driver: bridge
  213. volumes:
  214. mysql_data:
  215. redis_data:
  216. kafka_data:
  217. tdengine_data:
  218. tdengine_log:
  219. nacos_data:
  220. nacos_logs: