Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.
 
 
 

303 rindas
9.2 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. environment:
  169. MODE: standalone
  170. SPRING_DATASOURCE_PLATFORM: ""
  171. NACOS_AUTH_ENABLE: ${NACOS_AUTH_ENABLE:-true}
  172. NACOS_AUTH_IDENTITY_KEY: ${NACOS_AUTH_IDENTITY_KEY:-emp}
  173. NACOS_AUTH_IDENTITY_VALUE: ${NACOS_AUTH_IDENTITY_VALUE:-emp2026}
  174. NACOS_AUTH_TOKEN: ${NACOS_AUTH_TOKEN}
  175. volumes:
  176. - nacos_data:/home/nacos/data
  177. - /data/emp/logs/${IMAGE_NAMESPACE:-emp}/nacos:/home/nacos/logs
  178. healthcheck:
  179. test: ["CMD-SHELL", "curl -sf http://127.0.0.1:8848/nacos/actuator/health || exit 1"]
  180. interval: 10s
  181. timeout: 5s
  182. retries: 30
  183. networks:
  184. - emp-net
  185. emp-gateway:
  186. <<: *app-env
  187. image: ${IMAGE_NAMESPACE:-emp-test}/emp-gateway:${IMAGE_TAG:-latest}
  188. volumes:
  189. - /data/emp/logs/${IMAGE_NAMESPACE:-emp}/emp-gateway:/logs
  190. environment:
  191. <<: *java-file-log
  192. LOGGING_FILE_NAME: /logs/emp-gateway.log
  193. LOGGING_LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN: /logs/emp-gateway-%d{yyyy-MM-dd}.%i.log
  194. depends_on:
  195. <<: *java-depends
  196. emp-auth:
  197. <<: *app-env
  198. image: ${IMAGE_NAMESPACE:-emp-test}/emp-auth:${IMAGE_TAG:-latest}
  199. volumes:
  200. - /data/emp/logs/${IMAGE_NAMESPACE:-emp}/emp-auth:/logs
  201. environment:
  202. <<: *java-file-log
  203. LOGGING_FILE_NAME: /logs/emp-auth.log
  204. LOGGING_LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN: /logs/emp-auth-%d{yyyy-MM-dd}.%i.log
  205. depends_on:
  206. <<: *java-depends
  207. emp-monitor:
  208. <<: *app-env
  209. image: ${IMAGE_NAMESPACE:-emp-test}/emp-monitor:${IMAGE_TAG:-latest}
  210. volumes:
  211. - /data/emp/logs/${IMAGE_NAMESPACE:-emp}/emp-monitor:/logs
  212. environment:
  213. <<: *java-file-log
  214. LOGGING_FILE_NAME: /logs/emp-monitor.log
  215. LOGGING_LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN: /logs/emp-monitor-%d{yyyy-MM-dd}.%i.log
  216. depends_on:
  217. <<: *java-depends
  218. tdengine:
  219. condition: service_healthy
  220. emp-pdf:
  221. condition: service_healthy
  222. emp-data:
  223. <<: *app-env
  224. image: ${IMAGE_NAMESPACE:-emp-test}/emp-data:${IMAGE_TAG:-latest}
  225. volumes:
  226. - /data/emp/logs/${IMAGE_NAMESPACE:-emp}/emp-data:/logs
  227. environment:
  228. <<: *java-file-log
  229. LOGGING_FILE_NAME: /logs/emp-data.log
  230. LOGGING_LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN: /logs/emp-data-%d{yyyy-MM-dd}.%i.log
  231. depends_on:
  232. <<: *java-depends
  233. tdengine:
  234. condition: service_healthy
  235. emp-ws:
  236. condition: service_started
  237. emp-pdf:
  238. <<: *app-env
  239. image: ${IMAGE_NAMESPACE:-emp-test}/emp-pdf:${IMAGE_TAG:-latest}
  240. environment:
  241. PORT: 3100
  242. volumes:
  243. - /data/emp/logs/${IMAGE_NAMESPACE:-emp}/emp-pdf:/logs
  244. command: ["/bin/sh", "-c", "exec node server.js >> /logs/emp-pdf.log 2>&1"]
  245. healthcheck:
  246. 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))\""]
  247. interval: 10s
  248. timeout: 5s
  249. retries: 30
  250. emp-ws:
  251. <<: *app-env
  252. image: ${IMAGE_NAMESPACE:-emp-test}/emp-ws:${IMAGE_TAG:-latest}
  253. ports:
  254. - "0.0.0.0:${WS_HOST_PORT:-37362}:3000"
  255. volumes:
  256. - /data/emp/logs/${IMAGE_NAMESPACE:-emp}/emp-ws:/logs
  257. command: ["/bin/sh", "-c", "exec node server.js >> /logs/emp-ws.log 2>&1"]
  258. depends_on:
  259. mysql:
  260. condition: service_healthy
  261. redis:
  262. condition: service_healthy
  263. emp-admin:
  264. image: ${IMAGE_NAMESPACE:-emp-test}/emp-admin:${IMAGE_TAG:-latest}
  265. restart: unless-stopped
  266. ports:
  267. - "0.0.0.0:${ADMIN_HOST_PORT:-37361}:80"
  268. volumes:
  269. - /data/emp/logs/${IMAGE_NAMESPACE:-emp}/emp-admin:/var/log/nginx
  270. depends_on:
  271. emp-gateway:
  272. condition: service_started
  273. emp-ws:
  274. condition: service_started
  275. networks:
  276. - emp-net
  277. networks:
  278. emp-net:
  279. driver: bridge
  280. volumes:
  281. mysql_data:
  282. redis_data:
  283. kafka_data:
  284. tdengine_data:
  285. nacos_data: