Jitsi Meet is an open-source video conferencing platform: browser-based meetings without accounts, screen sharing, chat, recordings (with Jibri) and mobile apps. Self-hosting gives you private meetings on your own infrastructure, with no time limits and no per-user licensing.
How Jitsi works
- Jitsi Meet: the web app.
- Prosody: the XMPP server for signalling and authentication.
- Jicofo: the conference focus, which manages participants.
- Jitsi Videobridge (JVB): an SFU (selective forwarding unit) that forwards each participant’s video streams to the others. It doesn’t mix them, so CPU stays moderate, while bandwidth is the main cost.
Sizing
| Usage | VPS |
|---|---|
| Small meetings (≤ 10 people), occasional use | 4 vCPU, 8 GB RAM |
| Several concurrent meetings / 20–50 people | 8 vCPU, 16 GB RAM, plus good bandwidth |
| Larger | Multiple videobridges (scaling out) |
Bandwidth: each participant sends about 1–2.5 Mbit/s up, and receives several streams. The server forwards streams to everyone, so outbound traffic grows quickly. A 10-person meeting can use tens of Mbit/s on the server. Check your plan’s port speed and monthly transfer, and choose a location close to participants. See latency vs bandwidth and choosing a VPS location.
1. Prerequisites
- Ubuntu LTS (Debian also works), on a fresh server.
- A domain:
meet.example.com→ the server IP. - Hostname set:
sudo hostnamectl set-hostname meet.example.com, and/etc/hostscontains the public IP or127.0.0.1mapped tomeet.example.com.
2. Firewall
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 10000/udp # media (JVB)
sudo ufw allow 3478/udp # STUN/TURN (if using coturn on the same server)
sudo ufw allow 5349/tcp # TURN over TLS (fallback)
UDP 10000 is essential. Without it, media falls back or fails. See UFW.
3. Install from 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
# Prosody repository (needed on some releases) – follow Jitsi's quick install guide
sudo apt update
sudo apt install jitsi-meet
During installation, enter the hostname (meet.example.com), and choose Let’s Encrypt for the certificate (it asks for an email). The installer configures Nginx, Prosody, Jicofo and JVB. See adding repositories.
Open https://meet.example.com, and start a meeting.
4. Require login to create rooms (recommended)
By default, anyone can create meetings on your server. Restrict room creation to authenticated users, while guests can still join with a link:
- In
/etc/prosody/conf.avail/meet.example.com.cfg.lua, setauthentication = "internal_hashed"on the main VirtualHost, and add a guest VirtualHost:
VirtualHost "guest.meet.example.com"
authentication = "anonymous"
c2s_require_encryption = false
- In
/etc/jitsi/meet/meet.example.com-config.js, setanonymousdomain: 'guest.meet.example.com'. - In
/etc/jitsi/jicofo/jicofo.conf, enable authentication (typeXMPP,login-urlset tomeet.example.com). - Create users:
sudo prosodyctl register alice meet.example.com 'strong-password'
sudo systemctl restart prosody jicofo jitsi-videobridge2
Recent Jitsi versions document this as “secure domain”. Follow the guide for your release, since config formats change. JWT or LDAP authentication are options for integration.
5. NAT and public IP
If the server is behind NAT (not typical for a VPS, which has the public IP on its interface), set the public and private addresses in /etc/jitsi/videobridge/sip-communicator.properties or jvb.conf. On a VPS with a public IP, the defaults usually work. See NAT explained.
TURN for difficult networks
Participants behind strict corporate firewalls may not reach UDP 10000. A TURN server (coturn) on TCP/TLS 443 or 5349 relays their media. The Jitsi installer can set up coturn, or you can run it separately. See coturn TURN server.
Branding, settings and recording
- Customise
interface_config.jsandconfig.js: default language, lobby, start muted, resolution limits (lower resolutions save bandwidth). - Recording and streaming need Jibri, a separate, resource-hungry component (a headless Chrome per recording). Run it on its own server.
Maintenance
- Keep packages updated (
apt upgrade). Jitsi components are released together. See patch management. - Monitor bandwidth and CPU during busy meetings. See vnStat.
- Certificates renew automatically with the Let’s Encrypt setup.
Quick reference
| Item | Value |
|---|---|
| Web | 443/tcp (Nginx) |
| Media | 10000/udp |
| TURN | 3478/udp, 5349/tcp (or 443) |
| Add user | prosodyctl register USER DOMAIN PASS |
| Restart all | systemctl restart prosody jicofo jitsi-videobridge2 |
| Configs | /etc/jitsi/, /etc/prosody/conf.avail/ |
Related: Matrix Synapse and Mattermost.