services: postgres: image: postgres:16 environment: POSTGRES_DB: vigilcare POSTGRES_USER: postgres POSTGRES_PASSWORD: password ports: - "5436:5432" volumes: - pg_data:/var/lib/postgresql/data redis: image: redis:7-alpine ports: - "6382:6379" seq: image: datalust/seq:latest environment: ACCEPT_EULA: "Y" SEQ_FIRSTRUN_ADMINPASSWORD: "admin" ports: - "5345:80" volumes: - seq_data:/data kafka: image: apache/kafka:3.7.0 ports: - "9092:9092" environment: KAFKA_NODE_ID: 1 KAFKA_PROCESS_ROLES: broker,controller KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT KAFKA_CONTROLLER_QUORUM_VOTERS: 1@kafka:9093 KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1 KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1 # Disable auto-creation — topics are provisioned explicitly with the correct # partition count. Auto-creation would silently create a topic with 1 partition # if the relay publishes before the provisioner runs. KAFKA_AUTO_CREATE_TOPICS_ENABLE: "false" # Fixed ID prevents the broker from reinitializing storage on restart. # Generate once with: kafka-storage.sh random-uuid | base64 CLUSTER_ID: "MkU3OEVBNTcwNTJENDM2Qk" volumes: - kafka_data:/var/lib/kafka/data elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:8.13.0 environment: - discovery.type=single-node # Security disabled for development — no TLS negotiation overhead, no keystore setup. # A production deployment would enable xpack.security and use HTTPS. - xpack.security.enabled=false - ES_JAVA_OPTS=-Xms512m -Xmx512m - cluster.name=vigilcare-dev ports: - "9200:9200" volumes: - es_data:/usr/share/elasticsearch/data healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9200/_cluster/health"] interval: 10s timeout: 5s retries: 10 rabbitmq: image: rabbitmq:3.13-management-alpine container_name: vigilcare_rabbitmq ports: - "5674:5672" # AMQP - "15674:15672" # management UI environment: RABBITMQ_DEFAULT_USER: guest RABBITMQ_DEFAULT_PASS: guest healthcheck: test: ["CMD", "rabbitmq-diagnostics", "ping"] interval: 10s timeout: 5s retries: 5 minio: image: minio/minio:RELEASE.2024-07-04T14-25-45Z container_name: vigilcare_minio command: server /data --console-address ":9001" ports: - "9005:9000" # S3 API - "9006:9001" # console environment: MINIO_ROOT_USER: minioadmin MINIO_ROOT_PASSWORD: minioadmin volumes: - minio_data:/data volumes: pg_data: seq_data: kafka_data: es_data: minio_data: