Why self-host Jitsi on a VPS
Consumer video conferencing services impose time limits, participant quotas and keep your recordings on their servers. Jitsi Meet, self-hosted, removes these constraints: unlimited rooms, unlimited duration, no account required to join a meeting, and the video stream that stays on your infrastructure. This is particularly relevant for an organization concerned about the confidentiality of its meetings, or to embed video calling in its own site (Jitsi offers an iframe API). Be careful, however: video conferencing is one of the most network-hungry use cases; it is bandwidth rather than CPU that sizes your VPS.
Concrete benefits of a self-hosted Jitsi
- Meetings with no time limit and no cap on the number of rooms, unlike free consumer offerings.
- No account required: a simple link is enough to join a room.
- iframe API to embed video calling directly in your application or your site.
- Transport encryption and full control of any recordings.
- Complete customization of the interface and the meetings' domain name.
- No telemetry sent to a third party: streams stay on your VPS.
Hardware and software prerequisites
Jitsi is limited less by CPU than by bandwidth and network ports. For small meetings (up to 15-20 participants), a VPS with 2 to 4 vCPU and 4 GB of RAM is suitable, but it is outbound bandwidth that matters: plan for a generous, uncapped connection, because each relayed participant multiplies the throughput. UDP port 10000 must be open on the firewall and the public IP — it is through it that the video (JVB) transits. You need Docker and Compose, a meet.yourdomain.com domain name with an A record, and ideally a dedicated, stable public IP.
Deploy Jitsi Meet with Docker and SSL
Fetch docker-jitsi-meet
Clone the official docker-jitsi-meet repository, copy env.example to .env, then run the gen-passwords.sh script that generates all the internal secrets of the components (Prosody, Jicofo, JVB).
Configure the domain and the network
In .env, set PUBLIC_URL=https://meet.yourdomain.com and DOCKER_HOST_ADDRESS with the VPS public IP. This is crucial: without the correct address, the JVB video bridge will not know which IP to announce to participants.
Open UDP port 10000
Allow UDP port 10000 in the VPS firewall (ufw allow 10000/udp) and at your provider's level. It is through this port that the video media flows; if it is closed, participants see each other but with no stream.
Launch the stack
Run docker compose up -d. The web, prosody, jicofo and jvb containers start. Follow docker compose logs -f jvb to confirm that the bridge has registered correctly.
Provision the SSL certificate
Jitsi can generate Let's Encrypt automatically: set ENABLE_LETSENCRYPT=1 and LETSENCRYPT_DOMAIN/LETSENCRYPT_EMAIL in .env. First check that the DNS of meet.yourdomain.com indeed points to the VPS, otherwise issuance will fail.
Secure access to rooms
By default anyone can create a room. Enable authentication (AUTH_TYPE=internal) to require an account on the organizer's side while letting guests join freely. Create host accounts with prosodyctl register.
Jitsi works in SFU mode: the video bridge (JVB) relays each stream, so outbound bandwidth climbs quickly with the number of participants. For large meetings, enable last-active-video mode and client-side simulcast, and monitor the JVB's network load rather than the CPU. Beyond a few dozen simultaneous participants, deploy several JVB instances on separate VPSes behind a single Jicofo: this is how Jitsi scales horizontally.