Skip to content

Requirements

This content is for the 1.0 version. Switch to the latest version for up-to-date documentation.

The hosted installer (install.sh) targets Ubuntu Server 24.04 LTS or 26.04 LTS, x86_64 (amd64) only, and validates this before touching the system:

  • uname -m must report x86_64 — anything else aborts immediately.
  • /etc/os-release must report ID=ubuntu and VERSION_ID of 24.04 or 26.04.

A Linux host with a public IP. LiveKit, its ingress, and its egress all run with network_mode: host for UDP media delivery and STUN-based external-IP detection — the LiveKit-recommended setup. This means Docker Desktop on macOS is not a target; you need a real Linux VM or server (OVH, Hetzner, DigitalOcean, etc.).

There’s no hard minimum enforced by the installer, but measured production numbers give a concrete baseline. On an 8 vCPU / 8 GB, no-GPU node:

Component Idle / per-unit cost Notes
Host idle ~936 MB RAM, load ~0.04 out of 8 GB
livekit-server ~77 MB RAM lightweight — the SFU itself is cheap
core (NestJS) ~111 MB RAM
egress idle (Chrome pool, warm) ~819 MB RAM headless Chrome kept warm for recording/HLS
1 room-composite recording ~1.27 GB RAM, ~0.9 CPU core one egress = one headless Chrome session

That leaves roughly 6.5 GB of headroom for egress on an 8 GB box, i.e. ~4-5 concurrent room-composite recordings. WebRTC viewer capacity is bounded by the network card, not CPU — around 300-400 simultaneous WebRTC viewers per node at ~2.5 Mbps each; for larger audiences, StreamHub serves HLS instead (cacheable, CDN-friendly), not more WebRTC fan-out.

A minimal 8 vCPU / 8 GB box is a reasonable starting point for a single-node install; scale up (or add a GPU node to the cluster for NVENC transcoding/egress) as recording and transcoding load grows.

Docker plus the Docker Compose v2 plugin (docker compose version must work). The installer handles this for you on a supported Ubuntu box:

  • Installs Docker via get.docker.com if it’s missing.
  • Installs docker-compose-plugin from Docker’s own apt repo, falling back to Ubuntu’s docker-compose-v2 package if that’s unavailable.

LiveKit recommends at least 16 MB for net.core.rmem_max/wmem_max under WebRTC load — the Linux default (4 MB) drops packets once several publishers/subscribers saturate the socket. The installer checks this and, if net.core.rmem_max is below 16 MB, raises it automatically by writing /etc/sysctl.d/99-streamhub-webrtc.conf.

For a real deployment: a domain with a DNS A record pointing at the server’s public IP.

Skip the domain entirely for a local test install — leave it blank (or pass --domain localhost) and the installer serves a self-signed cert over plain HTTP/WS on 127.0.0.1:3020.

Port Proto Purpose Exposure
80, 443 tcp Reverse proxy: dashboard, API, /rtc signaling, auto-TLS public
1935 tcp RTMP ingest public
7880 tcp LiveKit signaling/API public (proxied at /rtc)
7881 tcp LiveKit WebRTC TCP fallback public
7882 udp LiveKit WebRTC media (single mux port) public
8080 tcp WHIP (WebRTC-HTTP ingest) public
3020 tcp streamhub-core local only — never opened by the installer
6379 tcp redis local only — see Join a cluster for the one deliberate exception

If ufw is active, the installer allows exactly the public set above (adding 80/443 only on an origin node) — it never opens 3020 or 6379 to the outside world.