version: '3.8' services: # PostgreSQL with pgvector extension postgres: image: pgvector/pgvector:pg15 container_name: iconsulting-postgres environment: POSTGRES_USER: iconsulting POSTGRES_PASSWORD: dev_password_123 POSTGRES_DB: iconsulting ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data - ./services/postgres/init.sql:/docker-entrypoint-initdb.d/init.sql healthcheck: test: ["CMD-SHELL", "pg_isready -U iconsulting"] interval: 10s timeout: 5s retries: 5 networks: - iconsulting-network # Neo4j Graph Database neo4j: image: neo4j:5 container_name: iconsulting-neo4j environment: NEO4J_AUTH: neo4j/dev_password_123 NEO4J_PLUGINS: '["apoc"]' NEO4J_dbms_security_procedures_unrestricted: apoc.* ports: - "7474:7474" # HTTP - "7687:7687" # Bolt volumes: - neo4j_data:/data - neo4j_logs:/logs healthcheck: test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider http://localhost:7474 || exit 1"] interval: 15s timeout: 10s retries: 5 networks: - iconsulting-network # Redis Cache redis: image: redis:7-alpine container_name: iconsulting-redis ports: - "6379:6379" volumes: - redis_data:/data command: redis-server --appendonly yes healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 networks: - iconsulting-network # Zookeeper for Kafka zookeeper: image: confluentinc/cp-zookeeper:7.4.0 container_name: iconsulting-zookeeper environment: ZOOKEEPER_CLIENT_PORT: 2181 ZOOKEEPER_TICK_TIME: 2000 ports: - "2181:2181" volumes: - zookeeper_data:/var/lib/zookeeper/data - zookeeper_logs:/var/lib/zookeeper/log networks: - iconsulting-network # Kafka Message Broker kafka: image: confluentinc/cp-kafka:7.4.0 container_name: iconsulting-kafka depends_on: - zookeeper ports: - "9092:9092" - "29092:29092" environment: KAFKA_BROKER_ID: 1 KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092 KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1 KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1 KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0 KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'true' volumes: - kafka_data:/var/lib/kafka/data healthcheck: test: ["CMD-SHELL", "kafka-broker-api-versions --bootstrap-server localhost:9092"] interval: 30s timeout: 10s retries: 5 networks: - iconsulting-network # Kafka UI (optional, for debugging) kafka-ui: image: provectuslabs/kafka-ui:latest container_name: iconsulting-kafka-ui depends_on: - kafka ports: - "8080:8080" environment: KAFKA_CLUSTERS_0_NAME: iconsulting KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka:29092 KAFKA_CLUSTERS_0_ZOOKEEPER: zookeeper:2181 networks: - iconsulting-network networks: iconsulting-network: driver: bridge volumes: postgres_data: neo4j_data: neo4j_logs: redis_data: zookeeper_data: zookeeper_logs: kafka_data: