docker-compose.wsl.yml 2.9 KB

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