networks: home-automation: driver: bridge volumes: postgres-data: clickhouse-data: redis-data: rabbitmq-data: mosquitto-data: services: mosquitto: image: eclipse-mosquitto:2 ports: - "1883:1883" volumes: - ./configs/mosquitto/mosquitto.conf:/mosquitto/config/mosquitto.conf:ro - mosquitto-data:/mosquitto/data networks: - home-automation restart: unless-stopped postgres: image: postgres:16-alpine environment: POSTGRES_DB: ${POSTGRES_DB} POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} ports: - "${POSTGRES_PORT}:5432" volumes: - postgres-data:/var/lib/postgresql/data - ./migrations/postgres:/docker-entrypoint-initdb.d:ro networks: - home-automation healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"] interval: 5s timeout: 5s retries: 10 restart: unless-stopped clickhouse: image: clickhouse/clickhouse-server:24-alpine environment: CLICKHOUSE_DB: ${CLICKHOUSE_DB} CLICKHOUSE_USER: ${CLICKHOUSE_USER} CLICKHOUSE_PASSWORD: ${CLICKHOUSE_PASSWORD} ports: - "${CLICKHOUSE_HTTP_PORT}:8123" - "${CLICKHOUSE_NATIVE_PORT}:9000" volumes: - clickhouse-data:/var/lib/clickhouse - ./migrations/clickhouse:/docker-entrypoint-initdb.d:ro networks: - home-automation healthcheck: test: ["CMD", "clickhouse-client", "--query", "SELECT 1"] interval: 5s timeout: 5s retries: 10 restart: unless-stopped redis: image: redis:7-alpine ports: - "${REDIS_PORT}:6379" volumes: - redis-data:/data networks: - home-automation restart: unless-stopped rabbitmq: image: rabbitmq:3-management-alpine environment: RABBITMQ_DEFAULT_USER: ${RABBITMQ_USER} RABBITMQ_DEFAULT_PASS: ${RABBITMQ_PASSWORD} ports: - "${RABBITMQ_PORT}:5672" - "${RABBITMQ_MANAGEMENT_PORT}:15672" volumes: - rabbitmq-data:/var/lib/rabbitmq networks: - home-automation healthcheck: test: ["CMD", "rabbitmq-diagnostics", "-q", "ping"] interval: 10s timeout: 5s retries: 10 restart: unless-stopped ingest-service: build: ./services/ingest-service environment: MQTT_HOST: mosquitto MQTT_PORT: 1883 CLICKHOUSE_HOST: clickhouse CLICKHOUSE_NATIVE_PORT: 9000 CLICKHOUSE_DB: ${CLICKHOUSE_DB} CLICKHOUSE_USER: ${CLICKHOUSE_USER} CLICKHOUSE_PASSWORD: ${CLICKHOUSE_PASSWORD} RABBITMQ_HOST: rabbitmq RABBITMQ_PORT: 5672 RABBITMQ_USER: ${RABBITMQ_USER} RABBITMQ_PASSWORD: ${RABBITMQ_PASSWORD} depends_on: mosquitto: condition: service_started clickhouse: condition: service_healthy rabbitmq: condition: service_healthy networks: - home-automation restart: unless-stopped device-control-service: build: context: . dockerfile: services/device-control-service/Dockerfile ports: - "${DEVICE_CONTROL_GRPC_PORT}:50051" environment: DEVICE_CONTROL_GRPC_PORT: 50051 MQTT_HOST: mosquitto MQTT_PORT: 1883 REDIS_HOST: redis REDIS_PORT: 6379 REDIS_PASSWORD: ${REDIS_PASSWORD} REDIS_DB: ${REDIS_DB} RABBITMQ_HOST: rabbitmq RABBITMQ_PORT: 5672 RABBITMQ_USER: ${RABBITMQ_USER} RABBITMQ_PASSWORD: ${RABBITMQ_PASSWORD} DEVICE_CONTROL_HEALTHCHECK_TIMEOUT: ${DEVICE_CONTROL_HEALTHCHECK_TIMEOUT} DEVICE_CONTROL_HEALTHCHECK_INTERVAL: ${DEVICE_CONTROL_HEALTHCHECK_INTERVAL} depends_on: mosquitto: condition: service_started redis: condition: service_started rabbitmq: condition: service_healthy networks: - home-automation restart: unless-stopped rule-engine-service: build: context: . dockerfile: services/rule-engine-service/Dockerfile environment: POSTGRES_HOST: postgres POSTGRES_PORT: 5432 POSTGRES_DB: ${POSTGRES_DB} POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} DEVICE_CONTROL_HOST: device-control-service DEVICE_CONTROL_GRPC_PORT: 50051 RABBITMQ_HOST: rabbitmq RABBITMQ_PORT: 5672 RABBITMQ_USER: ${RABBITMQ_USER} RABBITMQ_PASSWORD: ${RABBITMQ_PASSWORD} RULE_ENGINE_CACHE_REFRESH_INTERVAL: ${RULE_ENGINE_CACHE_REFRESH_INTERVAL} depends_on: postgres: condition: service_healthy rabbitmq: condition: service_healthy device-control-service: condition: service_started networks: - home-automation restart: unless-stopped # Remaining app services (health-check-service, esp32-emulator, # laravel-app) are added here as they get implemented — see # services/*/README.md for the plan for each one.