// DevOps
How to Install Jitsi Meet on Your Server Using Docker
Published on 2026-09-22
Jitsi Meet — an open videoconferencing system that you can deploy on your own server. The easiest way is via Docker: the project publishes ready images and Compose files. Below is the installation following the official guide docker-jitsi-meet. How a self-hosted Jitsi differs from Google Meet and when it makes sense is discussed in the article “Jitsi Meet vs Google Meet”.
Step 1: Preparation
You will need:
- a Linux server, for example Ubuntu;
- a domain name with an A record pointing to the server IP, e.g.
meet.example.com; - Docker and the Docker Compose plugin.
Step 2: Download the release
The guide requires downloading the archive of the latest release, not cloning the repository: the development branch contains test images.
wget $(wget -q -O - https://api.github.com/repos/jitsi/docker-jitsi-meet/releases/latest | grep zip | cut -d\" -f4)
unzip <name-of-downloaded-archive>.zip
cd <directory-from-archive>The archive and directory names depend on the release version, so check them after downloading with ls.
Step 3: Configure .env
Create the file from the example and generate passwords for service accounts:
bashcp env.example .env ./gen-passwords.shSpecify the address where Jitsi will be available. The variable is called
PUBLIC_URL(theJITSI_DOMAINvariable you may see in older instructions is not present inenv.example):dotenvPUBLIC_URL=https://meet.example.comBy default the web interface listens on ports
8000(HTTP) and8443(HTTPS) — this is intended for operation behind a reverse proxy. If Jitsi will terminate HTTPS itself and obtain a Let’s Encrypt certificate, switch the ports to the standard ones and enable the certificate:dotenvHTTP_PORT=80 HTTPS_PORT=443 ENABLE_HTTP_REDIRECT=1 ENABLE_LETSENCRYPT=1 LETSENCRYPT_DOMAIN=meet.example.com LETSENCRYPT_EMAIL=admin@example.comIf nginx is already in front of Jitsi, do not change the ports and do not enable Let’s Encrypt in Jitsi — the reverse-proxy setup is described in the article “Jitsi Meet (Docker) behind Nginx Reverse Proxy”.
If the server is behind NAT, specify its external address for the video bridge, otherwise participants from the internet will not receive video:
dotenvJVB_ADVERTISE_IPS=203.0.113.10Create configuration directories. Since release
stable-11146containers run as an unprivileged user (uid 1000) with a read-only filesystem, the directory structure has changed and thestorageandtmpdirectories must be writable:bashmkdir -p ~/.jitsi-meet-cfg/{web,prosody/config,prosody/prosody-plugins-custom,jicofo,jvb,jigasi,jibri,transcriber} mkdir -p ~/.jitsi-meet-cfg/storage/{jibri,prosody,transcripts,web} mkdir -p ~/.jitsi-meet-cfg/tmp/{web-crontabs,web-load-test} chmod 777 ~/.jitsi-meet-cfg/storage/{jibri,prosody,transcripts,web} chmod 777 ~/.jitsi-meet-cfg/tmp/{web-crontabs,web-load-test}If these directories are not created in advance, the containers that need them will fail to start and will report an error.
Step 4: Start
Basic start
docker compose up -d
docker compose psAdditional components
SIP gateway (Jigasi):
bashdocker compose -f docker-compose.yml -f jigasi.yml up -dRecording and streaming (Jibri):
bashdocker compose -f docker-compose.yml -f jibri.yml up -dCollaborative editing (Etherpad):
bashdocker compose -f docker-compose.yml -f etherpad.yml up -d
Files can be combined, for example -f docker-compose.yml -f jigasi.yml -f jibri.yml. How the full meeting recording pipeline is organized is explained in the article “Full meeting recording pipeline in Jitsi Meet”.
Step 5: Check
Open
https://meet.example.com— the Jitsi Meet interface should load. You must use HTTPS: over HTTP the browser will not grant access to the camera and microphone.Open ports in the firewall:
80/tcpand443/tcp— web interface and certificate issuance;10000/udp— media streams for the video bridge. Without it the page loads, but participants cannot see or hear each other.
Conduct a test meeting with two participants from different networks, for example from a desktop and from a phone over mobile internet.
By default any visitor who opens the address can create a room. How to enable authentication and optimize the server is in the article “Jitsi Meet: Enabling authentication and server optimization”.
Update
Download the new release archive into a separate directory, move your .env into it and compare it with the new env.example: variables are sometimes added or renamed. Then in the new directory:
docker compose pull
docker compose up -dBefore moving through release stable-11146 create the new directory structure from step 3 — older releases used a different structure.
Summary
Jitsi Meet in Docker can be deployed in half an hour: release archive, .env with PUBLIC_URL, configuration directories and three open ports. The main mistakes are not setting PUBLIC_URL, forgetting the UDP port 10000, and not specifying the video bridge external address when the server is behind NAT.
// Reviews
Related reviews
Mikhail is an outstanding professional! You can tell he has a great deal of experience. The work was done precisely and on time. We had to tinker a bit because the project installed on the server wasn't perfect, but Mikhail carefully and thoughtfully guided us on what to do and how. In the end, everything worked! I recommend him to anyone who values quality.
Mikhail is an excellent performer! You can tell he has a wealth of experience. The work was done precisely and on time. We had to tinker due to imperfections in the project that was being installed on the server, but …
// Contact
Need help?
Get in touch with me and I'll help solve the problem
I reply within one business day (03:00-13:00 GMT)
Или оставьте заявку здесь:
// Related