docker-compose.yml 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  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-nginx
  9. restart: always
  10. ports:
  11. - "80:80"
  12. - "443:443"
  13. volumes:
  14. - ./configs/nginx/conf.d:/etc/nginx/conf.d
  15. - ./logs/nginx:/var/log/nginx
  16. depends_on:
  17. app-server:
  18. condition: service_started
  19. networks:
  20. - ems-net
  21. # 2. Backend Service (Golang)
  22. app-server:
  23. build:
  24. context: ./backend
  25. dockerfile: Dockerfile
  26. container_name: ems-backend
  27. restart: always
  28. environment:
  29. # --- 应用配置 ---
  30. - GIN_MODE=release
  31. - TZ=Asia/Shanghai
  32. - PORT=8080
  33. # --- 数据库连接串 ---
  34. # PostgreSQL 连接 (对应下方 postgres 服务配置)
  35. - DB_DSN=host=postgres user=ems_user password=ems_pass dbname=ems_db port=5432 sslmode=disable TimeZone=Asia/Shanghai
  36. # TDengine 连接 (REST API 端口 6041)
  37. - TD_DSN=root:taosdata@http(tdengine:6041)/power_db
  38. # Redis 连接
  39. - REDIS_ADDR=redis:6379
  40. # --- 独立变量 (供程序读取) ---
  41. - POSTGRES_USER=ems_user
  42. - POSTGRES_PASSWORD=ems_pass
  43. - POSTGRES_DB=ems_db
  44. - POSTGRES_HOST=postgres
  45. - POSTGRES_PORT=5432
  46. # --- JWT 认证配置 ---
  47. - JWT_SECRET=your_production_secret_key_change_this
  48. - JWT_EXPIRE_HOURS=24
  49. volumes:
  50. - ./logs/backend:/app/logs
  51. depends_on:
  52. - postgres
  53. - tdengine
  54. - redis
  55. networks:
  56. - ems-net
  57. # 3. Database: PostgreSQL
  58. postgres:
  59. image: postgres:15-alpine
  60. container_name: ems-postgres
  61. restart: always
  62. environment:
  63. POSTGRES_USER: ems_user
  64. POSTGRES_PASSWORD: ems_pass
  65. POSTGRES_DB: ems_db
  66. TZ: Asia/Shanghai
  67. volumes:
  68. - pg_data:/var/lib/postgresql/data
  69. # 仅允许本机连接 (安全)
  70. ports:
  71. - "127.0.0.1:5432:5432"
  72. networks:
  73. - ems-net
  74. # 4. Database: TDengine
  75. tdengine:
  76. image: tdengine/tdengine:3.3.0.0
  77. container_name: ems-tdengine
  78. hostname: tdengine
  79. restart: always
  80. privileged: true
  81. environment:
  82. - TAOS_FIRST_EP=tdengine:6030
  83. - TAOS_FQDN=tdengine
  84. - TZ=Asia/Shanghai
  85. volumes:
  86. - ./data/taos/data:/var/lib/taos
  87. - ./data/taos/log:/var/log/taos
  88. # 仅允许本机连接
  89. ports:
  90. - "127.0.0.1:6030:6030"
  91. - "127.0.0.1:6041:6041"
  92. networks:
  93. - ems-net
  94. # 5. Cache: Redis
  95. redis:
  96. image: redis:7-alpine
  97. container_name: ems-redis
  98. restart: always
  99. volumes:
  100. - ./data/redis:/data
  101. environment:
  102. - TZ=Asia/Shanghai
  103. networks:
  104. - ems-net
  105. # 6. Message Broker: EMQX
  106. emqx:
  107. image: emqx/emqx:5.3.0
  108. container_name: ems-emqx
  109. restart: always
  110. ports:
  111. - "1883:1883" # MQTT TCP
  112. - "8083:8083" # MQTT WebSocket
  113. - "18083:18083" # Dashboard
  114. volumes:
  115. - ./data/emqx:/opt/emqx/data
  116. environment:
  117. - EMQX_ALLOW_ANONYMOUS=false # 禁止匿名连接
  118. - EMQX_DASHBOARD__DEFAULT_USERNAME=admin
  119. - EMQX_DASHBOARD__DEFAULT_PASSWORD=public
  120. - TZ=Asia/Shanghai
  121. networks:
  122. - ems-net
  123. networks:
  124. ems-net:
  125. driver: bridge
  126. volumes:
  127. pg_data:
  128. driver: local