Jitsi Meet is a self-hosted video conferencing platform (nginx + Prosody + Jicofo + JVB). This guide covers a single-node install on Ubuntu 22.04 (the officially best-supported distro for the Jitsi installer).
1. Prerequisites
- A RamNode KVM VPS — minimum 2 vCPU / 4 GB RAM; 4 vCPU / 8 GB+ if you expect many concurrent participants (video is CPU/bandwidth heavy).
- Ubuntu 22.04 LTS, fully updated. (20.04 also works; avoid very new/unsupported releases.)
- A registered domain name — Jitsi Meet essentially requires this for TLS and proper WebRTC operation (e.g.
meet.yourdomain.com). - DNS A record for that domain pointed at your VPS's public IPv4 address, propagated before you start.
- Root or sudo access.
- Ports 80 and 443 free (no other web server running), plus UDP 10000 for media.
sudo apt update && sudo apt upgrade -y
sudo hostnamectl set-hostname meet.yourdomain.comMake sure /etc/hosts resolves your hostname:
echo "127.0.0.1 meet.yourdomain.com" | sudo tee -a /etc/hosts2. Add the Jitsi repository
curl -sL https://download.jitsi.org/jitsi-key.gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/jitsi-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/jitsi-keyring.gpg] https://download.jitsi.org stable/" | sudo tee /etc/apt/sources.list.d/jitsi-stable.list
sudo apt update3. Install Jitsi Meet
sudo apt install -y jitsi-meetDuring install you'll be prompted for:
- Hostname: enter your domain, e.g.
meet.yourdomain.com - TLS certificate: choose "Generate a new self-signed certificate" for now — you'll replace it with Let's Encrypt next.
The installer sets up Prosody (XMPP server), Jicofo (conference focus), JVB (Jitsi Videobridge), and an nginx vhost automatically.
4. Enable Let's Encrypt TLS
Jitsi ships a helper script for this:
sudo /usr/share/jitsi-meet/scripts/install-letsencrypt-cert.shIt will ask for an email (for renewal notices) and handle the cert issuance and nginx config automatically. Certs auto-renew via a cron job it installs.
5. Configure the firewall
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 10000/udp
sudo ufw allow 22/tcp # don't lock yourself out of SSH
sudo ufw enable
sudo ufw statusMirror these rules in RamNode's cloud firewall/security group if you use one. UDP 10000 is critical — this is the JVB media port and conferencing will fail or fall back badly without it open.
6. Verify services are running
sudo systemctl status prosody jicofo jitsi-videobridge2 nginxAll four should show active (running).
7. Test it
Browse to https://meet.yourdomain.com, start a meeting, and join from a second device/browser to confirm audio/video/screen-share work.
8. Harden and configure
Require authentication to create rooms (recommended for public VPS)
Edit /etc/prosody/conf.avail/meet.yourdomain.com.cfg.lua — change the main VirtualHost's authentication for the "guest" domain setup, or run the built-in helper:
sudo /usr/share/jitsi-meet/scripts/install-user-auth.shThis switches to a mode where only authenticated users can start meetings (guests can still join with a link). Add users with:
sudo prosodyctl register <username> meet.yourdomain.com <password>Restart services after config changes:
sudo systemctl restart prosody jicofo jitsi-videobridge2 nginxLimit JVB media port range (optional, useful behind strict firewalls)
Edit /etc/jitsi/videobridge/sip-communicator.properties and set:
org.ice4j.ice.harvest.NAT_HARVESTER_LOCAL_ADDRESS=<private-ip-if-any>
org.ice4j.ice.harvest.NAT_HARVESTER_PUBLIC_ADDRESS=<your-public-ip>This helps if your VPS uses NAT'd networking (rare on RamNode's standard KVM offerings, but relevant for some private-networking setups).
Sizing guidance
- Each active video participant roughly consumes 2–4 Mbps up/down through the bridge, plus CPU for encoding decisions (JVB does not transcode by default, so CPU load stays relatively low — network bandwidth is usually the first bottleneck).
- For >20–30 concurrent participants regularly, plan to scale JVB horizontally (separate videobridge nodes) — beyond the scope of a single-node guide.
9. Common troubleshooting
| Symptom | Likely cause / fix |
|---|---|
| Blank page / SSL error | Cert didn't issue — check sudo certbot certificates and DNS propagation |
| Can join but no audio/video | UDP 10000 blocked — check ufw and cloud firewall |
| "Connection failed" on join | Prosody/Jicofo down — check systemctl status prosody jicofo and sudo journalctl -u jicofo -f |
| High latency / choppy video | Insufficient bandwidth or CPU on VPS — check htop and network throughput during a call |
10. Useful log locations
sudo tail -f /var/log/jitsi/jicofo.log
sudo tail -f /var/log/jitsi/jvb.log
sudo tail -f /var/log/prosody/prosody.log11. Next steps
- Set up recording/live-streaming via Jibri (separate, resource-heavy component — best on its own VPS).
- Customize branding via
/usr/share/jitsi-meet/interface_config.js. - Set up regular backups of
/etc/prosody,/etc/jitsi, and TLS certs.
