185 lines
4.5 KiB
YAML
185 lines
4.5 KiB
YAML
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:
|