Skip to content
MCP server built inHow that works
Back to the platform overview

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.

What comes up
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 backup

The 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 usersKind of loadWhat was measured
up to 32Heavy analyses over 60M rowsEvery query error-free, nothing rejected
50Heavy scans only, 90 seconds124 completed analyses, nothing rejected, p90 57 s
64Heavy analyses77 completed, median 53 s — beyond this, requests are rejected
32Short queries, sustained3,176 queries in 60 s, median 0.59 s
128 + 8 monstersEverything at once, 120 seconds42 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 totalMemoryConcurrent analystsRows
6 (measured)24 GB≈ 5060M
1248 GB≈ 100≈ 120M
2496 GB≈ 200≈ 240M
48192 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 usersOne machineWith worker
Completed queries per minute1323
Wait for the result (median)132 s71 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.

ComponentSourceNote
Console, agentown templates in the chartthe platform itself
Trinothe Trino project's chartworker count is your decision
Nessiethe Nessie project's chartthe versioned catalog
Keycloakcodecentric/keycloakxruns the official Keycloak image
PostgreSQL, SeaweedFSchart dependenciesswitchable off if you provide your own
Ingress, certificatesnginx ingress, cert-managerone 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.

One platform, one authorization model: every access — human, agent or BI tool — runs through the same identity and the same audit trail.
  • 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