docker-compose.wsl.yml 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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
  27. - TD_DSN=root:taosdata@tcp(${TD_HOST}:${TD_PORT})/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. volumes:
  37. - ./backend/logs:/app/logs
  38. ports:
  39. - "${PORT}:8080"
  40. depends_on:
  41. - postgres
  42. - tdengine
  43. - redis
  44. # 3. Database: PostgreSQL (Relational Data)
  45. postgres:
  46. image: postgres:15-alpine
  47. container_name: ems-postgres
  48. restart: always
  49. environment:
  50. POSTGRES_USER: ${POSTGRES_USER}
  51. POSTGRES_PASSWORD: ${DB_PASSWORD}
  52. POSTGRES_DB: ${POSTGRES_DB}
  53. volumes:
  54. - pg_data:/var/lib/postgresql/data
  55. ports:
  56. - "5433:5432"
  57. # 4. Database: TDengine (Time-Series Data)
  58. tdengine:
  59. image: tdengine/tdengine:3.3.0.0
  60. container_name: ems-tdengine
  61. ports: ["6030:6030"]
  62. volumes:
  63. - ./data/taos/data:/var/lib/taos
  64. - ./data/taos/log:/var/log/taos
  65. environment:
  66. - TAOS_FIRST_EP=tdengine:6030
  67. # 5. Cache: Redis
  68. redis:
  69. image: redis:7-alpine
  70. container_name: ems-redis
  71. ports: ["6379:6379"]
  72. volumes:
  73. - ./data/redis:/data
  74. # 6. Message Broker: EMQX (MQTT)
  75. emqx:
  76. image: emqx/emqx:5.3.0
  77. ports:
  78. - "1883:1883" # MQTT TCP
  79. - "8083:8083" # MQTT WebSocket
  80. - "18083:18083" # Dashboard
  81. # volumes:
  82. # - ./configs/emqx:/opt/emqx/etc
  83. environment:
  84. - EMQX_ALLOW_ANONYMOUS=true # For dev only
  85. # 7. Backup Service (Sidecar)
  86. pg-backup:
  87. image: prodrigestivill/postgres-backup-local
  88. restart: always
  89. environment:
  90. - POSTGRES_HOST=postgres
  91. - POSTGRES_DB=${POSTGRES_DB}
  92. - POSTGRES_USER=${POSTGRES_USER}
  93. - POSTGRES_PASSWORD=${DB_PASSWORD}
  94. - SCHEDULE=@daily
  95. - BACKUP_KEEP_DAYS=7
  96. - BACKUP_DIR=/backups
  97. volumes:
  98. - ./backups/postgres:/backups
  99. depends_on:
  100. - postgres
  101. volumes:
  102. pg_data:
  103. driver: local
  104. taos_data:
  105. driver: local