Skip to content

Administer

Run your own TeamHUD server

All of TeamHUD’s backend, as one Docker Compose stack on a machine you control.

  • ~10 min from an empty box to a verified server
  • 1 vCPU, 2 GB carries a 10-person team
  • 1 command ./firstboot.sh installs and checks it
  • $0 per minute or per GB, to anyone

A self-hosted server runs accounts, teams, chat, file storage, and the media server that carries calls.

The desktop app is the same one everyone downloads. Your users point it at your server when they sign in.

Your network, your data

Call audio and video go between your users and your server, nowhere else. Messages, files and accounts live in your database.

No usage bill

No per-minute or per-GB charge to anyone. What a call costs is your hardware and your bandwidth. See Sizing.

One command to install

./firstboot.sh asks a handful of questions, generates every secret, starts the stack, and proves it works.

Integrations stay yours

Slack and Google connect through apps registered in your accounts, not ours.

The desktop app talks HTTPS to the gateway, which routes to the server, auth, storage and the LiveKit media server. Server, auth and storage share Postgres. Call audio and video go straight to LiveKit over UDP. LiveKit feeds the recorder and, optionally, egress.
Every request goes through the gateway on 443. Call media takes its own path, straight to the media server over UDP.
A Linux box 1 vCPU / 2 GB RAM carries a 10-person team. Any VPS or on-prem VM works. Sizing →
Docker with Compose v2, and Node.js Node is used once, to generate secrets.
A DNS name pointing at the box Only to go live. You can evaluate on localhost without one.
Open ports TCP 80 and 443 for the web, UDP 3478 and the media range for calls. Details →
Service What it does
gateway Caddy. Terminates TLS (it gets a Let’s Encrypt certificate by itself) and routes every request
server The TeamHUD API and the /admin dashboard
auth Accounts and sign-in (GoTrue). Issues every login token
db Postgres
storage File and avatar storage
livekit The media server that carries calls, with built-in TURN
recorder Transcribes recorded calls. It joins only calls with an active recording
draft-asr Word-by-word caption drafts. Internal only; never stores audio or logs text
Service What it does
migrate, db-init One-shot setup jobs that run at start and exit
egress, redis Optional. Write recording files
game-server Optional team mini-games. firstboot.sh installs it unless you answer no

The media server was never the hard part of self-hosting. Accounts and storage are, and the bundle handles both.