docker-compose.wsl.yml 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. version: '3.8'
  2. services:
  3. # 1. Frontend Gateway & Static File Server
  4. nginx:
  5. build:
  6. context: ./frontend
  7. dockerfile: Dockerfile
  8. ports: ["80:80", "443:443"]
  9. volumes:
  10. - ./configs/nginx/conf.d:/etc/nginx/conf.d
  11. depends_on:
  12. app-server:
  13. condition: service_started
  14. # 2. Backend Service (Golang)
  15. app-server:
  16. build:
  17. context: ./backend
  18. dockerfile: Dockerfile
  19. restart: always
  20. healthcheck:
  21. test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8080/ping"]
  22. interval: 10s
  23. timeout: 5s
  24. retries: 5
  25. environment:
  26. - DB_DSN=host=postgres user=${POSTGRES_USER} password=${DB_PASSWORD} dbname=${POSTGRES_DB} port=${POSTGRES_PORT} sslmode=disable TimeZone=Asia/Shanghai
  27. - TD_DSN=root:taosdata@http(${TD_HOST}:6041)/power_db
  28. - REDIS_ADDR=${REDIS_HOST}:${REDIS_PORT}
  29. - POSTGRES_USER=${POSTGRES_USER}
  30. - POSTGRES_PASSWORD=${DB_PASSWORD}
  31. - POSTGRES_DB=${POSTGRES_DB}
  32. - POSTGRES_HOST=${POSTGRES_HOST}
  33. - POSTGRES_PORT=${POSTGRES_PORT}
  34. - JWT_SECRET=${JWT_SECRET}
  35. - JWT_EXPIRE_HOURS=${JWT_EXPIRE_HOURS}
  36. - TZ=Asia/Shanghai
  37. volumes:
  38. - ./backend/logs:/app/logs
  39. ports:
  40. - "${PORT}:8080"
  41. depends_on:
  42. - postgres
  43. - tdengine
  44. - redis
  45. # 3. Database: PostgreSQL (Relational Data)
  46. postgres:
  47. image: postgres:15-alpine
  48. container_name: ems-postgres
  49. restart: always
  50. environment:
  51. POSTGRES_USER: ${POSTGRES_USER}
  52. POSTGRES_PASSWORD: ${DB_PASSWORD}
  53. POSTGRES_DB: ${POSTGRES_DB}
  54. TZ: Asia/Shanghai
  55. volumes:
  56. - pg_data:/var/lib/postgresql/data
  57. ports:
  58. - "5433:5432"
  59. # 4. Database: TDengine (Time-Series Data)
  60. tdengine:
  61. image: tdengine/tdengine:3.3.0.0
  62. container_name: ems-tdengine
  63. hostname: tdengine
  64. privileged: true
  65. ports: ["6030:6030"]
  66. volumes:
  67. - ./data/taos/data:/var/lib/taos
  68. - ./data/taos/log:/var/log/taos
  69. environment:
  70. - TAOS_FIRST_EP=tdengine:6030
  71. - TAOS_FQDN=tdengine
  72. - TZ=Asia/Shanghai
  73. # 5. Cache: Redis
  74. redis:
  75. image: redis:7-alpine
  76. container_name: ems-redis
  77. ports: ["6379:6379"]
  78. volumes:
  79. - ./data/redis:/data
  80. environment:
  81. - TZ=Asia/Shanghai
  82. # 6. Message Broker: EMQX (MQTT)
  83. emqx:
  84. image: emqx/emqx:5.3.0
  85. ports:
  86. - "1883:1883" # MQTT TCP
  87. - "8083:8083" # MQTT WebSocket
  88. - "18083:18083" # Dashboard
  89. # volumes:
  90. # - ./configs/emqx:/opt/emqx/etc
  91. environment:
  92. - EMQX_ALLOW_ANONYMOUS=true # For dev only
  93. - TZ=Asia/Shanghai
  94. # 7. Backup Service (Sidecar)
  95. pg-backup:
  96. image: prodrigestivill/postgres-backup-local
  97. restart: always
  98. environment:
  99. - POSTGRES_HOST=postgres
  100. - POSTGRES_DB=${POSTGRES_DB}
  101. - POSTGRES_USER=${POSTGRES_USER}
  102. - POSTGRES_PASSWORD=${DB_PASSWORD}
  103. - SCHEDULE=@daily
  104. - BACKUP_KEEP_DAYS=7
  105. - BACKUP_DIR=/backups
  106. volumes:
  107. - ./backups/postgres:/backups
  108. depends_on:
  109. - postgres
  110. volumes:
  111. pg_data:
  112. driver: local
  113. taos_data:
  114. driver: local