docker-compose.yml 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  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=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. - redis
  26. - nats
  27. - mqtt
  28. volumes:
  29. - ./logs:/app/logs
  30. - ./uploads:/app/uploads
  31. networks:
  32. - iot-network
  33. # 数据网关服务
  34. gateway:
  35. build: .
  36. command: ["go", "run", "cmd/gateway/main.go"]
  37. ports:
  38. - "8081:8081"
  39. environment:
  40. - DB_HOST=postgres
  41. - DB_PORT=5432
  42. - DB_USER=postgres
  43. - DB_PASSWORD=postgres
  44. - DB_NAME=iot_base_station
  45. - INFLUXDB_URL=http://influxdb:8086
  46. - INFLUXDB_TOKEN=influxdb-token
  47. - INFLUXDB_ORG=iot-org
  48. - INFLUXDB_BUCKET=iot-data
  49. - REDIS_HOST=redis
  50. - REDIS_PORT=6379
  51. - NATS_URL=nats://nats:4222
  52. - MQTT_BROKER=tcp://mqtt:1883
  53. depends_on:
  54. - postgres
  55. - influxdb
  56. - redis
  57. - nats
  58. - mqtt
  59. volumes:
  60. - ./logs:/app/logs
  61. networks:
  62. - iot-network
  63. # 监控服务
  64. monitor:
  65. build: .
  66. command: ["go", "run", "cmd/monitor/main.go"]
  67. ports:
  68. - "8082:8082"
  69. environment:
  70. - DB_HOST=postgres
  71. - DB_PORT=5432
  72. - DB_USER=postgres
  73. - DB_PASSWORD=postgres
  74. - DB_NAME=iot_base_station
  75. - INFLUXDB_URL=http://influxdb:8086
  76. - INFLUXDB_TOKEN=influxdb-token
  77. - INFLUXDB_ORG=iot-org
  78. - INFLUXDB_BUCKET=iot-data
  79. - REDIS_HOST=redis
  80. - REDIS_PORT=6379
  81. depends_on:
  82. - postgres
  83. - influxdb
  84. - redis
  85. volumes:
  86. - ./logs:/app/logs
  87. networks:
  88. - iot-network
  89. # PostgreSQL数据库
  90. postgres:
  91. image: postgres:14
  92. environment:
  93. - POSTGRES_USER=postgres
  94. - POSTGRES_PASSWORD=postgres
  95. - POSTGRES_DB=iot_base_station
  96. ports:
  97. - "5432:5432"
  98. volumes:
  99. - postgres_data:/var/lib/postgresql/data
  100. - ./scripts/init-postgres.sql:/docker-entrypoint-initdb.d/init-postgres.sql
  101. networks:
  102. - iot-network
  103. # InfluxDB时序数据库
  104. influxdb:
  105. image: influxdb:2.0
  106. environment:
  107. - DOCKER_INFLUXDB_INIT_MODE=setup
  108. - DOCKER_INFLUXDB_INIT_USERNAME=admin
  109. - DOCKER_INFLUXDB_INIT_PASSWORD=adminpassword
  110. - DOCKER_INFLUXDB_INIT_ORG=iot-org
  111. - DOCKER_INFLUXDB_INIT_BUCKET=iot-data
  112. - DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=influxdb-token
  113. ports:
  114. - "8086:8086"
  115. volumes:
  116. - influxdb_data:/var/lib/influxdb2
  117. networks:
  118. - iot-network
  119. # Redis缓存
  120. redis:
  121. image: redis:6-alpine
  122. ports:
  123. - "6379:6379"
  124. volumes:
  125. - redis_data:/data
  126. networks:
  127. - iot-network
  128. # NATS消息队列
  129. nats:
  130. image: nats:2-alpine
  131. ports:
  132. - "4222:4222"
  133. - "8222:8222" # HTTP监控端口
  134. command: ["-js", "-m", "8222"] # 启用JetStream和监控
  135. networks:
  136. - iot-network
  137. # MQTT代理
  138. mqtt:
  139. image: eclipse-mosquitto:2
  140. ports:
  141. - "1883:1883"
  142. - "9001:9001" # WebSocket端口
  143. volumes:
  144. - ./config/mosquitto.conf:/mosquitto/config/mosquitto.conf
  145. - mqtt_data:/mosquitto/data
  146. - mqtt_logs:/mosquitto/log
  147. networks:
  148. - iot-network
  149. # ChirpStack LoRaWAN网络服务器
  150. chirpstack:
  151. image: chirpstack/chirpstack:4
  152. ports:
  153. - "8080:8080"
  154. environment:
  155. - POSTGRESQL_DSN=postgres://postgres:postgres@postgres:5432/chirpstack?sslmode=disable
  156. - REDIS_URL=redis://redis:6379
  157. depends_on:
  158. - postgres
  159. - redis
  160. networks:
  161. - iot-network
  162. # Grafana监控面板
  163. grafana:
  164. image: grafana/grafana:latest
  165. ports:
  166. - "3000:3000"
  167. environment:
  168. - GF_SECURITY_ADMIN_PASSWORD=admin
  169. volumes:
  170. - grafana_data:/var/lib/grafana
  171. - ./config/grafana/dashboards:/etc/grafana/provisioning/dashboards
  172. - ./config/grafana/datasources:/etc/grafana/provisioning/datasources
  173. depends_on:
  174. - influxdb
  175. networks:
  176. - iot-network
  177. # Prometheus监控
  178. prometheus:
  179. image: prom/prometheus:latest
  180. ports:
  181. - "9090:9090"
  182. volumes:
  183. - ./config/prometheus.yml:/etc/prometheus/prometheus.yml
  184. - prometheus_data:/prometheus
  185. command:
  186. - '--config.file=/etc/prometheus/prometheus.yml'
  187. - '--storage.tsdb.path=/prometheus'
  188. - '--web.console.libraries=/etc/prometheus/console_libraries'
  189. - '--web.console.templates=/etc/prometheus/consoles'
  190. - '--storage.tsdb.retention.time=200h'
  191. - '--web.enable-lifecycle'
  192. networks:
  193. - iot-network
  194. # 前端应用
  195. frontend:
  196. image: node:16-alpine
  197. working_dir: /app
  198. volumes:
  199. - ./web:/app
  200. ports:
  201. - "3001:3000"
  202. command: sh -c "npm install && npm start"
  203. environment:
  204. - REACT_APP_API_URL=http://localhost:8080
  205. networks:
  206. - iot-network
  207. volumes:
  208. postgres_data:
  209. influxdb_data:
  210. redis_data:
  211. mqtt_data:
  212. mqtt_logs:
  213. grafana_data:
  214. prometheus_data:
  215. networks:
  216. iot-network:
  217. driver: bridge