LiveKit — local dev
Self-hosted SFU for voice + video. Runs in Docker on host-network mode so WebRTC UDP ports work natively.
Start / Stop
# from repo root
docker compose -f infra/livekit/docker-compose.yml up -d
docker compose -f infra/livekit/docker-compose.yml logs -f livekit
docker compose -f infra/livekit/docker-compose.yml down
Endpoints
| Purpose | URL / Port |
|---|---|
| Signaling WS | ws://localhost:7880 |
| TCP fallback | tcp://localhost:7881 |
| UDP RTC | 50000-50100/udp |
| coturn | 3478/udp+tcp |
Dev keys
Baked into livekit.yaml:
LIVEKIT_API_KEY=devkeyLIVEKIT_API_SECRET=devsecret-at-least-32-bytes-long-pleaseLIVEKIT_URL=ws://localhost:7880
Same values go into apps/desktop/.env (via VITE_LIVEKIT_URL) and into the
edge function's supabase/functions/.env.
Prod (later)
Same image on the Hetzner VPS. Caddy terminates TLS at
wss://livekit.netralax.cloud. coturn exposed on turn.netralax.cloud:5349
(TURNS). Secrets generated via openssl rand -hex 32 and stored in the server
env + Supabase edge secrets.