services: api: build: context: . dockerfile: Dockerfile container_name: kodekloud-record-store-api restart: always depends_on: - db - rabbitmq - jaeger - fluent-bit ports: - "${WEB_PORT:-8000}:8000" environment: POSTGRES_HOST: ${POSTGRES_HOST} POSTGRES_DB: ${POSTGRES_DB} POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} RABBITMQ_HOST: ${RABBITMQ_HOST} PYTHONPATH: ${PYTHONPATH} OTEL_SERVICE_NAME: ${OTEL_SERVICE_NAME} OTEL_EXPORTER_OTLP_ENDPOINT: ${OTEL_EXPORTER_OTLP_ENDPOINT} OTEL_EXPORTER_OTLP_PROTOCOL: ${OTEL_EXPORTER_OTLP_PROTOCOL} OTEL_TRACES_SAMPLER: ${OTEL_TRACES_SAMPLER} OTEL_PROPAGATORS: "tracecontext,baggage" DEBUG: ${DEBUG} LOG_LEVEL: ${LOG_LEVEL} ENVIRONMENT: ${ENVIRONMENT} logging: driver: "fluentd" options: fluentd-address: "localhost:24224" tag: "docker.{{.Name}}" fluentd-async: "true" networks: - kodekloud-record-store-net worker: build: context: . dockerfile: Dockerfile container_name: kodekloud-record-store-worker command: ["celery", "-A", "api.worker", "worker", "--loglevel=info"] restart: always depends_on: - rabbitmq - db - pushgateway - jaeger environment: POSTGRES_HOST: ${POSTGRES_HOST} POSTGRES_DB: ${POSTGRES_DB} POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} RABBITMQ_HOST: ${RABBITMQ_HOST} PROMETHEUS_PUSHGATEWAY: ${PROMETHEUS_PUSHGATEWAY} PYTHONPATH: ${PYTHONPATH} OTEL_SERVICE_NAME: kodekloud-record-store-worker DEBUG: ${DEBUG} LOG_LEVEL: ${LOG_LEVEL} ENVIRONMENT: ${ENVIRONMENT} networks: - kodekloud-record-store-net db: image: postgres:15 container_name: kodekloud-record-store-db restart: always environment: POSTGRES_DB: ${POSTGRES_DB} POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data networks: - kodekloud-record-store-net rabbitmq: image: "rabbitmq:3-management" container_name: kodekloud-record-store-rabbitmq restart: always ports: - "5672:5672" - "15672:15672" volumes: - rabbitmq_data:/var/lib/rabbitmq networks: - kodekloud-record-store-net prometheus: image: prom/prometheus:latest container_name: kodekloud-record-store-prometheus restart: always ports: - "9090:9090" volumes: - ./config/monitoring/prometheus.yml:/etc/prometheus/prometheus.yml - ./config/monitoring/alert_rules.yml:/etc/prometheus/alert_rules.yml - ./config/monitoring/sli_rules.yml:/etc/prometheus/sli_rules.yml command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' - '--web.console.libraries=/etc/prometheus/console_libraries' - '--web.console.templates=/etc/prometheus/consoles' - '--web.enable-lifecycle' - '--storage.tsdb.retention.time=${PROMETHEUS_RETENTION_TIME:-15d}' networks: - kodekloud-record-store-net pushgateway: image: prom/pushgateway:latest container_name: kodekloud-record-store-pushgateway restart: always ports: - "9091:9091" networks: - kodekloud-record-store-net grafana: image: grafana/grafana:11.5.1 container_name: kodekloud-record-store-grafana restart: always ports: - "3000:3000" environment: - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_ADMIN_PASSWORD} - GF_USERS_ALLOW_SIGN_UP=false volumes: - grafana_data:/var/lib/grafana - ./config/monitoring/grafana-provisioning:/etc/grafana/provisioning networks: - kodekloud-record-store-net depends_on: - prometheus - loki alertmanager: image: prom/alertmanager:latest container_name: kodekloud-record-store-alertmanager restart: always ports: - "9093:9093" volumes: - ./config/monitoring/alertmanager.yml:/etc/alertmanager/alertmanager.yml networks: - kodekloud-record-store-net blackbox-exporter: image: prom/blackbox-exporter:latest container_name: kodekloud-record-store-blackbox-exporter restart: always ports: - "9115:9115" volumes: - ./config/monitoring/blackbox.yml:/etc/blackbox_exporter/config.yml networks: - kodekloud-record-store-net jaeger: image: jaegertracing/jaeger:latest container_name: kodekloud-record-store-jaeger ports: - "16686:16686" # UI - "14268:14268" # HTTP thrift collector - "14250:14250" # gRPC collector - "4317:4317" # OTLP gRPC - "4318:4318" # OTLP HTTP environment: - COLLECTOR_OTLP_ENABLED=true - COLLECTOR_ZIPKIN_HOST_PORT=:9411 networks: - kodekloud-record-store-net loki: image: grafana/loki:2.8.0 container_name: kodekloud-record-store-loki ports: - "3100:3100" volumes: - ./config/monitoring/logging/loki-config.yaml:/etc/loki/local-config.yaml - loki_data:/tmp/loki - loki_wal:/tmp/wal command: -config.file=/etc/loki/local-config.yaml user: "0" networks: - kodekloud-record-store-net fluent-bit: image: fluent/fluent-bit:1.9 container_name: kodekloud-record-store-fluent-bit volumes: - ./config/monitoring/logging/fluent-bit-config.yaml:/fluent-bit/etc/fluent-bit.conf - /var/lib/docker/containers:/var/lib/docker/containers:ro - /var/run/docker.sock:/var/run/docker.sock ports: - "24224:24224" - "24224:24224/udp" depends_on: - loki networks: - kodekloud-record-store-net user: "0" networks: kodekloud-record-store-net: driver: bridge volumes: postgres_data: rabbitmq_data: prometheus_data: grafana_data: loki_data: loki_wal: