docker-compose-without-redis.yml 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. version: '3.8'
  2. services:
  3. # 主应用服务
  4. app:
  5. build: .
  6. ports:
  7. - "8080:8080"
  8. environment:
  9. - DB_HOST=postgres
  10. - DB_PORT=5432
  11. - DB_USER=postgres
  12. - DB_PASSWORD=postgres
  13. - DB_NAME=iot_base_station
  14. - INFLUXDB_URL=http://influxdb:8086
  15. - INFLUXDB_TOKEN=influxdb-token
  16. - INFLUXDB_ORG=iot-org
  17. - INFLUXDB_BUCKET=iot-data
  18. - REDIS_HOST=host.docker.internal # 使用主机上的Redis
  19. - REDIS_PORT=6379
  20. - NATS_URL=nats://nats:4222
  21. - MQTT_BROKER=tcp://mqtt:1883
  22. depends_on:
  23. - postgres
  24. - influxdb
  25. - nats
  26. - mqtt
  27. volumes:
  28. - ./logs:/app/logs
  29. - ./uploads:/app/uploads
  30. networks:
  31. - iot-network
  32. extra_hosts:
  33. - "host.docker.internal:host-gateway" # 允许访问主机服务
  34. # 数据网关服务
  35. gateway:
  36. build: .
  37. command: ["go", "run", "cmd/gateway/main.go"]
  38. ports:
  39. - "8081:8081"
  40. environment:
  41. - DB_HOST=postgres
  42. - DB_PORT=5432
  43. - DB_USER=postgres
  44. - DB_PASSWORD=postgres
  45. - DB_NAME=iot_base_station
  46. - INFLUXDB_URL=http://influxdb:8086
  47. - INFLUXDB_TOKEN=influxdb-token
  48. - INFLUXDB_ORG=iot-org
  49. - INFLUXDB_BUCKET=iot-data
  50. - REDIS_HOST=host.docker.internal # 使用主机上的Redis
  51. - REDIS_PORT=6379
  52. - NATS_URL=nats://nats:4222
  53. - MQTT_BROKER=tcp://mqtt:1883
  54. depends_on:
  55. - postgres
  56. - influxdb
  57. - nats
  58. - mqtt
  59. volumes:
  60. - ./logs:/app/logs
  61. networks:
  62. - iot-network
  63. extra_hosts:
  64. - "host.docker.internal:host-gateway" # 允许访问主机服务
  65. # 监控服务
  66. monitor:
  67. build: .
  68. command: ["go", "run", "cmd/monitor/main.go"]
  69. ports:
  70. - "8082:8082"
  71. environment:
  72. - DB_HOST=postgres
  73. - DB_PORT=5432
  74. - DB_USER=postgres
  75. - DB_PASSWORD=postgres
  76. - DB_NAME=iot_base_station
  77. - INFLUXDB_URL=http://influxdb:8086
  78. - INFLUXDB_TOKEN=influxdb-token
  79. - INFLUXDB_ORG=iot-org
  80. - INFLUXDB_BUCKET=iot-data
  81. - REDIS_HOST=host.docker.internal # 使用主机上的Redis
  82. - REDIS_PORT=6379
  83. depends_on:
  84. - postgres
  85. - influxdb
  86. volumes:
  87. - ./logs:/app/logs
  88. networks:
  89. - iot-network
  90. extra_hosts:
  91. - "host.docker.internal:host-gateway" # 允许访问主机服务
  92. # PostgreSQL数据库
  93. postgres:
  94. image: postgres:14
  95. environment:
  96. - POSTGRES_USER=postgres
  97. - POSTGRES_PASSWORD=postgres
  98. - POSTGRES_DB=iot_base_station
  99. ports:
  100. - "5432:5432"
  101. volumes:
  102. - postgres_data:/var/lib/postgresql/data
  103. - ./scripts/init-postgres.sql:/docker-entrypoint-initdb.d/init-postgres.sql
  104. networks:
  105. - iot-network
  106. # InfluxDB时序数据库
  107. influxdb:
  108. image: influxdb:2.0
  109. environment:
  110. - DOCKER_INFLUXDB_INIT_MODE=setup
  111. - DOCKER_INFLUXDB_INIT_USERNAME=admin
  112. - DOCKER_INFLUXDB_INIT_PASSWORD=adminpassword
  113. - DOCKER_INFLUXDB_INIT_ORG=iot-org
  114. - DOCKER_INFLUXDB_INIT_BUCKET=iot-data
  115. - DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=influxdb-token
  116. ports:
  117. - "8086:8086"
  118. volumes:
  119. - influxdb_data:/var/lib/influxdb2
  120. networks:
  121. - iot-network
  122. # NATS消息队列
  123. nats:
  124. image: nats:2-alpine
  125. ports:
  126. - "4222:4222"
  127. - "8222:8222" # HTTP监控端口
  128. command: ["-js", "-m", "8222"] # 启用JetStream和监控
  129. networks:
  130. - iot-network
  131. # MQTT代理
  132. mqtt:
  133. image: eclipse-mosquitto:2
  134. ports:
  135. - "1883:1883"
  136. - "9001:9001" # WebSocket端口
  137. volumes:
  138. - ./config/mosquitto.conf:/mosquitto/config/mosquitto.conf
  139. - mqtt_data:/mosquitto/data
  140. - mqtt_logs:/mosquitto/log
  141. networks:
  142. - iot-network
  143. # Grafana监控面板
  144. grafana:
  145. image: grafana/grafana:latest
  146. ports:
  147. - "3000:3000"
  148. environment:
  149. - GF_SECURITY_ADMIN_PASSWORD=admin
  150. volumes:
  151. - grafana_data:/var/lib/grafana
  152. - ./config/grafana/dashboards:/etc/grafana/provisioning/dashboards
  153. - ./config/grafana/datasources:/etc/grafana/provisioning/datasources
  154. depends_on:
  155. - influxdb
  156. networks:
  157. - iot-network
  158. # Prometheus监控
  159. prometheus:
  160. image: prom/prometheus:latest
  161. ports:
  162. - "9090:9090"
  163. volumes:
  164. - ./config/prometheus.yml:/etc/prometheus/prometheus.yml
  165. - prometheus_data:/prometheus
  166. command:
  167. - '--config.file=/etc/prometheus/prometheus.yml'
  168. - '--storage.tsdb.path=/prometheus'
  169. - '--web.console.libraries=/etc/prometheus/console_libraries'
  170. - '--web.console.templates=/etc/prometheus/consoles'
  171. - '--storage.tsdb.retention.time=200h'
  172. - '--web.enable-lifecycle'
  173. networks:
  174. - iot-network
  175. volumes:
  176. postgres_data:
  177. influxdb_data:
  178. mqtt_data:
  179. mqtt_logs:
  180. grafana_data:
  181. prometheus_data:
  182. networks:
  183. iot-network:
  184. driver: bridge