# Stack local de observabilidade com Langfuse.
# A aplicacao principal continua sendo executada via `make agent`, `make bridge` e `make livekit`.

x-langfuse-env: &langfuse-env
  NEXTAUTH_URL: http://localhost:3005
  DATABASE_URL: postgresql://postgres:postgres@postgres:5432/postgres
  POSTGRES_USER: postgres
  POSTGRES_PASSWORD: postgres
  POSTGRES_DB: postgres
  SALT: devsalt
  ENCRYPTION_KEY: b127cbb367ba27ddf3851750686b88a984acd818c0b8444e9370d11fb75fb7df
  NEXTAUTH_SECRET: devsecret
  TELEMETRY_ENABLED: "false"
  LANGFUSE_ENABLE_EXPERIMENTAL_FEATURES: "true"
  CLICKHOUSE_MIGRATION_URL: clickhouse://clickhouse:9000
  CLICKHOUSE_URL: http://clickhouse:8123
  CLICKHOUSE_USER: clickhouse
  CLICKHOUSE_PASSWORD: clickhouse
  CLICKHOUSE_CLUSTER_ENABLED: "false"
  REDIS_HOST: redis
  REDIS_PORT: 6379
  REDIS_AUTH: devredis
  REDIS_TLS_ENABLED: "false"
  LANGFUSE_USE_AZURE_BLOB: "false"
  LANGFUSE_S3_EVENT_UPLOAD_BUCKET: langfuse
  LANGFUSE_S3_EVENT_UPLOAD_REGION: auto
  LANGFUSE_S3_EVENT_UPLOAD_ACCESS_KEY_ID: minio
  LANGFUSE_S3_EVENT_UPLOAD_SECRET_ACCESS_KEY: miniosecret
  LANGFUSE_S3_EVENT_UPLOAD_ENDPOINT: http://minio:9000
  LANGFUSE_S3_EVENT_UPLOAD_FORCE_PATH_STYLE: "true"
  LANGFUSE_S3_EVENT_UPLOAD_PREFIX: events/
  LANGFUSE_S3_MEDIA_UPLOAD_BUCKET: langfuse
  LANGFUSE_S3_MEDIA_UPLOAD_REGION: auto
  LANGFUSE_S3_MEDIA_UPLOAD_ACCESS_KEY_ID: minio
  LANGFUSE_S3_MEDIA_UPLOAD_SECRET_ACCESS_KEY: miniosecret
  LANGFUSE_S3_MEDIA_UPLOAD_ENDPOINT: http://minio:9000
  LANGFUSE_S3_MEDIA_UPLOAD_FORCE_PATH_STYLE: "true"
  LANGFUSE_S3_MEDIA_UPLOAD_PREFIX: media/
  LANGFUSE_S3_BATCH_EXPORT_ENABLED: "false"
  LANGFUSE_S3_BATCH_EXPORT_BUCKET: langfuse
  LANGFUSE_S3_BATCH_EXPORT_PREFIX: exports/
  LANGFUSE_S3_BATCH_EXPORT_REGION: auto
  LANGFUSE_S3_BATCH_EXPORT_ENDPOINT: http://minio:9000
  LANGFUSE_S3_BATCH_EXPORT_EXTERNAL_ENDPOINT: http://localhost:9090
  LANGFUSE_S3_BATCH_EXPORT_ACCESS_KEY_ID: minio
  LANGFUSE_S3_BATCH_EXPORT_SECRET_ACCESS_KEY: miniosecret
  LANGFUSE_S3_BATCH_EXPORT_FORCE_PATH_STYLE: "true"

x-langfuse-depends-on: &langfuse-depends-on
  postgres:
    condition: service_healthy
  redis:
    condition: service_healthy
  clickhouse:
    condition: service_healthy
  minio:
    condition: service_started

services:
  langfuse-web:
    image: docker.io/langfuse/langfuse:3
    restart: unless-stopped
    depends_on: *langfuse-depends-on
    ports:
      - "3005:3000"
    environment:
      <<: *langfuse-env

  langfuse-worker:
    image: docker.io/langfuse/langfuse-worker:3
    restart: unless-stopped
    depends_on: *langfuse-depends-on
    environment:
      <<: *langfuse-env

  postgres:
    image: docker.io/postgres:17
    restart: unless-stopped
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: postgres
      TZ: UTC
      PGTZ: UTC
    ports:
      - "127.0.0.1:5433:5432"
    volumes:
      - langfuse_postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 3s
      timeout: 3s
      retries: 20

  redis:
    image: docker.io/redis:7
    restart: unless-stopped
    command:
      - --requirepass
      - devredis
      - --maxmemory-policy
      - noeviction
    ports:
      - "127.0.0.1:6379:6379"
    healthcheck:
      test: ["CMD", "redis-cli", "-a", "devredis", "ping"]
      interval: 3s
      timeout: 10s
      retries: 20

  clickhouse:
    image: docker.io/clickhouse/clickhouse-server
    restart: unless-stopped
    user: "101:101"
    environment:
      CLICKHOUSE_DB: default
      CLICKHOUSE_USER: clickhouse
      CLICKHOUSE_PASSWORD: clickhouse
    ports:
      - "127.0.0.1:8124:8123"
      - "127.0.0.1:9002:9000"
    volumes:
      - langfuse_clickhouse_data:/var/lib/clickhouse
      - langfuse_clickhouse_logs:/var/log/clickhouse-server
    healthcheck:
      test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider http://localhost:8123/ping || exit 1"]
      interval: 5s
      timeout: 5s
      retries: 20
      start_period: 5s

  minio:
    image: minio/minio
    restart: unless-stopped
    entrypoint: sh
    command: -c 'mkdir -p /data/langfuse && minio server --address ":9000" --console-address ":9001" /data'
    environment:
      MINIO_ROOT_USER: minio
      MINIO_ROOT_PASSWORD: miniosecret
    ports:
      - "9090:9000"
      - "127.0.0.1:9091:9001"
    volumes:
      - langfuse_minio_data:/data

volumes:
  langfuse_postgres_data:
  langfuse_clickhouse_data:
  langfuse_clickhouse_logs:
  langfuse_minio_data:
