docker-compose.wsl.yml 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. version: '3.8'
  2. services:
  3. # 1. Frontend Gateway & Static File Server
  4. nginx:
  5. build:
  6. context: ./frontend
  7. dockerfile: Dockerfile
  8. container_name: ems-wsl-nginx
  9. ports: ["80:80", "443:443"]
  10. volumes:
  11. - ./configs/nginx/conf.d:/etc/nginx/conf.d
  12. - ./frontend/dist:/usr/share/nginx/html # 开发环境挂载 dist,方便查看构建结果
  13. depends_on:
  14. app-server:
  15. condition: service_started
  16. # 2. Backend Service (Golang)
  17. app-server:
  18. build:
  19. context: ./backend
  20. dockerfile: Dockerfile
  21. container_name: ems-wsl-backend
  22. restart: always
  23. healthcheck:
  24. test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8080/ping"]
  25. interval: 10s
  26. timeout: 5s
  27. retries: 5
  28. environment:
  29. # --- 硬编码配置 (无需 .env) ---
  30. - GIN_MODE=debug # 开发环境使用 debug 模式
  31. - PORT=8080
  32. # 数据库连接
  33. - DB_DSN=host=postgres user=ems_user password=ems_pass dbname=ems_db port=5432 sslmode=disable TimeZone=Asia/Shanghai
  34. - TD_DSN=root:taosdata@http(tdengine:6041)/power_db
  35. - REDIS_ADDR=redis:6379
  36. # 独立变量
  37. - POSTGRES_USER=ems_user
  38. - POSTGRES_PASSWORD=ems_pass
  39. - POSTGRES_DB=ems_db
  40. - POSTGRES_HOST=postgres
  41. - POSTGRES_PORT=5432
  42. # 安全配置
  43. - JWT_SECRET=change_me_dev_secret
  44. - JWT_EXPIRE_HOURS=24
  45. - TZ=Asia/Shanghai
  46. volumes:
  47. - ./backend/logs:/app/logs
  48. ports:
  49. - "8080:8080"
  50. depends_on:
  51. - postgres
  52. - tdengine
  53. - redis
  54. # 3. Database: PostgreSQL
  55. postgres:
  56. image: postgres:15-alpine
  57. container_name: ems-wsl-postgres
  58. restart: always
  59. environment:
  60. POSTGRES_USER: ems_user
  61. POSTGRES_PASSWORD: ems_pass
  62. POSTGRES_DB: ems_db
  63. TZ: Asia/Shanghai
  64. volumes:
  65. - pg_data_wsl:/var/lib/postgresql/data
  66. ports:
  67. - "5433:5432" # 开发环境映射到 5433,避免与本地 PG 冲突
  68. # 4. Database: TDengine
  69. tdengine:
  70. image: tdengine/tdengine:3.3.0.0
  71. container_name: ems-wsl-tdengine
  72. hostname: tdengine
  73. privileged: true
  74. stop_grace_period: 2m
  75. ports: ["6030:6030", "6041:6041"]
  76. volumes:
  77. - ./data/taos/data:/var/lib/taos
  78. - ./data/taos/log:/var/log/taos
  79. environment:
  80. - TAOS_FIRST_EP=tdengine:6030
  81. - TAOS_FQDN=tdengine
  82. - TZ=Asia/Shanghai
  83. # 5. Cache: Redis
  84. redis:
  85. image: redis:7-alpine
  86. container_name: ems-wsl-redis
  87. ports: ["6379:6379"]
  88. volumes:
  89. - ./data/redis:/data
  90. environment:
  91. - TZ=Asia/Shanghai
  92. # 6. Message Broker: EMQX
  93. emqx:
  94. image: emqx/emqx:5.3.0
  95. container_name: ems-wsl-emqx
  96. ports:
  97. - "1883:1883" # MQTT TCP
  98. - "8083:8083" # MQTT WebSocket
  99. - "18083:18083" # Dashboard
  100. environment:
  101. - EMQX_ALLOW_ANONYMOUS=true # 开发环境允许匿名
  102. - EMQX_DASHBOARD__DEFAULT_USERNAME=admin
  103. - EMQX_DASHBOARD__DEFAULT_PASSWORD=public
  104. - TZ=Asia/Shanghai
  105. volumes:
  106. pg_data_wsl:
  107. driver: local
  108. taos_data:
  109. driver: local