services: zookeeper: image: confluentinc/cp-zookeeper:7.6.0 environment: ZOOKEEPER_CLIENT_PORT: 2181 ZOOKEEPER_TICK_TIME: 2000 ports: ["2181:2181"] kafka: image: confluentinc/cp-kafka:7.6.0 depends_on: [zookeeper] ports: ["9092:9092", "9101:9101"] healthcheck: test: ["CMD", "kafka-broker-api-versions", "--bootstrap-server", "localhost:9092"] interval: 10s timeout: 10s retries: 12 start_period: 30s 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_REPLICATION_FACTOR: 1 KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1 KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0 KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true" KAFKA_JMX_PORT: 9101 KAFKA_JMX_HOSTNAME: localhost postgres: image: postgres:16-alpine environment: POSTGRES_USER: eventflow POSTGRES_PASSWORD: eventflow POSTGRES_DB: eventflow ports: ["5432:5432"] volumes: - pgdata:/var/lib/postgresql/data - ../migrations/001_initial_schema.sql:/docker-entrypoint-initdb.d/001_schema.sql healthcheck: test: ["CMD-SHELL", "pg_isready -U eventflow -d eventflow"] interval: 5s timeout: 5s retries: 12 start_period: 10s redis: image: redis:7-alpine ports: ["6379:6379"] healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 3s retries: 5 api-gateway: build: context: .. dockerfile: docker/Dockerfile.api-gateway ports: ["8080:8080", "9090:9090"] environment: DATABASE_URL: postgres://eventflow:eventflow@postgres:5432/eventflow?sslmode=disable REDIS_URL: redis://redis:6379/0 KAFKA_BROKERS: kafka:29092 HTTP_PORT: 8080 GRPC_PORT: 9090 depends_on: postgres: condition: service_healthy redis: condition: service_healthy kafka: condition: service_healthy restart: on-failure workflow-engine: build: context: .. dockerfile: docker/Dockerfile.workflow-engine ports: ["8081:8081"] environment: DATABASE_URL: postgres://eventflow:eventflow@postgres:5432/eventflow?sslmode=disable REDIS_URL: redis://redis:6379/0 depends_on: postgres: condition: service_healthy redis: condition: service_healthy restart: on-failure consumer-worker: build: context: .. dockerfile: docker/Dockerfile.consumer-worker ports: ["8082:8082"] environment: DATABASE_URL: postgres://eventflow:eventflow@postgres:5432/eventflow?sslmode=disable KAFKA_BROKERS: kafka:29092 CONSUMER_GROUP: eventflow-workers CONSUMER_TOPIC: orders depends_on: postgres: condition: service_healthy kafka: condition: service_healthy restart: on-failure deploy: replicas: 2 prometheus: image: prom/prometheus:v2.51.0 ports: ["9091:9090"] volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml - ../deployments/monitoring/grafana/dashboards:/etc/prometheus/dashboards:ro grafana: image: grafana/grafana:10.4.0 ports: ["3000:3000"] environment: GF_SECURITY_ADMIN_PASSWORD: admin GF_USERS_ALLOW_SIGN_UP: "false" volumes: - ../deployments/monitoring/grafana/provisioning:/etc/grafana/provisioning - ../deployments/monitoring/grafana/dashboards:/var/lib/grafana/dashboards volumes: pgdata: