In Zeiten von Corona sind Videokonferenzen immer gefragter. Da viele Tools Geld kosten oder wie im Fall Zoom Daten an Facebook übermitteln, ist Jitsi eine super Lösung. Hier zeige ich euch, wie ihr es mittels Docker installiert und mit Traefik kombiniert.
Update
26.07.2022 | Funktioniert nun mit der aktuellen Version stable-7439-2 |
16.01.2022 | Funktioniert nun mit der aktuellen Version stable-6726-2 |
02.05.2021 | Funktioniert auch mit der aktuellen Version stable-5765-1 |
13.01.2021 | Links zu Traefik hinzugefügt. |
04.01.2021 | Anleitung erweitert um: Jitsi Anpassungen, Grafan Integration. |
28.12.2020 | Anleitung wurde angepasst für die aktuelle Version angepasst. |
11.04.2020 | Anleitung wurde angepasst, da bei der aktuellen Version noch Passwörter generiert werden müssen. |
27.03.2020 | Erstellung dieser Anleitung |
Inhaltsverzeichnis
Diese Anleitung nutzt das Programm Traefik als Reverse Proxy. Ein Reverse Proxy ermöglicht es beispielsweise, dass mehre Anwendungen der Port 80 (HTTP) nutzen können. Wer Traefik noch nicht installiert hat kann sich meine Anleitungen dazu hier anschauen. Diese Anleitung basiert auch auf meiner Traefik Anleitung.
0. Vorwort zu Jitsi Versionen
Bei Jitsi gibt es leider in regelmäßigen Abständen Änderungen wodurch sehr viele Anleitungen im Netz nicht mehr funktionieren werden. Daher gebe ich jetzt hier die Version an, für welche meine Anleitung auf jeden Fall funktioniert. Die derzeit aktuelle Version ist: stable-7439-2: (26.07.2022)
Hier könnt ihr schauen, welche Version bei euch im Moment aktuell ist.
1. Verzeichnis erstellen
Zuerst erstellen wir uns ein Verzeichnis, in welches wir später Jitsi installieren wollen. Dazu gebt ihr folgendes ein:
mkdir -p /opt/containers/jitsi cd /opt/containers/jitsi
2. Jitsi downloaden und entpacken
Nun laden wir uns die aktuelle Version von Jitsi herunter. Klickt dazu auf folgenden Link:
https://github.com/jitsi/docker-jitsi-meet/releases/latest
Nun solltet ihr folgende Webseite sehen. Klickt hier mit der rechten Maustaste auf “Source code (tar.gz)”.
Dann wählt ihr “Adresse des Links kopieren” aus.
Nun gebt ihr in eurer Linux Konsole folgendes ein:
wget <Link einfügen>
Bei mir ist das:
wget https://github.com/jitsi/docker-jitsi-meet/archive/refs/tags/stable-7439-2.tar.gz
Nun beginnt der Download. Nach dem Download entpacken wir die Datei mit folgendem Befehl:
tar -xvzf stable-*
Nun sollte ein neuer Ordner erstellt worden sein. Nun wechseln wir in diesen:
cd docker-jitsi-meet-*
3. Jitsi Vorbereitungen
Nun erstellen wir uns noch eine Konfigurationsdatei. Gebt dazu folgendes ein:
cp env.example .env
Anschließend lassen wir uns noch sichere Passwörter generieren. Gebt dazu folgendes ein:
./gen-passwords.sh
Jetzt erstellen wir noch Konfigurationsverzeichnisse für Jitsi. Gebt dazu folgendes ein:
mkdir -p ~/.jitsi-meet-cfg/{web/crontabs,web/letsencrypt,transcripts,prosody/config,prosody/prosody-plugins-custom,jicofo,jvb,jigasi,jibri}
4. Anpassungen für Traefik
Nun müssen wir die Docker Compose Datei noch für Traefik anpassen.
nano docker-compose.yml
Hier fügt ihr folgende Zeilen im Dienst “web” hinzu:
labels: - "traefik.enable=true" - "traefik.http.routers.web.entrypoints=http" - "traefik.http.routers.web.rule=Host(`jitsi.euredomain.de`)" ## Hier anpassen - "traefik.http.middlewares.web-https-redirect.redirectscheme.scheme=https" - "traefik.http.routers.web.middlewares=web-https-redirect" - "traefik.http.routers.web-secure.entrypoints=https" - "traefik.http.routers.web-secure.rule=Host(`jitsi.euredomain.de`)" ## Hier anpassen - "traefik.http.routers.web-secure.tls=true" - "traefik.http.routers.web-secure.tls.certresolver=http" - "traefik.http.routers.web-secure.service=web" - "traefik.http.services.web.loadbalancer.server.port=80" - "traefik.docker.network=proxy" networks: proxy: Und das noch ganz am Ende der Datei: networks: meet.jitsi: proxy: external: true
Benötigte Anpassungen
- Ihr müsst noch eure Domain (jitsi.euredomain.de) anpassen.
Anschließend kommentiert ihr noch folgende Zeilen aus:
#ports: #- '${HTTP_PORT}:80' #- '${HTTPS_PORT}:443'
Hier die relevanten Ausschnitte aus der Datei. 99% des Codes bleiben unverändert.
version: '3' services: # Frontend web: image: jitsi/web:stable-6726-2 restart: ${RESTART_POLICY} labels: - "traefik.enable=true" - "traefik.http.routers.web.entrypoints=http" - "traefik.http.routers.web.rule=Host(`jitsi.euredomain.de`)" ## Hier anpassen - "traefik.http.middlewares.web-https-redirect.redirectscheme.scheme=https" - "traefik.http.routers.web.middlewares=web-https-redirect" - "traefik.http.routers.web-secure.entrypoints=https" - "traefik.http.routers.web-secure.rule=Host(`jitsi.euredomain.de`)" ## Hier anpassen - "traefik.http.routers.web-secure.tls=true" - "traefik.http.routers.web-secure.tls.certresolver=http" - "traefik.http.routers.web-secure.service=web" - "traefik.http.services.web.loadbalancer.server.port=80" - "traefik.docker.network=proxy" #ports: #- '${HTTP_PORT}:80' #- '${HTTPS_PORT}:443' volumes: - ${CONFIG}/web:/config:Z - ${CONFIG}/web/crontabs:/var/spool/cron/crontabs:Z - ${CONFIG}/transcripts:/usr/share/jitsi-meet/transcripts:Z environment: - AMPLITUDE_ID - ANALYTICS_SCRIPT_URLS . . . networks: proxy: meet.jitsi: aliases: - ${XMPP_DOMAIN} . . . # Custom network so all services can communicate using a FQDN networks: meet.jitsi: proxy: external: true
Nun müssen wir die Jitsi Konfiguration noch anpassen. Dazu geht ihr in folgende Datei:
nano .env
Hier ändert ihr nun diese Zeile ab:
# Public URL for the web service (required) #PUBLIC_URL=https://meet.example.com:8443 zu: PUBLIC_URL=https://jitsi.euredomain.de
5. Jitsi Server starten
Nun können wir Jitsi starten. Dazu gebt ihr bitte folgenden Befehl ein:
docker compose up -d
6. Jitsi testen
Nun könnt ihr ca. 30 Sekunden warten und dann auf eure Webseite gehen: jitsi.euredomain.de.
So sollte es nun aussehen:
Die Sprache könnt ihr ändern, wenn ihr auf das “Zahnrad” -> “More” klickt.
Anschließend ist die Benutzeroberfläche in deutsch.
7. Anpassungen von Jitsi
Ich habe hier eine weitere Anleitung veröffentlicht, in der ihr sehen könnt, wie ihr Jitsi innerhalb weniger Minuten nach euren Wünschen konfigurieren könnt.
8. Integration in Grafana
Grafana ermöglicht eine übersichtliche Darstellung von Statistiken. Damit könnt ihr die Anzahl der Teilnehmer / Konferenzen / Bandbreite / … überwachen. Grafana könnt ihr mit dieser Anleitung innerhalb weniger Minuten einbinden.
9. Quellen
https://github.com/jitsi/docker-jitsi-meet
https://github.com/jitsi/docker-jitsi-meet/issues/123
https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-docker
27 Kommentare
Hi,
ich habe Traefik v2 aus dem Tutorial installiert und wollte jetzt nach dieser Anleitung jitsi starten.
Leider bekomme ich folgenden Fehler:
ERROR: for traefikjitsi_web_1_58cfcc7d597b Cannot start service web: driver failed programming external connectivity on endpoint traefikjitsi_web_1_58cfcc7d597b (39767b1c2d59d1dfe2dcb1d817b3b3e9150afea6e8b9ec76c10922d197cab2d9): Bind for 0.0.0.0:443 failed: port is already allocated
Was mache ich falsch? bzw. wo liegt der Fehler?
VG
Thorsten
Hallo Thorsten,
du hast wohl alles richtig gemacht. In der Anleitung war noch ein kleiner Fehler. Man muss noch folgende Zeilen auskommentieren (siehe Schritt 3):
#ports:
#- ‘${HTTP_PORT}:80’
#- ‘${HTTPS_PORT}:443’
Habe die Anleitung korrigiert.
LG
Christian
Super Anleitung, nur Zeile 31 im jitsi docker-compose.yml versteh ich nicht: dachte traefik kümmert sich um LE?
VG
Werner
Super, vielen Dank – hat auf Anhieb funktioniert.
BTW: Ganz Klasse howtos
Hm… oder auch nicht 🙂
Kann den Raum anlegen, dann kommt die Abfrage nach Kamera…egal ob ich diese erlaube oder nicht – es kommt der Fehler:
Unfortunately, something went wrong.
Und dann versucht er zu reconnecten….
Hallo,
du kannst den Container mal starten mit
docker-compose up
Dann solltest du eventuelle Fehlermeldungen in der Konsole sehen.
Hier kann es auch helfen es mal mit einem anderen Browser zu versuchen. Chrome / Firefox / Edge.
Um das mit dem Browser auszuschließen kannst du es auch mal hier versuchen. Das ist die offizielle Jitsi Instanz:
https://meet.jit.si/
LG
Christian
Hallo und vielen Dank!
Sieht alles sehr gut machbar aus.
Ich scheitere an dem Punkt mit der Domain.
Kannst Du den Punkt “Ihr müsst noch eure Domain anpassen” bitte erläutern?
Vielleicht gibt es dazu auch schon etwas, das ich übersehen habe?
Das wäre großartig.
Hallo Michael,
hier musst du einfach die “Adresse” eingeben, unter welcher später Jitsi erreichbar sein soll.
Beispielsweise “video.deinedomain.de”. Die Domain “deinedomain.de” musst du natürlich besitzen.
LG
Christian
Hallo Michael,
Jitsi läuft nun – mann muss (sei neuesten?) vor docker-compose up, die gen-passwords.sh
ausführen. Damit werden sichere Passwörter gesetzt und dann läuft das ganze auch.
Danke für das super gemachte Howto.
VG
Thorsten
Hallo Thorsten,
vielen Dank für deinen Hinweis.
Habe meine Anleitung angepasst und weitere Links hinzugefügt.
LG
Christian
Hallo nochmal,
ich glaube, hier wird etwas mehr gebraucht.
Beim Ausführen der Anleitung Schritt für Schritt auf einem neu aufgesetzten Linux Mint in einer virtuellen Maschine kann ich weder
docker-compose noch die erwähnte
gen-passwords.sh ausführen.
Auch nach apt install docker-compose kommt auf docker-compose up die Meldung:
Could`nt connect to Docker daemon. You might need to install Docker.
Deine Anleitung setzt offenbar ein System voraus, das schon etwas weiter eingerichtet ist als ein jungfräuliches Linux Mint.
Trotzdem Danke für die ohne Frage lobenswerte Leistung 🙂
Hallo Michael,
ja die Anleitung setzt einiges vorraus.
Dies kannst du hiermit installieren: https://goneuland.de/traefik-v2-reverse-proxy-fuer-docker-unter-debian-10-einrichten/
https://goneuland.de/debian-10-buster-docker-installieren/
Danach sollte Docker / Compose / Traefik funktionieren.
LG
Christian
Hallo Christian,
erstmal vielen Dank für deinen großartigen Blog
ich habe hier vor allem viel über Traefik herausgefunden.
Bei dieser Anleitung komme ich jedoch nicht weiter 🙁
Ich habe erst nach deiner gearbeitet aber bei Punkt 4 gehts nicht wie in deinem Beispiel weiter.
Der Container Stack läuft und ich kann auch zugreifen aber sobald ein Teilnehmer beitritt, bricht die Verbindung auf beiden Seiten ab. Die Ausgabe im log:
jvb_1 | INFO: Running expire()
jvb_1 | Jul 20, 2020 6:13:56 PM org.jitsi.utils.logging2.LoggerImpl log
jvb_1 | INFO: create_conf, id=da9170776b20543d gid=null logging=false
jvb_1 | Jul 20, 2020 6:13:56 PM org.jitsi.utils.logging2.LoggerImpl log
jvb_1 | INFO: Performed a successful health check in PT0.023S. Sticky failure: false
jvb_1 | Jul 20, 2020 6:14:06 PM org.jitsi.utils.logging2.LoggerImpl log
jvb_1 | INFO: create_conf, id=307cf6b972fc1192 gid=null logging=false
jvb_1 | Jul 20, 2020 6:14:06 PM org.jitsi.utils.logging2.LoggerImpl log
jvb_1 | INFO: Performed a successful health check in PT0.023S. Sticky failure: false
jvb_1 | Jul 20, 2020 6:14:16 PM org.jitsi.utils.logging2.LoggerImpl log
jvb_1 | INFO: create_conf, id=c8e5f4e6bb33e564 gid=null logging=false
jvb_1 | Jul 20, 2020 6:14:16 PM org.jitsi.utils.logging2.LoggerImpl log
jvb_1 | INFO: Performed a successful health check in PT0.01S. Sticky failure: false
jvb_1 | Jul 20, 2020 6:14:26 PM org.jitsi.utils.logging2.LoggerImpl log
jvb_1 | INFO: create_conf, id=e3167fe392a0dd2f gid=null logging=false
jvb_1 | Jul 20, 2020 6:14:26 PM org.jitsi.utils.logging2.LoggerImpl log
jvb_1 | INFO: Performed a successful health check in PT0.022S. Sticky failure: false
jvb_1 | Jul 20, 2020 6:14:36 PM org.jitsi.utils.logging2.LoggerImpl log
jvb_1 | INFO: create_conf, id=e0acd43182ec124d gid=null logging=false
jvb_1 | Jul 20, 2020 6:14:36 PM org.jitsi.utils.logging2.LoggerImpl log
jvb_1 | INFO: Performed a successful health check in PT0.026S. Sticky failure: false
jvb_1 | Jul 20, 2020 6:14:46 PM org.jitsi.utils.logging2.LoggerImpl log
jvb_1 | INFO: create_conf, id=c4848996b16efed2 gid=null logging=false
jvb_1 | Jul 20, 2020 6:14:46 PM org.jitsi.utils.logging2.LoggerImpl log
jvb_1 | INFO: Performed a successful health check in PT0.021S. Sticky failure: false
Dann habe ich wie auf adminforge noch die .env bearbeitet.
https://adminforge.de/linux-allgemein/eigene-jitsi-meet-instanz-installieren-docker-ubuntu-nginx/
Nun kann sich wenigstens ein zweiter verbinden aber man sieht sich nicht.
Ausgabe im Log ist wie oben konstant geblieben
Vielleicht fällt dir noch etwas ein?
Viele Grüße
Tobias
Hallo Christian,
Anleitung ist sehr gut geschrieben. Es hat auch alles soweit geklappt.
Allerdings gibt es bei mir den Ordner usr/share/jitsi-meet nicht.
Weißt du vielleicht wie ich das hinbekomme?
Ich würde gerne ein paar Änderungen an Übersetzungen und Oberfläche vornehmen.
Freundliche Grüße
Stefan
Hi, danke für die Anleitung.
Ich bekomme es nur leider so nicht hin.
Wenn ich alles genau nach Anl. mache, bekomme Fehlermeldungen. Um es abzukürzen:
– wie viele Zeilen müsste die komplett fertige docker-compose.yml haben? (z.B. networks: kommt bei mir dann zich mal vor…)
– “Einfügen” heißt immer unten dran hängen oder irgendwo mittendrin einfügen und ersetzen?
VG Hardy
Hallo,
habe gestern Jitsi nach deiner schönen Anleitung installiert.
Leider bekomme ich noch Fehler:
_1 |[0m meet.jitsi:auth_token [1;33mwarn[0m WARNING – empty tokens allowed
[35mjvb_1 |[0m Feb 09, 2021 7:39:14 AM org.jitsi.utils.logging2.LoggerImpl log
[35mjvb_1 |[0m INFO: Performed a successful health check in PT0S. Sticky failure: false
[36mweb_1 |[0m nginx: [emerg] host not found in upstream “xmpp.meet.jitsi” in /config/nginx/meet.conf:50
[36mweb_1 |[0m nginx: [emerg] host not found in upstream “xmpp.meet.jitsi” in /config/nginx/meet.conf:50
[36mweb_1 |[0m nginx: [emerg] host not found in upstream “xmpp.meet.jitsi” in /config/nginx/meet.conf:50
Vielleicht hast du ja Zeit dir das anzuschauen, dass würde mich freuen.
Ich wünsche dir eine schönen Tag.
Hallo 🙂
Also läuft tadel-los Danke!
Aber in deinem Code bzw. docker-compse.yml – sind die Einrückungen viel zu weit? Oder kam nur bei mir der Fehler?
Bei jeder Zeile sind zwei Leerzeichen zu viel am Start.
grüsse
Wow! Vielen Dank für die einfache, übersichtliche und funktionierende Doku. Ich habe eine leicht andere Traefik-Konfiguration die ich mit der Community teilen möchte.
labels:
– “traefik.enable=true”
– “traefik.http.routers.web.entrypoints=web”
– “traefik.http.routers.web.rule=Host(`jitsi.chatcloud.net`)”
– “traefik.http.middlewares.web-https-redirect.redirectscheme.scheme=https”
– “traefik.http.routers.web.middlewares=web-https-redirect”
– “traefik.http.routers.web-secure.entrypoints=websecure”
– “traefik.http.routers.web-secure.rule=Host(`jitsi.chatcloud.net`)”
– “traefik.http.routers.web-secure.tls=true”
– “traefik.http.routers.web-secure.tls.certresolver=myresolver”
– “traefik.http.routers.web-secure.service=web”
– “traefik.http.services.web.loadbalancer.server.port=80”
– “traefik.docker.network=web”
networks:
web:
meet.jitsi:
aliases:
– ${XMPP_DOMAIN}
Und ganz unten:
# Custom network so all services can communicate using a FQDN
networks:
meet.jitsi:
web:
external: true
Und bei mir kam die Fehlermeldung, dass das Netzwerk nicht vorhanden war. Dies muss man natürlich vorher in Docker erstellen.
ganz tolle Anleitung, vielen Dank
Gibt es irgendwo Angaben zu den Systemvoraussetzungen? (CPUs, RAM etc.)
Wie viele gleichzeitige Video-Teilnehmer in einer Konferenz sind damit möglich?
Besten Dank im voraus für die Anwort
Viele Grüße Helge
Hallo,
dem Lob dieser Anleitung muss ich mich uneingeschränkt anschliessen: Sehr übersichtlich, gut nachvollziehbar.
Einige male habe ich nach dieser Anleitung mein Jitsi aktualisiert, nun auf Version 5390-3 habe ich ein großes Problem, Prosody (mithin jicofo, jvb) sind in einer Endlosschleife Restarting…
Im Netz habe ich keine Lösung gefunden; am vielversprechensten ist https://github.com/jitsi/docker-jitsi-meet/issues/472, aber das betrifft SELinux, was bei mir (Ubuntu 18.04.5 LTS) nicht vorhanden ist.
Habe Container gelöscht (docker image prune -a) u. neu geholt (docker pull), ohne Erfolg.
Hat jemand eine Idee?
Hinzufügen möchte ich noch:
In der .env ist eingestellt ENABLE_AUTH=1, ENABLE_GUESTS=1 u. AUTH_TYPE=internal
Per dist-upgrage ist auch Docker aktualisiert auf version 20.10.5 – und Docker habe ich im Verdacht für das Fehlverhalten, finde aber keine weiteren Hinweise.
Leider funktioniert diese Anleitung mit der neuesten Version (stable-6726-1) nicht mehr.
Laut offizieller Jitsi Docker Installationsanleitung soll kein git CLONE ausgeführt werden.
https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-docker
Hallo Oliver,
danke für den Hinweis.
Ich habe die Anleitung für die aktuelle Version angepasst.
VG
Christian
Hallo Christian,
sauber, das ging sehr schnell. Super
Vielen Dank für die Anleitung!
Ich habe Jitsi mit Traefik mit ner NAT-Konfiguration hinter dem Router laufen.
Portfreigabe: TCP 443, TCP 4443, UDP 10000
Video ging dabei nur durch, wenn ich auch für die Videobridge einen Traefik-Transport eingerichtet habe:
networks:
meet.jitsi:
proxy:
labels:
– “traefik.udp.routers.jvb.entrypoints=video”
– “traefik.udp.routers.jvb.service=jvb”
– “traefik.udp.services.jvb.loadbalancer.server.port=10000”
Liebe Grüße
Michael
Moin Michael, hast du auch die entrypoints in traefik angelegt? Wenn ja , welche? Was ist mit dem Port 4443? Der sollte auch freigegeben werden laut documentation jitsi…
Bisher läuft jitsi 7001 stabile auch ohne die udp Freigabe bei mir…