Requirements
System requirements and resource planning for Voxagent
Voxagent is a composable platform. Each service runs in its own container, so you can scale components independently. Before deploying, size your infrastructure according to expected concurrent sessions — everything else (backbone services) stays roughly constant.
Software dependencies
- Docker 24+ and Docker Compose v2.24+
- 64-bit Linux host (Ubuntu 22.04 LTS or equivalent). macOS works for local dev.
- Outbound internet access (registry, LLM/STT/TTS providers, STUN/TURN)
- Ports accessible from your users' browsers: frontend, backend API, Keycloak, LiveKit WebRTC (TCP 7881, UDP 50000–60000).
Per-service resource baselines
The table below shows combined CPU / RAM / Disk requirements for each service at typical concurrent session loads. Values are empirical baselines from production.
| Service | 1 session | 10 sessions | 50 sessions | 250 sessions | 500 sessions |
|---|---|---|---|---|---|
livekit-serverWebRTC SFU — media plane for every active call | 550 m · 276 MB · 1.0 GB | 1.00 vCPU · 456 MB · 1.0 GB | 3.00 vCPU · 1.2 GB · 1.0 GB | 13.00 vCPU · 5.1 GB · 1.0 GB | 25.50 vCPU · 10.0 GB · 1.0 GB |
python-workerLiveKit voice agent (LLM/STT/TTS orchestration) | 500 m · 520 MB · 1.0 GB | 2.30 vCPU · 1.6 GB · 1.0 GB | 10.30 vCPU · 6.3 GB · 1.0 GB | 50.30 vCPU · 29.7 GB · 1.0 GB | 100.30 vCPU · 59.0 GB · 1.0 GB |
egressLiveKit recording/transcoding (optional) | 350 m · 336 MB · 2.0 GB | 1.70 vCPU · 1.0 GB · 2.5 GB | 7.70 vCPU · 4.2 GB · 4.5 GB | 37.70 vCPU · 19.8 GB · 14.5 GB | 75.20 vCPU · 39.3 GB · 27.0 GB |
websocket-media-bridgeVoximplant/Twilio SIP ↔ LiveKit audio bridge | 230 m · 143 MB · 0.5 GB | 500 m · 278 MB · 0.5 GB | 1.70 vCPU · 878 MB · 0.5 GB | 7.70 vCPU · 3.8 GB · 0.5 GB | 15.20 vCPU · 7.4 GB · 0.5 GB |
asp-net-backendMain API (.NET 9, EF Core, SignalR) | 1.01 vCPU · 1.0 GB · 5.0 GB | 1.10 vCPU · 1.0 GB · 5.0 GB | 1.50 vCPU · 1.2 GB · 5.0 GB | 3.50 vCPU · 2.2 GB · 5.0 GB | 6.00 vCPU · 3.4 GB · 5.0 GB |
postgresMain + Lago + Keycloak + Hangfire DBs | 505 m · 1.0 GB · 20.0 GB | 550 m · 1.0 GB · 20.0 GB | 750 m · 1.1 GB · 20.1 GB | 1.75 vCPU · 1.5 GB · 20.5 GB | 3.00 vCPU · 2.0 GB · 21.0 GB |
redisLiveKit pubsub, backend cache, Sidekiq queues | 205 m · 259 MB · 2.0 GB | 250 m · 286 MB · 2.0 GB | 450 m · 406 MB · 2.0 GB | 1.45 vCPU · 1006 MB · 2.0 GB | 2.70 vCPU · 1.7 GB · 2.0 GB |
kafkaEvent streaming (spans, webhooks, analytics) | 505 m · 1.0 GB · 20.0 GB | 550 m · 1.0 GB · 20.1 GB | 750 m · 1.2 GB · 20.5 GB | 1.75 vCPU · 2.2 GB · 22.5 GB | 3.00 vCPU · 3.4 GB · 25.0 GB |
keycloakOAuth2 / OIDC authentication | 500 m · 768 MB · 2.0 GB | 500 m · 768 MB · 2.0 GB | 500 m · 768 MB · 2.0 GB | 500 m · 768 MB · 2.0 GB | 500 m · 768 MB · 2.0 GB |
minioS3-compatible storage (recordings, invoices) | 200 m · 256 MB · 20.1 GB | 200 m · 256 MB · 20.5 GB | 200 m · 256 MB · 22.5 GB | 200 m · 256 MB · 32.5 GB | 200 m · 256 MB · 45.0 GB |
clickhouseAnalytics warehouse (optional) | 500 m · 2.0 GB · 30.0 GB | 500 m · 2.0 GB · 30.1 GB | 500 m · 2.0 GB · 30.3 GB | 500 m · 2.0 GB · 31.3 GB | 500 m · 2.0 GB · 32.5 GB |
webhook-receiverAccepts inbound webhooks (Lago, LiveKit, Twilio) | 200 m · 256 MB · 1.0 GB | 200 m · 256 MB · 1.0 GB | 200 m · 256 MB · 1.0 GB | 200 m · 256 MB · 1.0 GB | 200 m · 256 MB · 1.0 GB |
angular-client + widgetStatic frontends (nginx) | 100 m · 64 MB · 0.5 GB | 100 m · 64 MB · 0.5 GB | 100 m · 64 MB · 0.5 GB | 100 m · 64 MB · 0.5 GB | 100 m · 64 MB · 0.5 GB |
lago (api + worker + front)Billing stack | 1.00 vCPU · 1.0 GB · 5.0 GB | 1.00 vCPU · 1.0 GB · 5.0 GB | 1.00 vCPU · 1.0 GB · 5.0 GB | 1.00 vCPU · 1.0 GB · 5.0 GB | 1.00 vCPU · 1.0 GB · 5.0 GB |
logging stack (ES, Kibana, Fluent Bit, Benthos)Optional observability (--profile logging) | 1.00 vCPU · 2.0 GB · 30.0 GB | 1.03 vCPU · 2.0 GB · 30.0 GB | 1.15 vCPU · 2.1 GB · 30.1 GB | 1.75 vCPU · 2.5 GB · 30.8 GB | 2.50 vCPU · 3.0 GB · 31.5 GB |
| Total | 7.36 vCPU 10.8 GB 140.1 GB | 11.48 vCPU 13.0 GB 141.2 GB | 29.80 vCPU 22.9 GB 146.0 GB | 121.40 vCPU 72.1 GB 170.0 GB | 235.90 vCPU 133.6 GB 200.0 GB |
How to read this:
- Session-bound services (
livekit-server,python-worker,egress,websocket-media-bridge) scale linearly with the number of active calls. They are what you need to plan for. - Backbone services (Postgres, Kafka, Keycloak, Redis, MinIO, etc.) have a largely fixed footprint — you can host them once and reuse across tenants.
- Disk mostly grows in Postgres (transcripts, invoices), Kafka (event retention) and MinIO (call recordings). Plan storage with retention in mind.
Resource calculator
Use the calculator to estimate the total footprint of the application stack at your expected peak concurrency:
Total is the sum across all application services at 50 concurrent sessions. Resources for LLM / STT / TTS providers are billed separately and not included here.
Notes
- Numbers are for the application layer only. CPU/RAM/disk for LLM, STT and TTS providers (or self-hosted models) are billed separately by those vendors and are not included here. We'll cover model cost planning in a dedicated page.
- Add a safety margin of 20–30% on top of the calculator output for headroom, spikes and OS overhead.
- For high-availability production deployments you should double the backbone figures (Postgres replica, Kafka with replication factor ≥ 2, etc.).
Minimum machine sizing (at a glance)
| Load | Recommended VM |
|---|---|
| Demo / dev (1 session) | 4 vCPU · 8 GB RAM · 50 GB SSD |
| Small (10 sessions) | 6 vCPU · 16 GB RAM · 100 GB SSD |
| Medium (50 sessions) | 12 vCPU · 32 GB RAM · 200 GB SSD |
| Large (250 sessions) | 32 vCPU · 96 GB RAM · 500 GB SSD (multi-node) |
| XL (500 sessions) | 64 vCPU · 192 GB RAM · 1 TB SSD (multi-node) |
For everything above 50 concurrent sessions we recommend splitting
livekit-server + python-worker onto their own hosts, so that media and agent
CPU load doesn't starve the backbone.