name: grafana-fs-dev services: proxy: image: grafana-proxy build: context: . dockerfile: proxy.dockerfile volumes: - ../../public/build:/cdn/public/build - ../../public/app/plugins:/cdn/public/app/plugins - ../../public/fonts:/cdn/public/fonts ports: - '3000:80' # Gateway - '3010:81' # CDN depends_on: - grafana-api - frontend-service labels: - 'alloy.logs=true' grafana-api: image: grafana-fs-dev build: context: ../.. dockerfile: devenv/frontend-service/grafana-fs-dev.dockerfile entrypoint: ['bin/grafana', 'server'] volumes: - backend-data:/grafana/data - ./provisioning/datasources:/grafana/conf/provisioning/datasources - ./provisioning/dashboards:/grafana/conf/provisioning/dashboards - ../dev-dashboards:/grafana/conf/dev-dashboards - ./configs/grafana-api.local.ini:/grafana/conf/custom.ini - ../../public/openapi3.json:/grafana/public/openapi3.json - ../../public/api-merged.json:/grafana/public/api-merged.json environment: OTEL_BSP_SCHEDULE_DELAY: 500 GF_DEFAULT_APP_MODE: development GF_PANELS_ENABLE_ALPHA: true GF_SERVER_CDN_URL: http://localhost:3010 GF_FEATURE_TOGGLES_ENABLE: enableNativeHTTPHistogram GF_DATABASE_URL: postgres://grafana:grafana@postgres:5432/grafana GF_SERVER_ROUTER_LOGGING: true GF_LOG_LEVEL: info GF_AUTH_LOGIN_COOKIE_NAME: grafana_fs_dev_login # set a custom cookie name to not conflict with other instances running on localhost OTEL_SERVICE_NAME: grafana-api GF_TRACING_OPENTELEMETRY_OTLP_ADDRESS: 'alloy:4317' GF_TRACING_OPENTELEMETRY_OTLP_PROPAGATION: jaeger,w3c ports: - '3011:3000' labels: - 'alloy.logs=true' frontend-service: image: grafana-fs-dev build: context: ../.. dockerfile: devenv/frontend-service/grafana-fs-dev.dockerfile entrypoint: ['bin/grafana', 'server', 'target'] volumes: - ./configs/frontend-service.local.ini:/grafana/conf/custom.ini ports: - '3012:3000' labels: - 'alloy.logs=true' environment: OTEL_BSP_SCHEDULE_DELAY: 500 GF_DATABASE_SKIP_MIGRATIONS: true GF_DATABASE_ENSURE_DEFAULT_ORG_AND_USER: false GF_DEFAULT_APP_MODE: development GF_DEFAULT_TARGET: frontend-server GF_SECURITY_CONTENT_SECURITY_POLICY: false GF_FEATURE_TOGGLES_ENABLE: enableNativeHTTPHistogram GF_SERVER_CDN_URL: http://localhost:3010 GF_SERVER_ROUTER_LOGGING: true GF_LOG_LEVEL: info OTEL_SERVICE_NAME: frontend-service GF_TRACING_OPENTELEMETRY_OTLP_ADDRESS: 'alloy:4317' GF_TRACING_OPENTELEMETRY_OTLP_PROPAGATION: jaeger,w3c postgres: image: postgres:16.1-alpine3.19@sha256:17eb369d9330fe7fbdb2f705418c18823d66322584c77c2b43cc0e1851d01de7 environment: POSTGRES_USER: grafana POSTGRES_PASSWORD: grafana POSTGRES_DB: grafana volumes: - postgres-data:/var/lib/postgresql/data labels: - 'alloy.logs=true' alloy: image: grafana/alloy:v1.11.3@sha256:8c7256f412feb9f5f48f9f6f9394dc97ca887f63dea9304f347970ecc1787669 volumes: - ./configs/alloy:/alloy-config - /var/run/docker.sock:/var/run/docker.sock # To scrape Docker container logs - alloy-data:/var/lib/alloy/data ports: - '12346:12345' # Alloy UI command: - run - --server.http.listen-addr=0.0.0.0:12345 - --storage.path=/var/lib/alloy/data - /alloy-config depends_on: - loki labels: - 'alloy.logs=true' prometheus: image: prom/prometheus:v3.7.3@sha256:49214755b6153f90a597adcbff0252cc61069f8ab69ce8411285cd4a560e8038 volumes: - prometheus-data:/prometheus command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' - '--web.enable-remote-write-receiver' - '--enable-feature=native-histograms' labels: - 'alloy.logs=true' loki: image: grafana/loki:3.5.7@sha256:0eaee7bf39cc83aaef46914fb58f287d4f4c4be6ec96b86c2ed55719a75e49c8 volumes: - loki-data:/loki command: -config.file=/etc/loki/local-config.yaml labels: - 'alloy.logs=true' tempo-init: image: busybox:1.37.0@sha256:e3652a00a2fabd16ce889f0aa32c38eec347b997e73bd09e69c962ec7f8732ee user: root entrypoint: - 'chown' - '10001:10001' - '/var/tempo' volumes: - tempo-data:/var/tempo tempo: image: grafana/tempo:2.9.0@sha256:65a5789759435f1ef696f1953258b9bbdb18eb571d5ce711ff812d2e128288a4 volumes: - tempo-data:/var/lib/tempo - ./configs/tempo.yaml:/etc/tempo/tempo.yaml command: ['-config.file=/etc/tempo/tempo.yaml'] labels: - 'alloy.logs=true' depends_on: tempo-init: condition: service_completed_successfully volumes: backend-data: postgres-data: alloy-data: loki-data: tempo-data: prometheus-data: