Self-Hosting Guide - Docker
Quick start
In order to quickly run Jitsi Meet on a machine running Docker and Docker Compose, follow these steps:
-
Download and extract the latest release. DO NOT clone the git repository. See below if you are interested in running test images:
wget $(wget -q -O - https://api.github.com/repos/jitsi/docker-jitsi-meet/releases/latest | grep zip | cut -d\" -f4) -
Unzip the package, and enter the new folder:
unzip <filename>
cd <foldername> -
Create a
.envfile by copying and adjustingenv.example:cp env.example .env -
Set strong passwords in the security section options of
.envfile by running the following bash script./gen-passwords.sh -
Create required
CONFIGdirectoriesnoteThis directory layout applies to release
stable-11146and newer, where the containers run rootless with a read-only filesystem. Earlier releases use a different layout: they have nostorageortmpdirectories, and keep the transcripts in~/.jitsi-meet-cfg/transcripts.- For Linux:
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}- For Windows (PowerShell):
$dirs = "web","prosody/config","prosody/prosody-plugins-custom","jicofo","jvb","jigasi","jibri","transcriber","storage/jibri","storage/prosody","storage/transcripts","storage/web","tmp/web-crontabs","tmp/web-load-test"
$dirs | ForEach-Object { New-Item -ItemType Directory -Force -Path "$HOME/.jitsi-meet-cfg/$_" }The
chmodstep has no equivalent on Docker Desktop for Windows and is not needed there.cautionThe containers run as an unprivileged user (uid/gid 1000), so the
storageandtmpdirectories must be writable by that user. Create them yourself before the first start and run thechmodcommands above. Leaving them to be created automatically results in directories the containers cannot write to.Containers that need one of these directories refuse to start with an explicit error if it is missing or not writable.
-
Run
docker compose up -d -
Access the web UI at
https://localhost:8443(or a different port, in case you edited the.envfile).
HTTP (not HTTPS) is also available (on port 8000, by default), but that's e.g. for a reverse proxy setup; direct access via HTTP instead HTTPS leads to WebRTC errors such as Failed to access your microphone/camera: Cannot use microphone/camera for an unknown reason. Cannot read property 'getUserMedia' of undefined or navigator.mediaDevices is undefined.
IMPORTANT: When deploying Jitsi Meet for real use you must set the PUBLIC_URL env variable to the real domain where your setup is running.
If you want to use jigasi too, first configure your env file with SIP credentials and then run Docker Compose as follows:
docker compose -f docker-compose.yml -f jigasi.yml up
If you want to enable document sharing via Etherpad, configure it and run Docker Compose as follows:
docker compose -f docker-compose.yml -f etherpad.yml up
If you want to enable a virtual collaborative whiteboard via Excalidraw, configure it and run Docker Compose as follows:
docker compose -f docker-compose.yml -f whiteboard.yml up
If you want to use jibri too, first configure a host as described in Jitsi Broadcasting Infrastructure configuration section and then run Docker Compose as follows:
docker compose -f docker-compose.yml -f jibri.yml up -d
or to use jigasi too:
docker compose -f docker-compose.yml -f jigasi.yml -f jibri.yml up -d
To include a transcriber component, run Docker Compose as follows:
docker compose -f docker-compose.yml -f transcriber.yml up -d
Or for them all together:
docker compose -f docker-compose.yml -f transcriber.yml -f jigasi.yml -f jibri.yml up -d
For the log analysis project, you will need both log-analyser.yml and grafana.yml files. This project allows you to analyze docker logs in grafana. If you want to run the log analyzer, run the Docker files as follows:
docker compose -f docker-compose.yml -f log-analyser.yml -f grafana.yml up -d
Follow this document for detailed information on log analysis.
Updating
If you want to update, simply run
wget $(wget -q -O - https://api.github.com/repos/jitsi/docker-jitsi-meet/releases/latest | grep zip | cut -d\" -f4)
again (just like how you initially downloaded Jitsi). Then unzip and overwrite all when being asked:
unzip <filename>
Updating from a release older than stable-11146
You can keep your existing CONFIG directory, but the release that introduced the rootless
containers added new directories and moved some paths. Create the new directories and make them
writable by the container user before starting the updated containers:
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}
The following paths moved:
| What | Old location | New location | Migration |
|---|---|---|---|
| Prosody data | ${CONFIG}/prosody/config/data | ${CONFIG}/storage/prosody | Automatic on the first start |
| Web TLS material | ${CONFIG}/web | ${CONFIG}/storage/web | Automatic on the first start |
| Jibri recordings and logs | ${CONFIG}/jibri/recordings, ${CONFIG}/jibri/logs | ${CONFIG}/storage/jibri | Move the existing files yourself if you want to keep them |
| Transcripts | ${CONFIG}/transcripts | ${CONFIG}/storage/transcripts | Move the existing files yourself if you want to keep them |
| Web crontabs and load test | ${CONFIG}/web/crontabs, ${CONFIG}/web/load-test | ${CONFIG}/tmp/web-crontabs, ${CONFIG}/tmp/web-load-test | Recreated when needed, nothing to move |
The old directories are left untouched and can be removed once the new setup works.
Testing development / unstable builds
Download the latest code:
git clone https://github.com/jitsi/docker-jitsi-meet && cd docker-jitsi-meet
The code in master is designed to work with the unstable images. Do not run it with release images.
Run docker compose up as usual.
Every day a new "unstable" image build is uploaded.
Building your own images
Download the latest code:
git clone https://github.com/jitsi/docker-jitsi-meet && cd docker-jitsi-meet
The provided Makefile provides a comprehensive way of building the whole stack or individual images.
To build all images:
make
To build a specific image (the web image for example):
make build_web
Once your local build is ready make sure to add JITSI_IMAGE_VERSION=latest to your .env file.