Version: 25.09.15
Videokonferenzen gehören heute zum Alltag – ob im Homeoffice, bei Online-Kursen oder im privaten Austausch. Mit Jitsi Meet haben Sie die Möglichkeit, eine komplett eigene Videokonferenz-Plattform zu betreiben – unabhängig von externen Diensten und mit voller Kontrolle über Daten und Funktionen. 🛡️
Ein eigener Jitsi-Server eignet sich z. B. für:
- 📚 Schulungen und Online-Kurse
- 👥 Team-Meetings im Unternehmen
- 🔒 Sichere, private Gespräche ohne Drittanbieter
Damit Sie erfolgreich starten können, sollten Sie ein paar Grundkenntnisse und Voraussetzungen mitbringen:
- 🐧 Linux-Basics (Server-Administration, SSH, Pakete installieren)
- 🐳 Erfahrung im Umgang mit Docker und Docker Compose
- 🌐 Grundwissen über Netzwerke und Domains (DNS, Ports, SSL-Zertifikate)
- ⚠️ !! eigener Turn / Coturn Server um Verbindungen von außen annehmen zu können! Grundvoraussetzung !! 🔥🔥
In diesem Tutorial zeige ich Ihnen Schritt für Schritt, wie Sie Ihren eigenen Jitsi Meet Server einrichten – von den Voraussetzungen bis hin zur lauffähigen Videokonferenz-Plattform.
Wir bedienen uns hierzu von einigen Elementen, die auf der offiziellen Jitsi Meet Konfigurationsseite entnommen werden können:
https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-docker
1. Installation:
Wir loggen uns dazu auf unserem Server (Linux Ubuntu / VPS) ein und erstellen in unserem Projektordner einen neuen Ordner „jitsi“ und navigieren anschließend zu diesem.
cd /home/
mkdir jitsi
cd jitsi
Innerhalb des Jitsi Ordner führen wir folgenden Befehl aus:
wget $(wget -q -O - https://api.github.com/repos/jitsi/docker-jitsi-meet/releases/latest | grep zip | cut -d\" -f4)
Wir schauen uns dann in dem Ordner mit „ls“ an wie die Datei heißt, die wir heruntergeladen haben und führen dann folgenden Befehl aus:
unzip <filename>
2. Konfiguration:
Danach:
cp env.example .env
Mit dem cp env Befehl zu .env kopieren wir die Beispiel Konfigurationsdatei von Jitsi Meet zu unser eigenen .env Datei, in die nachher unsere Konfiguration ergänzt wird.
Jetzt müssen wir noch starke Passwörter für die .env Datei erstellen, die dann dort auch direkt eingetragen werden. Einfach folgenden Befehl in dem „jitsi“-Ordner ausführen:
./gen-passwords.sh
Nun erstellen wir die restlichen Konfigurationsdateien:
mkdir -p ~/.jitsi-meet-cfg/{web,transcripts,prosody/config,prosody/prosody-plugins-custom,jicofo,jvb,jigasi,jibri}
Nachdem alle config-Dateien erstellt wurden, starten wir das Docker Projekt kurz um es danach wieder auszuschalten:
docker compose up -d
docker compose down
Nun schauen wir uns die .env Konfigurationsdatei genauer an und ergänzen entsprechende Einträge:
nano .env
Folgender Inhalt sollte (angepasst!) in der .env Datei stehen, damit alles funktioniert:
# All config files into jitsi folder:
CONFIG=./config
HTTP_PORT=8000
HTTPS_PORT=8443
#Timezone
TZ=UTC
PUBLIC_URL=https://meeting.yourdomain.com
# Reachable IP from Outside the docker container:
JVB_ADVERTISE_IPS=128.XXX.XXX.XXX
# Enable authentication (will ask for login and password to join the meeting)
ENABLE_AUTH=1
# Enable guest access (if authentication is enabled, this allows for users to be held in lobby until registered user lets them in)
ENABLE_GUESTS=1
# Select authentication type: internal, jwt, ldap or matrix
AUTH_TYPE=internal
# XMPP password for Jicofo client connections
JICOFO_AUTH_PASSWORD=GENERATEDWITHGENPASSWORDSHFILEABOVE
# XMPP password for JVB client connections
JVB_AUTH_PASSWORD=GENERATEDWITHGENPASSWORDSHFILEABOVE
# XMPP password for Jigasi MUC client connections
JIGASI_XMPP_PASSWORD=GENERATEDWITHGENPASSWORDSHFILEABOVE
# XMPP password for Jigasi transcriber client connections
JIGASI_TRANSCRIBER_PASSWORD=GENERATEDWITHGENPASSWORDSHFILEABOVE
# XMPP recorder password for Jibri client connections
JIBRI_RECORDER_PASSWORD=GENERATEDWITHGENPASSWORDSHFILEABOVE
# XMPP password for Jibri client connections
JIBRI_XMPP_PASSWORD=GENERATEDWITHGENPASSWORDSHFILEABOVE
# Container restart policy
RESTART_POLICY=unless-stopped
# Jitsi image version (useful for local development)
#JITSI_IMAGE_VERSION=latest
ENABLE_XMPP_WEBSOCKET=1
ENABLE_COLIBRI_WEBSOCKET=1
#TURN SERVER CONFIGURATION:
# TURN-Server Konfiguration
TURN_HOST=yourturnserver.com
TURN_PORT=3478
TURN_TRANSPORT=udp,tcp
# If used TLS TURN SERVER
#TURNS_HOST=yourturnserver.com
#TURNS_PORT=443
# Zugangsdaten (username:password)
TURN_CREDENTIALS=username:password
# Turn TTL in Seconds, let it so
TURN_TTL=86400
Wir müssen jetzt noch entsprechende User vergeben, da wir Jitsi Meet so eingestellt haben, dass nicht einfach Jeder, der die URL kennt eine Videokonferenz einberufen kann.
Wir starten dazu das Docker Projekt mit:
docker compose up -d
Wir wechseln nun in den „prosody“ Jitsi Container.
docker compose exec prosody /bin/bash
Anschließend können wir User (Konferenzleiter) mit folgendem Befehl erstellen:
prosodyctl --config /config/prosody.cfg.lua register TheDesiredUsername meet.jitsi TheDesiredPassword
Um einen User wieder zu löschen, folgender Befehl:
prosodyctl --config /config/prosody.cfg.lua unregister TheDesiredUsername meet.jitsi
Und um alle User anzuzeigen:
find /config/data/meet%2ejitsi/accounts -type f -exec basename {} .dat \;
Wir verlassen den „prosody“-Container anschließend wieder mit:
exit
3. kurze Exkursion: Turn / Coturn Server
🔥 Die Konfiguration setzt einen funktionierenden turn / coturn Server voraus.‼️Und das man nach der Installation und Portfreigabe von Coturn (UDP Port 3478, 40000 – 41000 und TCP 3478 und bei TLS noch 5349) auch entsprechende User in Turn vergeben hat.
Kurzer Ausflug zur Uservergabe. Coturn / Turn config unter /etc/turnserver.conf:
lt-cred-mech
realm=yourturnserver.com
listening-port=3478
listening-ip=IP-ADRESS-YOUR-VPS
min-port=40000
max-port=41000
# DB-Directory
userdb=/var/lib/turn/turndb
# LOGS
log-file=/var/log/turnserver.log
simple-log
Hiermit lassen sich die Coturn User in der DB anzeigen:
sudo turnadmin -l -b /var/lib/turn/turndb
Und hiermit lassen sich neue User erstellen:
sudo turnadmin -a -u user -p ultrastrongpassword -r yourturnserver.com -b /var/lib/turn/turndb
Nicht vergessen in der UFW-Firewall oder VPS-Firewall die entsprechenden Ports oben freizugeben!
4. Portfreigaben und NPM:
‼️ Jitsi Meet benötigt dringend noch den UDP Port 10000 zur Freigabe! ‼️(auch in der Firewall freigeben)
Bevor es in den NPM geht muss natürlich eine entsprechende Subdomain für unseren Videokonferenzserver bei dem Provider angelegt werden (DNS Eintrag mit Verweis auf die IP des Servers):
meeting.yourdomain.com
Im NPM (Nginx Proxy Manager) legen wir eine neue Domain (Proxy Host) an, zum Beispiel: meeting.yourdomain.com

Nach innen verweisen wir hierbei auf den HTTP Port 8000 und NPM kümmert sich um das SSL Zertifikat und die Verschlüsselung nach außen hin. Mit einem Klick auf „Save“ wird das Ganze gespeichert und die Konfiguration von unserem eigenen Jitsi Meet Server nach außen hin ist abgeschlossen.
5. Optional: eigenes „Branding“
Jetzt wollen wir noch ein individuelles „Branding“ vergeben, so dass auf der Startseite unserer „meeting.yourdomain.com“-URL nicht mehr „Jitsi Meet“ sondern z.B. „IT-Service-Commander“ steht:

Dazu muss eine entsprechende Sprachdatei gepatcht werden. Das kann man im Docker-Compose Container machen:
docker-compose exec web bash
Nano-Editor installieren, da der Container diese nicht kennt:
apt-get update
apt-get install -y nano
Die Datei editieren:
nano /usr/share/jitsi-meet/lang/main-de.json
Folgenden Auszug suchen und abändern:
"headerTitle": "Jitsi Meet",
"headerSubtitle": "Sichere und hochqualitative Konferenzen",
Die Datei abspeichern und den Container neu starten:
docker-compose restart web
Wenn man es allerdings dauerhaft lösen möchte muss man wie folgt vorgehen (bessere Variante):
In dem „jitsi“ Ordner (Docker Projektordner) folgende Datei anlegen:
nano docker-compose.override.yml
Folgender Inhalt:
services:
web:
volumes:
- ./overrides/lang/main-de.json:/usr/share/jitsi-meet/lang/main-de.json:ro
Auf dem Host die Verzeichnisstruktur anlegen:
mkdir -p ./overrides/lang
Die Sprachdatei aus dem Container heraus ziehen:
docker cp jitsi-web-1:/usr/share/jitsi-meet/lang/main-de.json ./overrides/lang/main-de.json
Und die Datei auf dem Host bearbeiten (wie oben schon geschrieben die Passage mit Jitsi Meet abändern):
nano ./overrides/lang/main-de.json
Zum Schluss noch einmal alles neu starten:
docker-compose up -d --force-recreate web
Fertig, das Branding sollte jetzt weg von Jitsi Meet sein und euer eigenes Branding enthalten.
6. Fertigstellung
✅ Wir sind fertig und haben folgendes eingerichtet:
🖥️ Jitsi Meet Server
🔗 Verbunden mit Coturn / Turnserver, um die Erreichbarkeit sicherzustellen (nicht nur interne Verbindungen, sondern auch externe)
🌐 TCP und UDP Ports in der Firewall freigegeben.
🏷️ Zugriff über eine Subdomain für unseren Jitsi Meet Server.
🔒 Im NPM Manager SSL-Zertifikate vergeben.
🎨 Optional: eigenes Branding eingerichtet.
✨ Fertig – einsatzbereiter Jitsi Meet Server!

bc1q8dxp9mlt3mkvaklu2vn8j6jteqyv53kschc90v

Lightning: itsc@strike.me
