| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- version: '3.8'
-
- services:
- # ==================== 基础设施 ====================
- postgres:
- image: postgis/postgis:16-3.4
- container_name: wm-postgres
- environment:
- POSTGRES_DB: water_management
- POSTGRES_USER: water
- POSTGRES_PASSWORD: water123
- ports:
- - "5432:5432"
- volumes:
- - pgdata:/var/lib/postgresql/data
- healthcheck:
- test: ["CMD-SHELL", "pg_isready -U water"]
- interval: 10s
- timeout: 5s
- retries: 5
-
- tdengine:
- image: tdengine/tdengine:3.3.3.0
- container_name: wm-tdengine
- ports:
- - "6030:6030"
- - "6041:6041"
- - "6043:6043"
- environment:
- TAOS_FQDN: tdengine
- volumes:
- - tddata:/var/lib/taos
- healthcheck:
- test: ["CMD", "taos", "-s", "show databases"]
- interval: 10s
- timeout: 5s
- retries: 5
-
- redis:
- image: redis:7-alpine
- container_name: wm-redis
- ports:
- - "6379:6379"
- volumes:
- - redisdata:/data
- healthcheck:
- test: ["CMD", "redis-cli", "ping"]
- interval: 10s
- timeout: 3s
- retries: 5
-
- # ==================== 消息队列 ====================
- kafka:
- image: bitnami/kafka:3.8
- container_name: wm-kafka
- ports:
- - "9092:9092"
- environment:
- KAFKA_CFG_NODE_ID: 0
- KAFKA_CFG_PROCESS_ROLES: controller,broker
- KAFKA_CFG_CONTROLLER_QUORUM_VOTERS: 0@kafka:9093
- KAFKA_CFG_LISTENERS: PLAINTEXT://:9092,CONTROLLER://:9093
- KAFKA_CFG_ADVERTISED_LISTENERS: PLAINTEXT://${KAFKA_ADVERTISED:-localhost}:9092
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
- KAFKA_CFG_CONTROLLER_LISTENER_NAMES: CONTROLLER
- KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE: "true"
- volumes:
- - kafkadata:/bitnami/kafka
- healthcheck:
- test: ["CMD-SHELL", "kafka-topics.sh --bootstrap-server localhost:9092 --list"]
- interval: 15s
- timeout: 10s
- retries: 5
-
- # ==================== 物联网 MQTT ====================
- emqx:
- image: emqx/emqx:5.7.2
- container_name: wm-emqx
- ports:
- - "1883:1883"
- - "8083:8083"
- - "18083:18083"
- environment:
- EMQX_DASHBOARD__DEFAULT_USERNAME: admin
- EMQX_DASHBOARD__DEFAULT_PASSWORD: public
- volumes:
- - emqxdata:/opt/emqx/data
- healthcheck:
- test: ["CMD", "emqx", "ping"]
- interval: 10s
- timeout: 5s
- retries: 5
-
- # ==================== 服务注册/配置 ====================
- nacos:
- image: nacos/nacos-server:v2.3.2
- container_name: wm-nacos
- environment:
- MODE: standalone
- PREFER_HOST_MODE: hostname
- ports:
- - "8848:8848"
- - "9848:9848"
- volumes:
- - nacosdata:/home/nacos/data
- healthcheck:
- test: ["CMD-SHELL", "curl -s http://localhost:8848/nacos/v1/console/health/readiness"]
- interval: 15s
- timeout: 5s
- retries: 5
-
- # ==================== 搜索引擎 ====================
- elasticsearch:
- image: elasticsearch:8.15.0
- container_name: wm-es
- environment:
- discovery.type: single-node
- xpack.security.enabled: "false"
- "ES_JAVA_OPTS": "-Xms512m -Xmx512m"
- ports:
- - "9200:9200"
- volumes:
- - esdata:/usr/share/elasticsearch/data
-
- kibana:
- image: kibana:8.15.0
- container_name: wm-kibana
- ports:
- - "5601:5601"
- environment:
- ELASTICSEARCH_HOSTS: http://elasticsearch:9200
- depends_on:
- - elasticsearch
-
- # ==================== 对象存储 ====================
- minio:
- image: minio/minio:latest
- container_name: wm-minio
- ports:
- - "9000:9000"
- - "9001:9001"
- environment:
- MINIO_ROOT_USER: minioadmin
- MINIO_ROOT_PASSWORD: minioadmin
- volumes:
- - miniodata:/data
- command: server /data --console-address ":9001"
- healthcheck:
- test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
- interval: 10s
- timeout: 5s
- retries: 5
-
- # ==================== GIS 地图服务 ====================
- geoserver:
- image: docker.osgeo.org/geoserver:2.25.2
- container_name: wm-geoserver
- ports:
- - "8081:8080"
- environment:
- INSTALL_EXTENSIONS: "true"
- STABLE_EXTENSIONS: "wps,csw"
- GEOSERVER_ADMIN_USER: admin
- GEOSERVER_ADMIN_PASSWORD: geoserver
- volumes:
- - geoserverdata:/opt/geoserver_data
- profiles:
- - gis
- healthcheck:
- test: ["CMD-SHELL", "curl -s http://localhost:8080/geoserver/web/"]
- interval: 20s
- timeout: 10s
- retries: 3
-
- volumes:
- pgdata:
- tddata:
- redisdata:
- kafkadata:
- emqxdata:
- nacosdata:
- esdata:
- miniodata:
- geoserverdata:
|