services: zookeeper: image: confluentinc/cp-zookeeper:6.0.0 hostname: zookeeper container_name: zookeeper ports: - "2181:2181" environment: ZOOKEEPER_CLIENT_PORT: 2181 ZOOKEEPER_TICK_TIME: 2000 kafka: image: confluentinc/cp-enterprise-kafka:6.0.0 hostname: ${KAFKA_HOSTNAME} container_name: kafka depends_on: - zookeeper ports: - "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:9092,PLAINTEXT_HOST://localhost:29092 KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1 init-kafka: image: confluentinc/cp-enterprise-kafka:6.0.0 depends_on: - kafka entrypoint: [ '/bin/sh', '-c' ] command: | " kafka-topics --bootstrap-server kafka:9092 --create --topic ${KAFKA_NOTIFICATION_TOPIC} --partitions ${KAFKA_PARTITIONS} --replication-factor 1 " prometheus: image: prom/prometheus:latest container_name: prometheus restart: always user: "0" depends_on: - kafka volumes: - ./prometheus/:/etc/prometheus/ - ./prometheus_data/:/prometheus/ command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' - '--web.console.libraries=/etc/prometheus/console_libraries' - '--web.console.templates=/etc/prometheus/consoles' - '--storage.tsdb.retention.time=200h' - '--web.enable-lifecycle' ports: - 9090:9090 grafana: image: grafana/grafana container_name: grafana depends_on: - kafka - prometheus restart: always user: "0" ports: - 3000:3000 environment: - GF_SECURITY_ADMIN_PASSWORD=${GF_SECURITY_ADMIN_PASSWORD} - GF_USERS_ALLOW_SIGN_UP=false - GF_PANELS_DISABLE_SANITIZE_HTML=true - GF_SECURITY_ALLOW_EMBEDDING=true volumes: - ./grafana_data/:/var/lib/grafana/ db: image: postgres:alpine3.18 container_name: ${POSTGRES_HOSTNAME} hostname: ${POSTGRES_HOSTNAME} ports: - ${POSTGRES_PORT}:${POSTGRES_PORT} environment: - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} - POSTGRES_USER=${POSTGRES_USER} - POSTGRES_DB=${POSTGRES_DB} wait-for-db: image: atkrad/wait4x depends_on: - db command: tcp ${POSTGRES_HOSTNAME}:${POSTGRES_PORT} -t 30s -i 250ms rabbit: image: rabbitmq:3-management container_name: ${RABBIT_HOSTNAME} hostname: ${RABBIT_HOSTNAME} ports: - 5672:5672 - 15672:15672 nats: image: nats container_name: ${NATS_HOSTNAME} hostname: ${NATS_HOSTNAME} ports: - 4222:4222 consumer: build: context: . dockerfile: Dockerfile hostname: consumer container_name: consumer restart: always ports: - "${MONITORING_PORT}:${MONITORING_PORT}" depends_on: - prometheus - grafana - kafka command: monitoring app: build: context: . dockerfile: Dockerfile container_name: ${APP_NAME} hostname: ${APP_NAME} restart: always ports: - ${RUNNING_PORT}:${RUNNING_PORT} depends_on: wait-for-db: condition: service_completed_successfully links: - db volumes: prometheus_data: {} grafana_data: {}