You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -112,7 +112,7 @@ Full instructions for standalone, split web/worker images, and tag policy: [depl
112
112
113
113
## Architecture
114
114
115
-
Postgres holds application and config data (users, projects, prompts, dataset definitions, API keys), unchanged from upstream Langfuse. GreptimeDB is the analytics event store: an append-only `raw_events` table as the source of truth, plus merged projection tables and indexed EAV side-tables that back metadata, tag, and tool filtering. Redis runs the BullMQ queues. Object storage (S3/MinIO) is optional for the default stack: media uploads, the OTel carrier, and the eval blob storedefault to local filesystem paths. Opt-in batch/blob exports still need an S3-compatible bucket.
115
+
Postgres holds application and config data (users, projects, prompts, dataset definitions, API keys), unchanged from upstream Langfuse. GreptimeDB is the analytics event store: an append-only `raw_events` table as the source of truth, plus merged projection tables and indexed EAV side-tables that back metadata, tag, and tool filtering. Redis runs the BullMQ queues. Object storage (S3/MinIO) is optional for the default stack: media uploads, the OTel carrier, the eval blob store, and batch exports all default to local filesystem paths, so a stock deployment needs no bucket at all.
116
116
117
117
Full write-up: [architecture](docs/architecture.md).
Copy file name to clipboardExpand all lines: docs/architecture.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -49,7 +49,7 @@ BullMQ job queues for ingestion, evals, exports, and reconciliation. Unchanged f
49
49
50
50
### Object storage (optional)
51
51
52
-
With the event store in GreptimeDB, S3 or MinIO is no longer required to ingest. Media uploads, the OTel ingestion carrier, and the eval blob storesupport a local-filesystem backend, and the bundled Compose files default them to it. Opt-in batch/blob _exports_ still need an S3-compatible bucket.
52
+
With the event store in GreptimeDB, S3 or MinIO is no longer required. Media uploads, the OTel ingestion carrier, the eval blob store, and batch exports all support a local-filesystem backend, and the bundled Compose files default them to it. Batch exports on the local backend stream from a shared volume via a signed, time-limited download URL instead of an S3 presigned URL, so a stock deployment needs no object storage at all.
Copy file name to clipboardExpand all lines: docs/deployment.md
+16-14Lines changed: 16 additions & 14 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -51,31 +51,33 @@ The fork ships a small server config at `docker/greptimedb/config.toml`, mounted
51
51
52
52
### Object storage is optional
53
53
54
-
Ingestion and eval-generated scores persist to GreptimeDB `raw_events`, not to a blob store. The remaining object-storage consumers support a local-file backend, so a stock deployment needs **no** MinIO/S3:
54
+
Ingestion and eval-generated scores persist to GreptimeDB `raw_events`, not to a blob store. Every remaining object-storage consumer supports a local-file backend, so a stock deployment needs **no** MinIO/S3:
The application default for these variables is `s3`, but this repo's `docker-compose.yml` overrides both to `local` (`${...:-local}`), so the bundled stack starts with no object store. `LANGFUSE_EVENT_STORAGE_BACKEND` covers both the OTel carrier and the eval blob store; with `local`they share a filesystem volume, so web and worker must mount the same `LANGFUSE_EVENT_LOCAL_PATH` (the Compose files wire a shared `langfuse_event_data` volume). Only opt-in batch/blob **exports** still require an S3-compatible bucket. The Compose files default both backends to `local` and put MinIO behind a `s3` profile (`docker compose --profile s3 up`), so the default stack starts no object store.
62
+
The application default for these variables is `s3`, but this repo's `docker-compose.yml` overrides them to `local` (`${...:-local}`), so the bundled stack starts with no object store. Each `local` backend shares a filesystem volume between web and worker (the Compose files wire `langfuse_event_data` and `langfuse_batch_export_data`); `LANGFUSE_EVENT_STORAGE_BACKEND` covers both the OTel carrier and the eval blob store. Batch exports on the `local`backend are served by an authenticated web download route (signed, time-limited token, re-validated against the export row) instead of an S3 presigned URL, so the link in the export email and the exports page works without a bucket. The Compose files put MinIO behind a `s3` profile (`docker compose --profile s3 up`), so the default stack starts no object store.
62
63
63
64
### Data directories and persistent volumes
64
65
65
66
The Compose files use Docker named volumes for every stateful path. Treat these as the deployment's data directory set:
|`langfuse_redis_data`|`/data`| Redis queue state |
73
+
|`langfuse_media_data`|`/langfuse_media_data`| Local media uploads when `LANGFUSE_MEDIA_STORAGE_BACKEND=local`|
73
74
|`langfuse_event_data`|`/langfuse_event_data`| Local OTel carrier and eval blobs when `LANGFUSE_EVENT_STORAGE_BACKEND=local`|
74
-
|`langfuse_minio_data`|`/data` in `minio`| Optional MinIO bucket data when the `s3` profile is enabled |
75
+
|`langfuse_batch_export_data`|`/langfuse_batch_export_data`| Local batch-export files when `LANGFUSE_BATCH_EXPORT_STORAGE_BACKEND=local`|
76
+
|`langfuse_minio_data`|`/data` in `minio`| Optional MinIO bucket data when the `s3` profile is enabled |
75
77
76
78
Runtime logs are not written to a separate application log directory by default. Web, worker, the standalone supervisor, Postgres, Redis, and GreptimeDB all write to container stdout/stderr; collect them through `docker compose logs` or your Docker logging driver. If you enable GreptimeDB file logging or replace Docker named volumes with bind mounts, keep the log directory outside the container's writable layer and include it in the same backup/retention plan as `langfuse_greptimedb_data`.
77
79
78
-
Do not run `docker compose down -v` on a real deployment unless you intentionally want to delete the service data. `docker compose down` removes containers and networks but keeps the named volumes; `down -v` removes them. If you replace the named volumes with bind mounts, keep the same container paths above and make sure the app containers can write to the media/event paths. In the split topology, both `langfuse-web` and `langfuse-worker` must mount the same `langfuse_media_data`and `langfuse_event_data` storage.
80
+
Do not run `docker compose down -v` on a real deployment unless you intentionally want to delete the service data. `docker compose down` removes containers and networks but keeps the named volumes; `down -v` removes them. If you replace the named volumes with bind mounts, keep the same container paths above and make sure the app containers can write to the media/event paths. In the split topology, both `langfuse-web` and `langfuse-worker` must mount the same `langfuse_media_data`, `langfuse_event_data`, and `langfuse_batch_export_data` storage.
Copy file name to clipboardExpand all lines: docs/known-limitations.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -18,7 +18,7 @@ The web and standalone entrypoints apply the GreptimeDB schema on startup (gated
18
18
19
19
### Object storage is optional, not gone
20
20
21
-
Ingestion needs no object store — traces, observations, and scores persist to GreptimeDB `raw_events`. Media uploads, the OTel carrier, and the eval blob storedefault to local filesystem volumes in the bundled Compose files. But opt-in batch/blob **exports** still require an S3-compatible bucket. See [deployment](deployment.md).
21
+
Ingestion needs no object store — traces, observations, and scores persist to GreptimeDB `raw_events`. Media uploads, the OTel carrier, the eval blob store, and batch exports all default to local filesystem volumes in the bundled Compose files, so a stock deployment runs with no S3/MinIO at all. Object storage stays fully supported (set the `*_STORAGE_BACKEND` variables to `s3`) for multi-node deployments, where a shared object store is the simpler way to share blobs across replicas. See [deployment](deployment.md).
0 commit comments