name: langfuse services: langfuse-worker: image: docker.io/langfuse/langfuse-worker:4 restart: always depends_on: &langfuse-depends-on postgres: condition: service_healthy minio: condition: service_healthy redis: condition: service_healthy clickhouse: condition: service_healthy environment: &langfuse-worker-env NEXTAUTH_URL: ${NEXTAUTH_URL} DATABASE_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB} SALT: ${SALT} ENCRYPTION_KEY: ${ENCRYPTION_KEY} TELEMETRY_ENABLED: "false" LANGFUSE_ENABLE_EXPERIMENTAL_FEATURES: "false" CLICKHOUSE_MIGRATION_URL: clickhouse://${CLICKHOUSE_USER}:${CLICKHOUSE_PASSWORD}@clickhouse:9000 CLICKHOUSE_URL: http://clickhouse:8123 CLICKHOUSE_USER: ${CLICKHOUSE_USER} CLICKHOUSE_PASSWORD: ${CLICKHOUSE_PASSWORD} CLICKHOUSE_CLUSTER_ENABLED: "false" LANGFUSE_USE_AZURE_BLOB: "false" LANGFUSE_USE_OCI_NATIVE_OBJECT_STORAGE: "false" LANGFUSE_S3_EVENT_UPLOAD_BUCKET: langfuse LANGFUSE_S3_EVENT_UPLOAD_REGION: auto LANGFUSE_S3_EVENT_UPLOAD_ACCESS_KEY_ID: ${MINIO_ROOT_USER} LANGFUSE_S3_EVENT_UPLOAD_SECRET_ACCESS_KEY: ${MINIO_ROOT_PASSWORD} 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_ROOT_USER} LANGFUSE_S3_MEDIA_UPLOAD_SECRET_ACCESS_KEY: ${MINIO_ROOT_PASSWORD} 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_ACCESS_KEY_ID: ${MINIO_ROOT_USER} LANGFUSE_S3_BATCH_EXPORT_SECRET_ACCESS_KEY: ${MINIO_ROOT_PASSWORD} LANGFUSE_S3_BATCH_EXPORT_FORCE_PATH_STYLE: "true" REDIS_HOST: redis REDIS_PORT: "6379" REDIS_AUTH: ${REDIS_AUTH} REDIS_TLS_ENABLED: "false" networks: - default langfuse-web: image: docker.io/langfuse/langfuse:4 restart: always depends_on: *langfuse-depends-on environment: <<: *langfuse-worker-env HOSTNAME: "0.0.0.0" NEXTAUTH_SECRET: ${NEXTAUTH_SECRET} labels: - "traefik.enable=true" - "traefik.docker.network=traefik_proxy" - "traefik.http.routers.langfuse.rule=Host(`lf.kzbrd.ru`)" - "traefik.http.routers.langfuse.entrypoints=websecure" - "traefik.http.routers.langfuse.tls=true" - "traefik.http.routers.langfuse.tls.certresolver=myresolver" - "traefik.http.services.langfuse.loadbalancer.server.port=3000" - "com.centurylinklabs.watchtower.enable=true" networks: - traefik_proxy - default clickhouse: image: docker.io/clickhouse/clickhouse-server:25.12 restart: always user: "101:101" environment: CLICKHOUSE_DB: default CLICKHOUSE_USER: ${CLICKHOUSE_USER} CLICKHOUSE_PASSWORD: ${CLICKHOUSE_PASSWORD} volumes: - langfuse_clickhouse_data:/var/lib/clickhouse - langfuse_clickhouse_logs:/var/log/clickhouse-server healthcheck: test: wget --no-verbose --tries=1 --spider http://localhost:8123/ping || exit 1 interval: 5s timeout: 5s retries: 10 start_period: 1s networks: - default minio: image: docker.io/minio/minio restart: always entrypoint: sh command: -c 'mkdir -p /data/langfuse && minio server /data --address ":9000" --console-address ":9001"' environment: MINIO_ROOT_USER: ${MINIO_ROOT_USER} MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD} volumes: - langfuse_minio_data:/data healthcheck: test: ["CMD", "mc", "ready", "local"] interval: 1s timeout: 5s retries: 5 start_period: 1s networks: - default redis: image: docker.io/redis:7 restart: always command: > --requirepass ${REDIS_AUTH} --maxmemory-policy noeviction volumes: - langfuse_redis_data:/data healthcheck: test: ["CMD", "redis-cli", "-a", "${REDIS_AUTH}", "ping"] interval: 3s timeout: 10s retries: 10 networks: - default postgres: image: docker.io/postgres:${POSTGRES_VERSION:-17} restart: always healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"] interval: 3s timeout: 3s retries: 10 environment: POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_DB: ${POSTGRES_DB} TZ: UTC PGTZ: UTC volumes: - langfuse_postgres_data:/var/lib/postgresql/data networks: - default volumes: langfuse_postgres_data: driver: local langfuse_clickhouse_data: driver: local langfuse_clickhouse_logs: driver: local langfuse_minio_data: driver: local langfuse_redis_data: driver: local networks: traefik_proxy: external: true default: driver: bridge