Files
water-management-system/docker-compose.yml
T
bot_pm e929f65948 Phase 1 #17: Spring Cloud Alibaba 微服务框架搭建
- Maven 父工程 wm-parent (Spring Boot 3.3.5 + Cloud 2023.0.3 + Alibaba 2023.0.1)
- 12个子模块: wm-common/gateway/base/iot/data-engine/bpm/production/revenue/patrol/bi/notify/job
- wm-common: 统一响应 R<T> + 全局异常处理 + BusinessException
- wm-gateway: Spring Cloud Gateway 路由配置(7个微服务路由)
- 集成: Nacos(注册/配置) + PostgreSQL + Redis + Kafka + Sa-Token + MyBatis-Plus + Knife4j
- docker-compose.yml: 一键启动10个中间件(PG+PostGIS/TDengine/Redis/Kafka/EMQX/Nacos/ES/Kibana/MinIO/GeoServer)
2026-06-14 13:14:07 +08:00

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: