| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- version: '3.8'
- services:
- # 1. Frontend Gateway & Static File Server
- nginx:
- build:
- context: ./frontend
- dockerfile: Dockerfile
- container_name: ems-wsl-nginx
- ports: ["80:80", "443:443"]
- volumes:
- - ./configs/nginx/conf.d:/etc/nginx/conf.d
- - ./frontend/dist:/usr/share/nginx/html # 开发环境挂载 dist,方便查看构建结果
- depends_on:
- app-server:
- condition: service_started
- # 2. Backend Service (Golang)
- app-server:
- build:
- context: ./backend
- dockerfile: Dockerfile
- container_name: ems-wsl-backend
- restart: always
- healthcheck:
- test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8080/ping"]
- interval: 10s
- timeout: 5s
- retries: 5
- environment:
- # --- 硬编码配置 (无需 .env) ---
- - GIN_MODE=debug # 开发环境使用 debug 模式
- - PORT=8080
-
- # 数据库连接
- - DB_DSN=host=postgres user=ems_user password=ems_pass dbname=ems_db port=5432 sslmode=disable TimeZone=Asia/Shanghai
- - TD_DSN=root:taosdata@http(tdengine:6041)/power_db
- - REDIS_ADDR=redis:6379
-
- # 独立变量
- - POSTGRES_USER=ems_user
- - POSTGRES_PASSWORD=ems_pass
- - POSTGRES_DB=ems_db
- - POSTGRES_HOST=postgres
- - POSTGRES_PORT=5432
-
- # 安全配置
- - JWT_SECRET=change_me_dev_secret
- - JWT_EXPIRE_HOURS=24
- - TZ=Asia/Shanghai
- volumes:
- - ./backend/logs:/app/logs
- ports:
- - "8080:8080"
- depends_on:
- - postgres
- - tdengine
- - redis
- # 3. Database: PostgreSQL
- postgres:
- image: postgres:15-alpine
- container_name: ems-wsl-postgres
- restart: always
- environment:
- POSTGRES_USER: ems_user
- POSTGRES_PASSWORD: ems_pass
- POSTGRES_DB: ems_db
- TZ: Asia/Shanghai
- volumes:
- - pg_data_wsl:/var/lib/postgresql/data
- ports:
- - "5433:5432" # 开发环境映射到 5433,避免与本地 PG 冲突
- # 4. Database: TDengine
- tdengine:
- image: tdengine/tdengine:3.3.0.0
- container_name: ems-wsl-tdengine
- hostname: tdengine
- privileged: true
- stop_grace_period: 2m
- ports: ["6030:6030", "6041:6041"]
- volumes:
- - ./data/taos/data:/var/lib/taos
- - ./data/taos/log:/var/log/taos
- environment:
- - TAOS_FIRST_EP=tdengine:6030
- - TAOS_FQDN=tdengine
- - TZ=Asia/Shanghai
- # 5. Cache: Redis
- redis:
- image: redis:7-alpine
- container_name: ems-wsl-redis
- ports: ["6379:6379"]
- volumes:
- - ./data/redis:/data
- environment:
- - TZ=Asia/Shanghai
- # 6. Message Broker: EMQX
- emqx:
- image: emqx/emqx:5.3.0
- container_name: ems-wsl-emqx
- ports:
- - "1883:1883" # MQTT TCP
- - "8083:8083" # MQTT WebSocket
- - "18083:18083" # Dashboard
- environment:
- - EMQX_ALLOW_ANONYMOUS=true # 开发环境允许匿名
- - EMQX_DASHBOARD__DEFAULT_USERNAME=admin
- - EMQX_DASHBOARD__DEFAULT_PASSWORD=public
- - TZ=Asia/Shanghai
- volumes:
- pg_data_wsl:
- driver: local
- taos_data:
- driver: local
|