x-service-base: &service-base user: ${UID:?UID missing}:${GID:?GID missing} tty: true x-volume-app: &volume-app ./:/app/ x-env-base: &env-base TZ: ${TZ:?TZ missing} services: server: <<: *service-base image: oven/bun:1.3.10@sha256:b86c67b531d87b4db11470d9b2bd0c519b1976eee6fcd71634e73abfa6230d2e volumes: - *volume-app working_dir: /app/packages/server env_file: .env environment: <<: *env-base entrypoint: ["bun", "dev:bun"] cli: <<: *service-base image: oven/bun:1.3.10@sha256:b86c67b531d87b4db11470d9b2bd0c519b1976eee6fcd71634e73abfa6230d2e volumes: - *volume-app working_dir: /app env_file: .env environment: <<: *env-base NODE_ENV: development entrypoint: ["/bin/bash"] stop_signal: SIGKILL webapp: <<: *service-base image: node:22.22.1@sha256:b501c082306a4f528bc4038cbf2fbb58095d583d0419a259b2114b5ac53d12e9 ports: - ${PORT:?PORT missing}:80 volumes: - *volume-app working_dir: /app/packages/webapp environment: <<: *env-base entrypoint: ["npm", "run", "dev"] stop_signal: SIGKILL tempo: <<: *service-base image: grafana/tempo:latest@sha256:77f27d104e99036c4f1dcfe1ca254f06372eed1a9b969f1297661c470a9244d2 command: [-config.file=/etc/tempo.yaml] volumes: - ./telemetry/tempo.yaml:/etc/tempo.yaml - ./tempo_data/:/data/ stop_signal: SIGKILL prometheus: image: prom/prometheus:v3.10.0@sha256:4a61322ac1103a0e3aea2a61ef1718422a48fa046441f299d71e660a3bc71ae9 command: - --config.file=/etc/prometheus.yaml - --web.enable-remote-write-receiver - --enable-feature=exemplar-storage volumes: - ./telemetry/prometheus.yaml:/etc/prometheus.yaml grafana: image: grafana/grafana:latest@sha256:7ce8f1687d7aab0f1f16a7f1db64bf655a3de77b03e87bf474fdd883e3203cba volumes: - ./telemetry/grafana-datasources.yaml:/etc/grafana/provisioning/datasources/datasources.yaml environment: GF_AUTH_ANONYMOUS_ENABLED: true GF_AUTH_ANONYMOUS_ORG_ROLE: Admin GF_AUTH_DISABLE_LOGIN_FORM: true GF_FEATURE_TOGGLES_ENABLE: traceqlEditor