No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 
 

315 líneas
9.8 KiB

  1. x-app-env: &app-env
  2. env_file:
  3. - .env
  4. restart: unless-stopped
  5. networks:
  6. - emp-net
  7. # Java 服务 logback 文件滚动策略(合并自 ops/runtime-logs/docker-compose.logs.yml)
  8. x-java-file-log: &java-file-log
  9. LOGGING_LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE: ${SPRING_LOG_MAX_FILE_SIZE:-100MB}
  10. LOGGING_LOGBACK_ROLLINGPOLICY_MAX_HISTORY: ${SPRING_LOG_MAX_HISTORY:-30}
  11. LOGGING_LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP: ${SPRING_LOG_TOTAL_SIZE_CAP:-5GB}
  12. x-java-depends: &java-depends
  13. nacos:
  14. condition: service_healthy
  15. mysql:
  16. condition: service_healthy
  17. redis:
  18. condition: service_healthy
  19. services:
  20. mysql:
  21. image: ${MYSQL_IMAGE:-mysql:8.0}
  22. restart: unless-stopped
  23. ports:
  24. - "0.0.0.0:${MYSQL_HOST_PORT:-23306}:3306"
  25. environment:
  26. TZ: Asia/Shanghai
  27. MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
  28. MYSQL_DATABASE: ${MYSQL_DATABASE:-emp}
  29. command:
  30. # 字符集/时区
  31. - --character-set-server=utf8mb4
  32. - --collation-server=utf8mb4_0900_ai_ci
  33. - --default-time-zone=+08:00
  34. # InnoDB 核心
  35. - --innodb_buffer_pool_size=16G
  36. - --innodb_buffer_pool_instances=8
  37. - --innodb_log_file_size=2G
  38. - --innodb_log_buffer_size=64M
  39. - --innodb_flush_log_at_trx_commit=2
  40. - --innodb_flush_method=O_DIRECT
  41. - --innodb_io_capacity=2000
  42. - --innodb_io_capacity_max=4000
  43. - --innodb_thread_concurrency=0
  44. # 连接/表缓存/文件句柄
  45. - --max_connections=1000
  46. - --table_open_cache=4000
  47. - --table_open_cache_instances=16
  48. - --open_files_limit=65535
  49. # 会话级缓冲
  50. - --tmp_table_size=256M
  51. - --max_heap_table_size=256M
  52. - --sort_buffer_size=4M
  53. - --join_buffer_size=4M
  54. - --read_rnd_buffer_size=4M
  55. # 慢查询日志
  56. - --slow_query_log=ON
  57. - --long_query_time=0.5
  58. - --log_output=TABLE
  59. ulimits:
  60. nofile:
  61. soft: 65535
  62. hard: 65535
  63. volumes:
  64. - mysql_data:/var/lib/mysql
  65. healthcheck:
  66. test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 -uroot -p\"$${MYSQL_ROOT_PASSWORD}\" --silent"]
  67. interval: 10s
  68. timeout: 5s
  69. retries: 30
  70. networks:
  71. - emp-net
  72. redis:
  73. image: ${REDIS_IMAGE:-redis:7-alpine}
  74. restart: unless-stopped
  75. environment:
  76. REDIS_PASSWORD: ${REDIS_PASSWORD}
  77. command: ["sh", "-c", "redis-server --appendonly yes --requirepass \"$${REDIS_PASSWORD}\""]
  78. volumes:
  79. - redis_data:/data
  80. healthcheck:
  81. test: ["CMD-SHELL", "redis-cli -a \"$${REDIS_PASSWORD}\" ping | grep -q PONG"]
  82. interval: 10s
  83. timeout: 5s
  84. retries: 30
  85. networks:
  86. - emp-net
  87. kafka:
  88. image: ${KAFKA_IMAGE:-bitnami/kafka:3.7.0}
  89. profiles:
  90. - local-kafka
  91. restart: unless-stopped
  92. ports:
  93. - "0.0.0.0:${KAFKA_HOST_PORT:-29362}:9094"
  94. environment:
  95. ALLOW_PLAINTEXT_LISTENER: "yes"
  96. KAFKA_CFG_NODE_ID: 1
  97. KAFKA_CFG_PROCESS_ROLES: controller,broker
  98. KAFKA_CFG_CONTROLLER_QUORUM_VOTERS: 1@kafka:9093
  99. KAFKA_CFG_LISTENERS: INTERNAL://:9092,CONTROLLER://:9093,EXTERNAL://:9094
  100. KAFKA_CFG_ADVERTISED_LISTENERS: INTERNAL://kafka:9092,EXTERNAL://${PUBLIC_HOST}:${KAFKA_HOST_PORT:-29362}
  101. KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,CONTROLLER:PLAINTEXT,EXTERNAL:PLAINTEXT
  102. KAFKA_CFG_INTER_BROKER_LISTENER_NAME: INTERNAL
  103. KAFKA_CFG_CONTROLLER_LISTENER_NAMES: CONTROLLER
  104. KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE: "true"
  105. KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
  106. KAFKA_CFG_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
  107. KAFKA_CFG_TRANSACTION_STATE_LOG_MIN_ISR: 1
  108. volumes:
  109. - kafka_data:/bitnami/kafka
  110. - /data/emp/logs/${IMAGE_NAMESPACE:-emp}/kafka:/opt/bitnami/kafka/logs
  111. healthcheck:
  112. test: ["CMD-SHELL", "/opt/bitnami/kafka/bin/kafka-topics.sh --bootstrap-server 127.0.0.1:9092 --list >/dev/null 2>&1"]
  113. interval: 10s
  114. timeout: 5s
  115. retries: 30
  116. networks:
  117. - emp-net
  118. kafka-init:
  119. image: ${KAFKA_IMAGE:-bitnami/kafka:3.7.0}
  120. profiles:
  121. - local-kafka
  122. restart: "no"
  123. depends_on:
  124. kafka:
  125. condition: service_healthy
  126. entrypoint: ["/bin/bash", "-ec"]
  127. environment:
  128. KAFKA_TOPIC: ${KAFKA_TOPIC:-vehicle-data}
  129. command: |
  130. echo "create kafka topic: $${KAFKA_TOPIC}"
  131. /opt/bitnami/kafka/bin/kafka-topics.sh \
  132. --bootstrap-server kafka:9092 \
  133. --create \
  134. --if-not-exists \
  135. --topic "$${KAFKA_TOPIC}" \
  136. --partitions 3 \
  137. --replication-factor 1
  138. /opt/bitnami/kafka/bin/kafka-topics.sh \
  139. --bootstrap-server kafka:9092 \
  140. --describe \
  141. --topic "$${KAFKA_TOPIC}"
  142. networks:
  143. - emp-net
  144. tdengine:
  145. image: ${TDENGINE_IMAGE:-tdengine/tdengine:3.3.6.0}
  146. hostname: tdengine
  147. privileged: true
  148. restart: unless-stopped
  149. ports:
  150. - "0.0.0.0:${TDENGINE_UI_HOST_PORT:-${TDENGINE_REST_HOST_PORT:-37363}}:6060"
  151. environment:
  152. TZ: Asia/Shanghai
  153. TAOS_FQDN: tdengine
  154. TDENGINE_DATABASE: ${TDENGINE_DATABASE:-emp}
  155. volumes:
  156. - tdengine_data:/var/lib/taos
  157. - /data/emp/logs/${IMAGE_NAMESPACE:-emp}/tdengine:/var/log/taos
  158. healthcheck:
  159. test: ["CMD-SHELL", "taos -s \"create database if not exists $${TDENGINE_DATABASE}; show databases;\" >/dev/null 2>&1"]
  160. interval: 10s
  161. timeout: 5s
  162. retries: 30
  163. networks:
  164. - emp-net
  165. nacos:
  166. image: ${NACOS_IMAGE:-nacos/nacos-server:v2.3.2-slim}
  167. restart: unless-stopped
  168. mem_limit: ${NACOS_MEM_LIMIT:-3g}
  169. environment:
  170. MODE: standalone
  171. SPRING_DATASOURCE_PLATFORM: ""
  172. JVM_XMS: ${NACOS_JVM_XMS:-2g}
  173. JVM_XMX: ${NACOS_JVM_XMX:-2g}
  174. JVM_XMN: ${NACOS_JVM_XMN:-1g}
  175. NACOS_AUTH_ENABLE: ${NACOS_AUTH_ENABLE:-true}
  176. NACOS_AUTH_IDENTITY_KEY: ${NACOS_AUTH_IDENTITY_KEY:-emp}
  177. NACOS_AUTH_IDENTITY_VALUE: ${NACOS_AUTH_IDENTITY_VALUE:-emp2026}
  178. NACOS_AUTH_TOKEN: ${NACOS_AUTH_TOKEN}
  179. volumes:
  180. - nacos_data:/home/nacos/data
  181. - /data/emp/logs/${IMAGE_NAMESPACE:-emp}/nacos:/home/nacos/logs
  182. healthcheck:
  183. test: ["CMD-SHELL", "curl -sf http://127.0.0.1:8848/nacos/actuator/health || exit 1"]
  184. interval: 10s
  185. timeout: 5s
  186. retries: 30
  187. networks:
  188. - emp-net
  189. emp-gateway:
  190. <<: *app-env
  191. image: ${IMAGE_NAMESPACE:-emp-test}/emp-gateway:${IMAGE_TAG:-latest}
  192. mem_limit: ${EMP_GATEWAY_MEM_LIMIT:-3g}
  193. volumes:
  194. - /data/emp/logs/${IMAGE_NAMESPACE:-emp}/emp-gateway:/logs
  195. environment:
  196. <<: *java-file-log
  197. JAVA_TOOL_OPTIONS: "${EMP_GATEWAY_JAVA_TOOL_OPTIONS:--Xms1g -Xmx2g}"
  198. LOGGING_FILE_NAME: /logs/emp-gateway.log
  199. LOGGING_LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN: /logs/emp-gateway-%d{yyyy-MM-dd}.%i.log
  200. depends_on:
  201. <<: *java-depends
  202. emp-auth:
  203. <<: *app-env
  204. image: ${IMAGE_NAMESPACE:-emp-test}/emp-auth:${IMAGE_TAG:-latest}
  205. mem_limit: ${EMP_AUTH_MEM_LIMIT:-3g}
  206. volumes:
  207. - /data/emp/logs/${IMAGE_NAMESPACE:-emp}/emp-auth:/logs
  208. environment:
  209. <<: *java-file-log
  210. JAVA_TOOL_OPTIONS: "${EMP_AUTH_JAVA_TOOL_OPTIONS:--Xms1g -Xmx2g}"
  211. LOGGING_FILE_NAME: /logs/emp-auth.log
  212. LOGGING_LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN: /logs/emp-auth-%d{yyyy-MM-dd}.%i.log
  213. depends_on:
  214. <<: *java-depends
  215. emp-monitor:
  216. <<: *app-env
  217. image: ${IMAGE_NAMESPACE:-emp-test}/emp-monitor:${IMAGE_TAG:-latest}
  218. mem_limit: ${EMP_MONITOR_MEM_LIMIT:-5g}
  219. volumes:
  220. - /data/emp/logs/${IMAGE_NAMESPACE:-emp}/emp-monitor:/logs
  221. environment:
  222. <<: *java-file-log
  223. JAVA_TOOL_OPTIONS: "${EMP_MONITOR_JAVA_TOOL_OPTIONS:--Xms2g -Xmx4g}"
  224. LOGGING_FILE_NAME: /logs/emp-monitor.log
  225. LOGGING_LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN: /logs/emp-monitor-%d{yyyy-MM-dd}.%i.log
  226. depends_on:
  227. <<: *java-depends
  228. tdengine:
  229. condition: service_healthy
  230. emp-pdf:
  231. condition: service_healthy
  232. emp-data:
  233. <<: *app-env
  234. image: ${IMAGE_NAMESPACE:-emp-test}/emp-data:${IMAGE_TAG:-latest}
  235. mem_limit: ${EMP_DATA_MEM_LIMIT:-5g}
  236. volumes:
  237. - /data/emp/logs/${IMAGE_NAMESPACE:-emp}/emp-data:/logs
  238. environment:
  239. <<: *java-file-log
  240. JAVA_TOOL_OPTIONS: "${EMP_DATA_JAVA_TOOL_OPTIONS:--Xms2g -Xmx4g}"
  241. LOGGING_FILE_NAME: /logs/emp-data.log
  242. LOGGING_LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN: /logs/emp-data-%d{yyyy-MM-dd}.%i.log
  243. depends_on:
  244. <<: *java-depends
  245. tdengine:
  246. condition: service_healthy
  247. emp-ws:
  248. condition: service_started
  249. emp-pdf:
  250. <<: *app-env
  251. image: ${IMAGE_NAMESPACE:-emp-test}/emp-pdf:${IMAGE_TAG:-latest}
  252. environment:
  253. PORT: 3100
  254. volumes:
  255. - /data/emp/logs/${IMAGE_NAMESPACE:-emp}/emp-pdf:/logs
  256. command: ["/bin/sh", "-c", "exec node server.js >> /logs/emp-pdf.log 2>&1"]
  257. healthcheck:
  258. 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))\""]
  259. interval: 10s
  260. timeout: 5s
  261. retries: 30
  262. emp-ws:
  263. <<: *app-env
  264. image: ${IMAGE_NAMESPACE:-emp-test}/emp-ws:${IMAGE_TAG:-latest}
  265. ports:
  266. - "0.0.0.0:${WS_HOST_PORT:-37362}:3000"
  267. volumes:
  268. - /data/emp/logs/${IMAGE_NAMESPACE:-emp}/emp-ws:/logs
  269. command: ["/bin/sh", "-c", "exec node server.js >> /logs/emp-ws.log 2>&1"]
  270. depends_on:
  271. mysql:
  272. condition: service_healthy
  273. redis:
  274. condition: service_healthy
  275. emp-admin:
  276. image: ${IMAGE_NAMESPACE:-emp-test}/emp-admin:${IMAGE_TAG:-latest}
  277. restart: unless-stopped
  278. ports:
  279. - "0.0.0.0:${ADMIN_HOST_PORT:-37361}:80"
  280. volumes:
  281. - /data/emp/logs/${IMAGE_NAMESPACE:-emp}/emp-admin:/var/log/nginx
  282. depends_on:
  283. emp-gateway:
  284. condition: service_started
  285. emp-ws:
  286. condition: service_started
  287. networks:
  288. - emp-net
  289. networks:
  290. emp-net:
  291. driver: bridge
  292. volumes:
  293. mysql_data:
  294. redis_data:
  295. kafka_data:
  296. tdengine_data:
  297. nacos_data: