services: qdrant: image: qdrant/qdrant:latest profiles: ["local-qdrant"] ports: - "6333:6333" - "6334:6334" volumes: - qdrant_data:/qdrant/storage kafka: image: apache/kafka:3.8.0 ports: - "9092:9092" environment: KAFKA_NODE_ID: "1" KAFKA_PROCESS_ROLES: "broker,controller" KAFKA_LISTENERS: "PLAINTEXT://:9092,CONTROLLER://:9093,INTERNAL://:9094" KAFKA_ADVERTISED_LISTENERS: "PLAINTEXT://localhost:9092,INTERNAL://kafka:9094" KAFKA_CONTROLLER_LISTENER_NAMES: "CONTROLLER" KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,INTERNAL:PLAINTEXT" KAFKA_INTER_BROKER_LISTENER_NAME: "INTERNAL" KAFKA_CONTROLLER_QUORUM_VOTERS: "1@kafka:9093" KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true" KAFKA_LOG_DIRS: "/var/lib/kafka/data" CLUSTER_ID: "MkU3OEVBNTcwNTJENDM2Qk" KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: "1" KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: "1" KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: "1" KAFKA_DEFAULT_REPLICATION_FACTOR: "1" KAFKA_MIN_INSYNC_REPLICAS: "1" KAFKA_NUM_PARTITIONS: "1" KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: "0" volumes: - kafka_data:/var/lib/kafka/data api: build: . env_file: .env environment: KAFKA_BOOTSTRAP: "kafka:9094" dns: - 8.8.8.8 - 1.1.1.1 volumes: - fastembed_cache:/tmp/fastembed_cache ports: - "127.0.0.1:8000:8000" depends_on: kafka: condition: service_started qdrant: condition: service_started required: false hn_producer: build: . env_file: .env environment: KAFKA_BOOTSTRAP: "kafka:9094" dns: - 8.8.8.8 - 1.1.1.1 command: ["python", "hn_producer.py"] depends_on: - kafka nginx: image: nginx:alpine profiles: ["public"] ports: - "80:80" volumes: - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf:ro depends_on: - api volumes: qdrant_data: kafka_data: fastembed_cache: