diff --git a/public/svgs/langfuse.png b/public/svgs/langfuse.png deleted file mode 100644 index 8dec0fe4a..000000000 Binary files a/public/svgs/langfuse.png and /dev/null differ diff --git a/public/svgs/langfuse.svg b/public/svgs/langfuse.svg new file mode 100644 index 000000000..b04e07490 --- /dev/null +++ b/public/svgs/langfuse.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/templates/compose/langfuse.yaml b/templates/compose/langfuse.yaml index 125a85351..5797dd4a1 100644 --- a/templates/compose/langfuse.yaml +++ b/templates/compose/langfuse.yaml @@ -1,30 +1,83 @@ # documentation: https://langfuse.com/docs # slogan: Langfuse is an open-source LLM engineering platform that helps teams collaboratively debug, analyze, and iterate on their LLM applications. # tags: ai, qdrant, weaviate, langchain, openai, gpt, llm, lmops, langfuse, llmops, tracing, observation, metrics -# logo: svgs/langfuse.png +# logo: svgs/langfuse.svg # port: 3000 +x-app-env: &app-env + - NEXTAUTH_URL=${SERVICE_FQDN_LANGFUSE} + - DATABASE_URL=postgresql://${SERVICE_USER_POSTGRES}:${SERVICE_PASSWORD_POSTGRES}@postgres:5432/${POSTGRES_DB:-langfuse} + - SALT=${SERVICE_PASSWORD_SALT} + - ENCRYPTION_KEY=${SERVICE_PASSWORD_64_LANGFUSE} + - TELEMETRY_ENABLED=${TELEMETRY_ENABLED:-true} + - LANGFUSE_ENABLE_EXPERIMENTAL_FEATURES=${LANGFUSE_ENABLE_EXPERIMENTAL_FEATURES:-false} + - CLICKHOUSE_MIGRATION_URL=clickhouse://clickhouse:9000 + - CLICKHOUSE_URL=http://clickhouse:8123 + - CLICKHOUSE_USER=clickhouse + - CLICKHOUSE_PASSWORD=$SERVICE_PASSWORD_CLICKHOUSE + - CLICKHOUSE_CLUSTER_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=$SERVICE_PASSWORD_MINIO + - 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=$SERVICE_PASSWORD_MINIO + - LANGFUSE_S3_MEDIA_UPLOAD_ENDPOINT=http://localhost:9090 + - 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=$SERVICE_PASSWORD_MINIO + - LANGFUSE_S3_BATCH_EXPORT_FORCE_PATH_STYLE=true + - LANGFUSE_INGESTION_QUEUE_DELAY_MS=1 + - LANGFUSE_INGESTION_CLICKHOUSE_WRITE_INTERVAL_MS=1000 + - REDIS_HOST=redis + - REDIS_PORT=6379 + - REDIS_AUTH=$SERVICE_PASSWORD_REDIS + - REDIS_TLS_ENABLED=false + - REDIS_TLS_CA=/certs/ca.crt + - REDIS_TLS_CERT=/certs/redis.crt + - REDIS_TLS_KEY=/certs/redis.key + - EMAIL_FROM_ADDRESS= + - SMTP_CONNECTION_URL= + - NEXTAUTH_SECRET=${SERVICE_BASE64_NEXTAUTHSECRET} # + - AUTH_DISABLE_SIGNUP=${AUTH_DISABLE_SIGNUP:-true} + - HOSTNAME=${HOSTNAME:-0.0.0.0} + - LANGFUSE_INIT_ORG_ID=${LANGFUSE_INIT_ORG_ID:-my-org} + - LANGFUSE_INIT_ORG_NAME=${LANGFUSE_INIT_ORG_NAME:-My Org} + - LANGFUSE_INIT_PROJECT_ID=${LANGFUSE_INIT_PROJECT_ID:-my-project} + - LANGFUSE_INIT_PROJECT_NAME=${LANGFUSE_INIT_PROJECT_NAME:-My Project} + - LANGFUSE_INIT_USER_EMAIL=${LANGFUSE_INIT_USER_EMAIL:-admin@example.com} + - LANGFUSE_INIT_USER_NAME=${LANGFUSE_INIT_USER_NAME:-Admin} + - LANGFUSE_INIT_USER_PASSWORD=${SERVICE_PASSWORD_LANGFUSE} + services: langfuse: - image: langfuse/langfuse:2 + image: docker.io/langfuse/langfuse:3 + restart: always + depends_on: &langfuse-depends-on + postgres: + condition: service_healthy + minio: + condition: service_healthy + redis: + condition: service_healthy + clickhouse: + condition: service_healthy environment: - - SERVICE_FQDN_LANGFUSE_3000 - - DATABASE_URL=postgresql://${SERVICE_USER_POSTGRES}:${SERVICE_PASSWORD_POSTGRES}@postgres:5432/${POSTGRES_DB:-langfuse} - - DIRECT_URL=postgresql://${SERVICE_USER_POSTGRES}:${SERVICE_PASSWORD_POSTGRES}@postgres:5432/${POSTGRES_DB:-langfuse} - - SALT=$SERVICE_PASSWORD_SALT - - AUTH_DISABLE_SIGNUP=${AUTH_DISABLE_SIGNUP:-false} - - NEXTAUTH_URL=$SERVICE_FQDN_LANGFUSE_3000 - - NEXTAUTH_SECRET=${SERVICE_BASE64_64_NEXTAUTHSECRET} - - TELEMETRY_ENABLED=${TELEMETRY_ENABLED:-false} - - LANGFUSE_ENABLE_EXPERIMENTAL_FEATURES=${LANGFUSE_ENABLE_EXPERIMENTAL_FEATURES:-false} - - HOSTNAME=${HOSTNAME:-0.0.0.0} - - LANGFUSE_INIT_USER_NAME=${LANGFUSE_INIT_USER_NAME:-Admin} - - LANGFUSE_INIT_USER_EMAIL=${LANGFUSE_INIT_USER_EMAIL:-admin@example.com} - - LANGFUSE_INIT_USER_PASSWORD=${SERVICE_PASSWORD_LANGFUSE} - - LANGFUSE_INIT_ORG_ID=${LANGFUSE_INIT_ORG_ID:-my-org} - - LANGFUSE_INIT_ORG_NAME=${LANGFUSE_INIT_ORG_NAME:-My Org} - - LANGFUSE_INIT_PROJECT_ID=${LANGFUSE_INIT_PROJECT_ID:-my-project} - - LANGFUSE_INIT_PROJECT_NAME=${LANGFUSE_INIT_PROJECT_NAME:-My Project} + <<: *app-env + SERVICE_FQDN_LANGFUSE_3000: ${SERVICE_FQDN_LANGFUSE_3000} healthcheck: test: - CMD @@ -35,17 +88,21 @@ services: interval: 5s timeout: 5s retries: 3 - depends_on: - postgres: - condition: service_healthy + langfuse-worker: + image: langfuse/langfuse-worker:3 + restart: always + environment: + <<: *app-env + depends_on: *langfuse-depends-on postgres: - image: "postgres:16-alpine" + image: postgres:17-alpine + restart: always environment: - POSTGRES_DB=${POSTGRES_DB:-langfuse} - POSTGRES_PASSWORD=$SERVICE_PASSWORD_POSTGRES - POSTGRES_USER=$SERVICE_USER_POSTGRES volumes: - - "pg-data:/var/lib/postgresql/data" + - langfuse_postgres_data:/var/lib/postgresql/data healthcheck: test: - CMD-SHELL @@ -53,3 +110,49 @@ services: interval: 5s timeout: 5s retries: 10 + redis: + image: redis:8 + restart: always + command: ["sh", "-c", "redis-server --requirepass \"$SERVICE_PASSWORD_REDIS\""] + volumes: + - langfuse_redis_data:/data + healthcheck: + test: ["CMD", "redis-cli", "-a", "$SERVICE_PASSWORD_REDIS", "PING"] + interval: 3s + timeout: 10s + retries: 10 + minio: + image: minio/minio:latest + restart: always + entrypoint: sh + # create the 'langfuse' bucket before starting the service + command: -c 'mkdir -p /data/langfuse && minio server --address ":9000" --console-address ":9001" /data' + environment: + - MINIO_ROOT_USER=minio + - MINIO_ROOT_PASSWORD=$SERVICE_PASSWORD_MINIO + - MINIO_BROWSER=off + volumes: + - langfuse_minio_data:/data + healthcheck: + test: ["CMD", "mc", "ready", "local"] + interval: 1s + timeout: 5s + retries: 5 + start_period: 1s + clickhouse: + image: clickhouse/clickhouse-server:latest + restart: always + user: "101:101" + environment: + - CLICKHOUSE_DB=default + - CLICKHOUSE_USER=clickhouse + - CLICKHOUSE_PASSWORD=$SERVICE_PASSWORD_CLICKHOUSE + 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