// 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.

bash
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

  1. Create the file from the example and generate passwords for service accounts:

    bash
    cp env.example .env
    ./gen-passwords.sh
  2. Specify the address where Jitsi will be available. The variable is called PUBLIC_URL (the JITSI_DOMAIN variable you may see in older instructions is not present in env.example):

    dotenv
    PUBLIC_URL=https://meet.example.com
  3. By default the web interface listens on ports 8000 (HTTP) and 8443 (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:

    dotenv
    HTTP_PORT=80
    HTTPS_PORT=443
    ENABLE_HTTP_REDIRECT=1
    ENABLE_LETSENCRYPT=1
    LETSENCRYPT_DOMAIN=meet.example.com
    LETSENCRYPT_EMAIL=admin@example.com

    If 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”.

  4. If the server is behind NAT, specify its external address for the video bridge, otherwise participants from the internet will not receive video:

    dotenv
    JVB_ADVERTISE_IPS=203.0.113.10
  5. Create configuration directories. Since release stable-11146 containers run as an unprivileged user (uid 1000) with a read-only filesystem, the directory structure has changed and the storage and tmp directories must be writable:

    bash
    mkdir -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

bash
docker compose up -d
docker compose ps

Additional components

  • SIP gateway (Jigasi):

    bash
    docker compose -f docker-compose.yml -f jigasi.yml up -d
  • Recording and streaming (Jibri):

    bash
    docker compose -f docker-compose.yml -f jibri.yml up -d
  • Collaborative editing (Etherpad):

    bash
    docker 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

  1. 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.

  2. Open ports in the firewall:

    • 80/tcp and 443/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.
  3. 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:

bash
docker compose pull
docker compose up -d

Before 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

N_Konstantin

VPS setup, server setup

2025-10-10 · ★ 5/5

A settled customer

// 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)

Или оставьте заявку здесь:

Confirm that you are not a bot.

Write and get a quick reply