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.
Datum | Änderungen |
---|---|
27.03.2020 | Erstellung dieser Anleitung |
11.04.2020 | Anleitung wurde angepasst, da bei der aktuellen Version noch Passwörter generiert werden müssen. |
28.12.2020 | Anleitung wurde angepasst für die aktuelle Version angepasst |
04.01.2021 | Anleitung erweitert um: Jitsi Anpassungen, Grafan Integration |
13.01.2021 | Links zu Traefik hinzugefügt. |
02.05.2021 | Funktioniert auch mit der aktuellen Version stable-5765-1 |
16.01.2022 | Funktioniert nun mit der aktuellen Version stable-6726-2 |
26.07.2022 | Funktioniert nun mit der aktuellen Version stable-7439-2 |
26.12.2022 | angepasst an die aktuelle Version stable-8138-1, Traefik Labels angepasst |
19.03.2023 | getestet mit stable-8319 |
29.05.2023 | Anpassung an neue Traefik Anleitung, getestet mit stable-8615 |
25.10.2024 | Anpassung an neue Traefik Anleitung, getestet mit stable-9779 |
0. Grundvoraussetzung
- Docker & Docker Compose v2 (Debian / Ubuntu)
- Traefik V3 Installation, Konfiguration und CrowdSec-Security
0.1 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-9779 (25.10.2024)
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-9779.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,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 –> labels” hinzu:
traefik.docker.network: proxy traefik.enable: "true" traefik.http.routers.jitsi.entrypoints: websecure traefik.http.routers.jitsi.middlewares: default@file traefik.http.routers.jitsi.rule: (Host(`jitsi.euredomain.de`)) traefik.http.routers.jitsi.service: jitsi traefik.http.routers.jitsi.tls: "true" traefik.http.routers.jitsi.tls.certresolver: http_resolver traefik.http.services.jitsi.loadbalancer.server.port: "80"
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'
Nun fügt ihr im Bereich “web –> networks” noch folgendes hinzu:
proxy: null
Am Ende der Datei fügt ihr dann ebenfalls im Bereich “networks” folgendes hinzu:
proxy: external: true
Hier die relevanten Ausschnitte aus der Datei. 99% des Codes bleiben unverändert.
services: # Frontend web: image: jitsi/web:${JITSI_IMAGE_VERSION:-stable-9779} restart: ${RESTART_POLICY:-unless-stopped} #container_name: jitsi-web #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 - ${CONFIG}/web/load-test:/usr/share/jitsi-meet/load-test:Z environment: - AMPLITUDE_ID - ANALYTICS_SCRIPT_URLS ... ... labels: service: "jitsi-web" traefik.enable: true traefik.http.routers.jitsi.entrypoints: "websecure" traefik.http.routers.jitsi.rule: "(Host(`jitsi.euredomain.de`))" traefik.http.routers.jitsi.tls: "true" traefik.http.routers.jitsi.tls.certresolver: "http_resolver" traefik.http.routers.jitsi.service: "jitsi" traefik.http.services.jitsi.loadbalancer.server.port: "80" traefik.docker.network: "proxy" traefik.http.routers.jitsi.middlewares: "default@file" networks: meet.jitsi: proxy: null ... ... # 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 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 pull 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
Hallo Christian,
####
Nach meinem Post… ist mir aufgefallen… das JVB keine verbindung in Video und Audio aufbaut… Vielleicht hat jemand noch eine idee….
#####
Dennnoch!…
Deine Anleitungen sind die BESTEN!
Ich habe mein Docker, Traefik, Nextcloud und und und schon mit deiner Anleitung eingerichtet!
Nun auch Jitsi
Ich musste aufgrund meines Setups wohl ein paar Dinge anpassen oder habe ein paar andere Parameter. Aber mit deiner Anleitung war das – ohne das ich tief in der Materie bin – mit Try-and-Error – machbar.
Folgendes musste ich ändern.
docker-compose.yml
labels: # Label-Konfiguration habe ich schon länger auf div.
# Installationen so und läuft.
# Deine hat mir irgendeinen nicht nachvollziehbaren Fehler geworfen…
– “traefik.enable=true”
– “traefik.http.routers.jitsi-app.entrypoints=http”
– “traefik.http.routers.jitsi-app.rule=Host(
jitsi.domain.de
)” ## Hier eure Domain eingeben ##– “traefik.http.middlewares.jitsi-app-https-redirect.redirectscheme.scheme=https”
– “traefik.http.routers.jitsi-app.middlewares=jitsi-app-https-redirect”
– “traefik.http.routers.jitsi-app-secure.entrypoints=https”
– “traefik.http.routers.jitsi-app-secure.rule=Host(
jitsi.domain.de
)” ## Hier eure Domain eingeben ##– “traefik.http.routers.jitsi-app-secure.tls=true”
– “traefik.http.routers.jitsi-app-secure.tls.certresolver=http”
– “traefik.http.routers.jitsi-app-secure.service=jitsi-app”
– “traefik.http.services.jitsi-app.loadbalancer.server.port=80”
– “traefik.docker.network=proxy”
– “traefik.http.routers.jitsi-app-secure.middlewares=secHeaders@file”
…
jvb:
…
…
ports:
– ‘${JVB_PORT:-10000}:${JVB_PORT:-10000}/udp’
– ‘127.0.0.1:${JVB_COLIBRI_PORT:-9080}:8080′ #Host-Port war schon vergeben
——————————-
Das war es eigentlich und es lief unter debian – in einer VM (VBox) auf einem Windows Host ^^
Grüße und Tausend Dank
Hallo, wenn man der alten Anleitung von Christian für Traefik V2 gefolgt ist, dann müsste die letzte Zeile für den Traefik-Eintrag in der docker-composer.yml vermutlich so sein:
Auch, wenn ich ehrlich gesagt, keine Ahnung habe was die Zeile tut / tun sollte, aber mit default@file hat es bei mir nicht funktioniert.
Hallo, mit der Anleitung komme ich nicht klar.
Fehlermeldung: “Ihre Verbindung ist getrennt worden”
https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-docker/
note
Starting with release
stable-7289-1
our images are provided withamd64
andarm64
architecture.Funktioniert die Anleitung am 19.03.2023?
VG
Thilo
Was ist denn mit der Integration des UDP Ports 10000 für die Videobridge? Ich vermisse dies noch in der Anleitung.
Laut dem Schaubild der Jitsi Anleitung soll der port an den JVB Container weitergereicht werden:
Leider habe ich dafür noch keine lauffähige Konfiguration erstellen können.
Es wäre schön, wenn das Jemand ergänzen könnte. Danke.
Sehr gute Anleitung, hatte bei mir auch immer einwandfreie Dienste geleistet.
Leider will es jetzt nicht mehr, seit dem ich noch eine Mailcow Instanz auf dem selben Host laufen habe.
Bekomme immer nur die Meldung:
Error response from daemon: driver failed programming external connectivity on endpoint docker-jitsi-meet-stable-7648-4-jvb-1 (2e446a5ace661a65eaa7862a41877f8d68cd71910d1d08218ea363cb6f77a2ef): Bind for 127.0.0.1:8080 failed: port is already allocated
Klar, auf dem Port ist Mailcow, aber warum nimmt es nicht einen anderen Netzbereich?!
Damit erstmal gestorben bis ich wieder die Muse dazu habe ^^
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…
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
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,
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?
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
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
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
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.
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 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
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 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,
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 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.
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….
Super, vielen Dank – hat auf Anhieb funktioniert.
BTW: Ganz Klasse howtos
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