| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- version: '3.8'
- services:
- # 主应用服务
- app:
- build: .
- ports:
- - "8080:8080"
- environment:
- - DB_HOST=postgres
- - DB_PORT=5432
- - DB_USER=postgres
- - DB_PASSWORD=postgres
- - DB_NAME=iot_base_station
- - INFLUXDB_URL=http://influxdb:8086
- - INFLUXDB_TOKEN=influxdb-token
- - INFLUXDB_ORG=iot-org
- - INFLUXDB_BUCKET=iot-data
- - REDIS_HOST=host.docker.internal # 使用主机上的Redis
- - REDIS_PORT=6379
- - NATS_URL=nats://nats:4222
- - MQTT_BROKER=tcp://mqtt:1883
- depends_on:
- - postgres
- - influxdb
- - nats
- - mqtt
- volumes:
- - ./logs:/app/logs
- - ./uploads:/app/uploads
- networks:
- - iot-network
- extra_hosts:
- - "host.docker.internal:host-gateway" # 允许访问主机服务
- # 数据网关服务
- gateway:
- build: .
- command: ["go", "run", "cmd/gateway/main.go"]
- ports:
- - "8081:8081"
- environment:
- - DB_HOST=postgres
- - DB_PORT=5432
- - DB_USER=postgres
- - DB_PASSWORD=postgres
- - DB_NAME=iot_base_station
- - INFLUXDB_URL=http://influxdb:8086
- - INFLUXDB_TOKEN=influxdb-token
- - INFLUXDB_ORG=iot-org
- - INFLUXDB_BUCKET=iot-data
- - REDIS_HOST=host.docker.internal # 使用主机上的Redis
- - REDIS_PORT=6379
- - NATS_URL=nats://nats:4222
- - MQTT_BROKER=tcp://mqtt:1883
- depends_on:
- - postgres
- - influxdb
- - nats
- - mqtt
- volumes:
- - ./logs:/app/logs
- networks:
- - iot-network
- extra_hosts:
- - "host.docker.internal:host-gateway" # 允许访问主机服务
- # 监控服务
- monitor:
- build: .
- command: ["go", "run", "cmd/monitor/main.go"]
- ports:
- - "8082:8082"
- environment:
- - DB_HOST=postgres
- - DB_PORT=5432
- - DB_USER=postgres
- - DB_PASSWORD=postgres
- - DB_NAME=iot_base_station
- - INFLUXDB_URL=http://influxdb:8086
- - INFLUXDB_TOKEN=influxdb-token
- - INFLUXDB_ORG=iot-org
- - INFLUXDB_BUCKET=iot-data
- - REDIS_HOST=host.docker.internal # 使用主机上的Redis
- - REDIS_PORT=6379
- depends_on:
- - postgres
- - influxdb
- volumes:
- - ./logs:/app/logs
- networks:
- - iot-network
- extra_hosts:
- - "host.docker.internal:host-gateway" # 允许访问主机服务
- # PostgreSQL数据库
- postgres:
- image: postgres:14
- environment:
- - POSTGRES_USER=postgres
- - POSTGRES_PASSWORD=postgres
- - POSTGRES_DB=iot_base_station
- ports:
- - "5432:5432"
- volumes:
- - postgres_data:/var/lib/postgresql/data
- - ./scripts/init-postgres.sql:/docker-entrypoint-initdb.d/init-postgres.sql
- networks:
- - iot-network
- # InfluxDB时序数据库
- influxdb:
- image: influxdb:2.0
- environment:
- - DOCKER_INFLUXDB_INIT_MODE=setup
- - DOCKER_INFLUXDB_INIT_USERNAME=admin
- - DOCKER_INFLUXDB_INIT_PASSWORD=adminpassword
- - DOCKER_INFLUXDB_INIT_ORG=iot-org
- - DOCKER_INFLUXDB_INIT_BUCKET=iot-data
- - DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=influxdb-token
- ports:
- - "8086:8086"
- volumes:
- - influxdb_data:/var/lib/influxdb2
- networks:
- - iot-network
- # NATS消息队列
- nats:
- image: nats:2-alpine
- ports:
- - "4222:4222"
- - "8222:8222" # HTTP监控端口
- command: ["-js", "-m", "8222"] # 启用JetStream和监控
- networks:
- - iot-network
- # MQTT代理
- mqtt:
- image: eclipse-mosquitto:2
- ports:
- - "1883:1883"
- - "9001:9001" # WebSocket端口
- volumes:
- - ./config/mosquitto.conf:/mosquitto/config/mosquitto.conf
- - mqtt_data:/mosquitto/data
- - mqtt_logs:/mosquitto/log
- networks:
- - iot-network
- # Grafana监控面板
- grafana:
- image: grafana/grafana:latest
- ports:
- - "3000:3000"
- environment:
- - GF_SECURITY_ADMIN_PASSWORD=admin
- volumes:
- - grafana_data:/var/lib/grafana
- - ./config/grafana/dashboards:/etc/grafana/provisioning/dashboards
- - ./config/grafana/datasources:/etc/grafana/provisioning/datasources
- depends_on:
- - influxdb
- networks:
- - iot-network
- # Prometheus监控
- prometheus:
- image: prom/prometheus:latest
- ports:
- - "9090:9090"
- volumes:
- - ./config/prometheus.yml:/etc/prometheus/prometheus.yml
- - prometheus_data:/prometheus
- command:
- - '--config.file=/etc/prometheus/prometheus.yml'
- - '--storage.tsdb.path=/prometheus'
- - '--web.console.libraries=/etc/prometheus/console_libraries'
- - '--web.console.templates=/etc/prometheus/consoles'
- - '--storage.tsdb.retention.time=200h'
- - '--web.enable-lifecycle'
- networks:
- - iot-network
- volumes:
- postgres_data:
- influxdb_data:
- mqtt_data:
- mqtt_logs:
- grafana_data:
- prometheus_data:
- networks:
- iot-network:
- driver: bridge
|