name: gophercon networks: gophercon-net: driver: bridge volumes: prometheus-volume: tempo-volume: services: gophercon: image: ghcr.io/rodneyosodo/gophercon-africa-2024:latest container_name: gophercon restart: unless-stopped ports: - ${GOPHERCON_PORT}:${GOPHERCON_PORT} - ${GOPHERCON_PROMETHEUS_PORT}:${GOPHERCON_PROMETHEUS_PORT} expose: - ${GOPHERCON_PORT} - ${GOPHERCON_PROMETHEUS_PORT} networks: - gophercon-net environment: GOPHERCON_LOG_LEVEL: ${GOPHERCON_LOG_LEVEL} GOPHERCON_ADDR: ${GOPHERCON_ADDR} GOPHERCON_PROMETHEUS_ENDPOINT: ${GOPHERCON_PROMETHEUS_ENDPOINT} GOPHERCON_READ_TIMEOUT: ${GOPHERCON_READ_TIMEOUT} GOPHERCON_WRITE_TIMEOUT: ${GOPHERCON_WRITE_TIMEOUT} GOPHERCON_OTEL_URL: ${GOPHERCON_OTEL_URL} GOPHERCON_TRACE_RATIO: ${GOPHERCON_TRACE_RATIO} GOPHERCON_LOKI_URL: ${GOPHERCON_LOKI_URL} GOPHERCON_PYROSCOPE_URL: ${GOPHERCON_PYROSCOPE_URL} loki: image: grafana/loki:2.9.8 container_name: loki restart: on-failure ports: - ${LOKI_PORT}:${LOKI_PORT} command: "-config.file=/etc/loki/config.yaml -target=all" volumes: - ./loki/loki-config.yaml:/etc/loki/config.yaml networks: - gophercon-net prometheus: image: prom/prometheus:v2.54.1 container_name: prometheus restart: on-failure command: - --web.enable-remote-write-receiver - --enable-feature=native-histograms - --config.file=/etc/prometheus/prometheus.yml ports: - ${PROMETHEUS_PORT}:9090 networks: - gophercon-net volumes: - type: bind source: ./prometheus/prometheus.yaml target: /etc/prometheus/prometheus.yml - prometheus-volume:/prometheus tempo-init: image: grafana/tempo:2.6.0 container_name: tempo-init user: root entrypoint: - "chown" - "10001:10001" - "/var/tempo" volumes: - tempo-volume:/var/tempo networks: - gophercon-net memcached: image: memcached:1.6.29 container_name: memcached restart: on-failure ports: - ${TEMPO_MEMCACHED_PORT}:11211 environment: - MEMCACHED_MAX_MEMORY=${MEMCACHED_MAX_MEMORY} - MEMCACHED_THREADS=${MEMCACHED_THREADS} networks: - gophercon-net tempo: image: grafana/tempo:2.6.0 container_name: tempo command: ["-config.file=/etc/tempo.yaml"] restart: on-failure depends_on: - tempo-init - memcached ports: - ${TEMPO_PORT}:3200 - ${TEMPO_OLTP_HTTP}:4318 volumes: - ./tempo/tempo.yaml:/etc/tempo.yaml - tempo-volume:/var/tempo networks: - gophercon-net grafana: image: grafana/grafana:11.2.0 container_name: grafana restart: on-failure depends_on: - prometheus ports: - ${GRAFANA_PORT}:3000 environment: - GF_LOG_LEVEL=ERROR - GF_SECURITY_ADMIN_USER=${GRAFANA_ADMIN_USER} - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_ADMIN_PASSWORD} volumes: - ./grafana:/etc/grafana/provisioning/ networks: - gophercon-net pyroscope: image: grafana/pyroscope:latest container_name: pyroscope restart: on-failure environment: JAEGER_AGENT_HOST: tempo JAEGER_SAMPLER_TYPE: const JAEGER_SAMPLER_PARAM: 1 command: ["-config.file=/etc/pyroscope.yml"] ports: - "4040:4040" volumes: - ./pyroscope/pyroscope.yml:/etc/pyroscope.yml networks: - gophercon-net