Operations & deployment
Compose for the reference deployment, Ansible for installation
Run lavalake in your data center, on rented servers or in a private cloud. You do not need your own data center or admin team: an IT service provider you appoint can handle installation, updates and backups. This page explains what the platform includes and which operational tasks need to be covered.
- Reference deployment
- Docker Compose, one machine
- Installation
- Ansible for Debian/Ubuntu
- Door outward
- one reverse proxy, three routes
- Storage
- S3-compatible, your own
- Measured
- 6 vCPU carry ~50 concurrent analysts
- Second machine
- +77 % throughput at 20 users
Observability vs. monitoring in data operations
Monitoring tracks known conditions such as service availability or a threshold being exceeded. Observability supports investigating why a system behaves a certain way. lavalake provides system health, alerts and logs in the console; the metrics endpoint can be integrated into your own monitoring.
Choose a cloud type and operating environment
Public cloud, private cloud and your own data center describe different operating environments. For lavalake, choose the infrastructure and decide who handles installation, backups and updates. Review network access, storage, the identity provider and recovery. Rented servers can be part of the plan alongside existing hardware.
One machine first
A script in the Compose folder generates the secrets on first run, builds console and agent, brings the stack up and configures the Keycloak realm. After that the platform answers on one address. No Kubernetes needed to find out whether the thing is any good.
gateway nginx, the only door outward
console the interface
agent backend, permissions and tools
keycloak sign-in, roles
trino the query engine
nessie versioned Iceberg catalog
minio S3-compatible storage
postgres platform state and vector index
ollama local embedding model (CPU)
backup daily database and configuration backupThe local embedding model runs alongside and is unloaded when idle so it holds no memory. Semantic search therefore needs no cloud key. The AI assistant does need a backend of your choosing — no model key ships with the platform.
Exactly one door outward
Everything runs behind a reverse proxy, and it knows three routes: the console, the agent interface and Keycloak. Trino, the object store and the platform database are not reachable from outside — not disabled by configuration, simply never published.
What is unreachable needs no hardening. The shortest hardening is a missing route.
That has a consequence worth knowing: BI tools cannot attach to Trino directly. The route there goes through a dedicated read-only feed of the platform, not an open database port.
Customer installation through Ansible
The reference deployment runs as a Compose stack on one machine. The included Ansible playbook prepares a Debian/Ubuntu VM, installs Docker, fetches a pinned release, builds images sequentially and starts the platform. The same workflow handles updates. Existing keys are preserved. A full first run on a fresh VM is still an outstanding acceptance check.
Back up, maintain and attribute usage
A separate service in the Compose stack backs up all PostgreSQL databases daily, including Keycloak and Nessie, together with the configuration and encryption key. Default retention is 14 days; the latest backup is preserved. Monitoring shows age and size and reports missing or overdue backups.
Back up databases and lakehouse separately
Iceberg files and the WORM archive in object storage are not included in this backup. The backup volume initially lives on the same machine too. Recovery from machine failure requires external backup copies and a matching object storage backup; the recovery procedure is documented.
Schedules run reports, threshold alerts and Iceberg maintenance. Monitoring attributes compute time, data read and AI usage to users. Daily quotas limit queries and tokens; AI costs are calculated from configured prices. List prices can be synchronized on demand without overwriting contract prices.
S, M and L workload classes control concurrency and soft memory limits by user role in the Compose stack. Additional workers expand the shared cluster; dedicated warehouse clusters use the Kubernetes deployment path.
What one machine carries
The obvious question before any installation is how large the machine has to be. Since 6 September 2026 there is a measurement rather than an estimate: a reference installation was driven under rising load for a day, until it started rejecting. Every figure below comes from that run.
The machine that was measured
A single virtual machine with 6 vCPU and 24 GB of memory, no swap. It ran the complete platform: query engine, authentication, object storage, database, agent and console. The data was a fact table of 60 million rows. The engine container received 16 of the 24 GB — the rest belongs to the other services and the operating system.
| Concurrent users | Kind of load | What was measured |
|---|---|---|
| up to 32 | Heavy analyses over 60M rows | Every query error-free, nothing rejected |
| 50 | Heavy scans only, 90 seconds | 124 completed analyses, nothing rejected, p90 57 s |
| 64 | Heavy analyses | 77 completed, median 53 s — beyond this, requests are rejected |
| 32 | Short queries, sustained | 3,176 queries in 60 s, median 0.59 s |
| 128 + 8 monsters | Everything at once, 120 seconds | 42 analyses completed, the rest rejected in a controlled way |
Across every run that day there was no crash. Thirty seconds after the harshest load, the same installation answered an ordinary query in 76 milliseconds, with no intervention. The bulk import of those 60 million rows completed in 73 seconds — more than 800,000 rows per second.
For sizing this means: a machine of this class carries around 50 concurrent analysts on 60 million rows. If you need more, first get the most out of the one machine – more memory for the engine, a server with more cores – and then add further machines with their own cores.
A second node on the same machine gained nothing: it shares the same six cores. More memory for the one engine gained a great deal — going from 8 to 16 GB raised completed analyses under peak load by 70 per cent. Beyond that it takes more cores: in a larger server or on a second machine.
| Cores in total | Memory | Concurrent analysts | Rows |
|---|---|---|---|
| 6 (measured) | 24 GB | ≈ 50 | 60M |
| 12 | 48 GB | ≈ 100 | ≈ 120M |
| 24 | 96 GB | ≈ 200 | ≈ 240M |
| 48 | 192 GB | ≈ 400 | ≈ 480M |
Only the first row is measured; the others are extrapolated, scaling cores and memory together. Useful for initial planning, not a substitute for measuring on your own hardware.
With a second machine
On 26 September 2026 we added a worker on a second server of the same size and measured with TPC-H, the standard benchmark for analytics: 60 million line items, eight standard queries, deliberately without a cache. The worker brings its own cores and memory and fetches the data over an encrypted network.
| 20 concurrent users | One machine | With worker |
|---|---|---|
| Completed queries per minute | 13 | 23 |
| Wait for the result (median) | 132 s | 71 s |
Under peak load the second machine delivers 77 per cent more throughput and halves the waiting time. It pays off as soon as several large analyses run at once – at month-end close, for example.
The console shows every compute node with its load and running tasks, and reports when one drops out. The full measurements and the order in which to scale are in the sizing documentation.
The Kubernetes path
For Kubernetes there is a chart that rolls out the platform with its dependencies: three separate PostgreSQL instances for Nessie, Keycloak and platform state, SeaweedFS for storage, Keycloak, Nessie, Trino, an nginx ingress as the single public door, and optionally cert-manager for certificates.
| Component | Source | Note |
|---|---|---|
| Console, agent | own templates in the chart | the platform itself |
| Trino | the Trino project's chart | worker count is your decision |
| Nessie | the Nessie project's chart | the versioned catalog |
| Keycloak | codecentric/keycloakx | runs the official Keycloak image |
| PostgreSQL, SeaweedFS | chart dependencies | switchable off if you provide your own |
| Ingress, certificates | nginx ingress, cert-manager | one public address, path routing |
That Keycloak comes from codecentric's chart rather than Bitnami's is not taste: the Bitnami images moved behind a paywall and no longer keep pullable versioned tags. Decisions like that sit in the chart as comments — whoever operates the stack has to know where the images come from.
Object storage and PostgreSQL are dependencies with a switch. If your data center already runs S3-compatible storage and a managed database, point at those instead of operating two more.
Helm and Compose differ
The Helm path does not automatically include the operational features of Compose. Policy distribution is also available for Helm; setup and acceptance depend on the deployment mode. Check enforcement status in the console. The backup service and workload classes described here apply to Compose.
Operational building blocks to fit your needs
The security core is in place: delegated identity, policies in the engine, a WORM audit chain, an egress guard, encrypted secrets, parsing in a resource-limited worker. Additional operational layers can be enabled as needed. The Kubernetes HA profile still awaits cluster and failure acceptance.
- HA profile for Kubernetes; cluster and failure acceptance outstanding
- Health, alerts and logs in the console
- Secret files for Compose; Vault/External Secrets for Kubernetes
- Optional internal TLS layer for documented service connections
- Offline Compose deployment with local models
- Point-in-time recovery, with backups to a second location
The operations documentation describes setup, prerequisites and verification for each layer. Compose and Kubernetes differ in coverage.
Where this sits in the platform
The same picture as on the home page: one platform, one authorization model, one store.
- Access: Console (SPA) · SQL worksheet · dashboards · AI assistant · MCP server — all behind one reverse proxy
- Identity & governance: Keycloak OIDC · token exchange per RFC 8693 · row-access and masking policies · WORM audit · lineage
- Compute: Trino under your identity · S, M and L workload classes in the Compose stack
- Catalog & table format: Apache Iceberg with Nessie: ACID · time travel · branching · schema evolution · open to Spark, Flink, Trino
- Storage & index: S3-compatible (MinIO, Ceph, NetApp StorageGRID, Dell ECS) · PostgreSQL with pgvector as the vector index
See it instead of reading about it
In half an hour we walk through the platform against your questions — ingestion, permissions, search, agent. No slides.
Book a live demo