version: '3.8' services: db: image: postgres:15-alpine container_name: HydroponicOne_db restart: unless-stopped environment: POSTGRES_USER: user POSTGRES_PASSWORD: password POSTGRES_DB: HydroponicOne ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data influxdb: image: influxdb:2.7-alpine container_name: HydroponicOne_influxdb restart: unless-stopped environment: DOCKER_INFLUXDB_INIT_MODE: setup DOCKER_INFLUXDB_INIT_USERNAME: admin DOCKER_INFLUXDB_INIT_PASSWORD: secretpassword DOCKER_INFLUXDB_INIT_ORG: hydro_org DOCKER_INFLUXDB_INIT_BUCKET: hydro_bucket DOCKER_INFLUXDB_INIT_ADMIN_TOKEN: super-secret-influx-token ports: - "8086:8086" volumes: - influxdb_data:/var/lib/influxdb2 mosquitto: image: eclipse-mosquitto:2 container_name: HydroponicOne_mosquitto restart: unless-stopped ports: - "1883:1883" - "8883:8883" volumes: - ./mosquitto.conf:/mosquitto/config/mosquitto.conf - mosquitto_data:/mosquitto/data - mosquitto_log:/mosquitto/log backend: build: context: ../backend dockerfile: Dockerfile container_name: HydroponicOne_backend restart: unless-stopped depends_on: - db - influxdb - mosquitto ports: - "3000:3000" environment: - DATABASE_URL=postgresql://user:password@db:5432/HydroponicOne - INFLUX_URL=http://influxdb:8086 - INFLUX_TOKEN=super-secret-influx-token - INFLUX_ORG=hydro_org - INFLUX_BUCKET=hydro_bucket - MQTT_BROKER=mosquitto - MQTT_PORT=1883 - MQTT_USER= - MQTT_PASSWORD= - MQTT_BASE_TOPIC=HydroponicOne - PORT=3000 - FRONTEND_ORIGIN=http://localhost:80 - JWT_SECRET=${JWT_SECRET:?Set JWT_SECRET to a unique random secret (openssl rand -base64 32)} frontend: build: context: ../frontend dockerfile: Dockerfile args: VITE_API_URL: http://localhost:3000 container_name: HydroponicOne_frontend restart: unless-stopped depends_on: - backend ports: - "80:80" volumes: postgres_data: influxdb_data: mosquitto_data: mosquitto_log: