services: emqx: image: emqx/emqx:5.8.8 container_name: emqx environment: - EMQX_DASHBOARD__DEFAULT_USERNAME=user - EMQX_DASHBOARD__DEFAULT_PASSWORD=pass ports: - "127.0.0.1:1883:1883" healthcheck: test: ["CMD", "curl", "-f", "http://localhost:18083/api/v5/status"] interval: 10s timeout: 5s retries: 10 start_period: 20s kafka: image: apache/kafka:3.9.0 container_name: kafka environment: - KAFKA_NODE_ID=1 - KAFKA_PROCESS_ROLES=broker,controller - KAFKA_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093 - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092 - KAFKA_CONTROLLER_LISTENER_NAMES=CONTROLLER - KAFKA_CONTROLLER_QUORUM_VOTERS=1@kafka:9093 - KAFKA_LOG_DIRS=/tmp/kraft-combined-logs - KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1 - KAFKA_AUTO_CREATE_TOPICS_ENABLE=true ports: - "127.0.0.1:9092:9092" valkey: image: valkey/valkey:9.0.0 container_name: valkey ports: - "127.0.0.1:6379:6379" node-red: image: nodered/node-red:latest-22 container_name: node-red ports: - "127.0.0.1:1880:1880" volumes: - "../volumes/node-red:/data" presense-decoder: build: context: ../ dockerfile: build/package/Dockerfile.decoder image: presense-decoder container_name: presense-decoder environment: - REDIS_URL=valkey:6379 - KAFKA_URL=kafka:9092 depends_on: - kafka - valkey restart: always presense-server: build: context: ../ dockerfile: build/package/Dockerfile.server image: presense-server container_name: presense-server environment: - REDIS_URL=valkey:6379 - KAFKA_URL=kafka:9092 depends_on: - kafka - emqx ports: - "127.0.0.1:1902:1902" restart: always presense-bridge: build: context: ../ dockerfile: build/package/Dockerfile.bridge image: presense-bridge container_name: presense-bridge environment: - KAFKA_URL=kafka:9092 - MQTT_HOST=emqx:1883 - MQTT_USERNAME=user - MQTT_PASSWORD=pass depends_on: kafka: condition: service_started emqx: condition: service_healthy restart: always