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

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

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-5765-1 (02.05.2021)

Hier könnt ihr schauen, welche Version bei euch im Moment aktuell ist.

1. Git installieren

Die neuste Version des Docker Containers wird durch den Hersteller über git bereitgestellt. Deshalb müsst ihr euch zuerst git installieren.

apt-get update
apt-get install git

2. git Repository clonen

Nun clonen wir uns das git Repository. Davor legen wir noch ein neues Verzeichnis an.

mkdir -p /opt/containers/jitsi
git clone https://github.com/jitsi/docker-jitsi-meet /opt/containers/jitsi

Nun wechseln wir in unser jitsi Verzeichnis.

cd /opt/containers/jitsi

Nachfolgend erstellen wir noch die benötigten Ordner und kopieren uns die Beispielkonfiguration.

rm -r ~/.jitsi-meet-cfg/
mkdir -p ~/.jitsi-meet-cfg/{web/letsencrypt,transcripts,prosody,jicofo,jvb,jigasi,jibri}
cp env.example .env

Nun müsst ihr euch noch Passwörter generieren lassen.

./gen-passwords.sh

3. 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'

        environment:
            #- ENABLE_LETSENCRYPT
.
.
            #- LETSENCRYPT_DOMAIN
            #- LETSENCRYPT_EMAIL
            #- LETSENCRYPT_USE_STAGING
.
.

Hier die relevanten Ausschnitte aus der Datei. 99% des Codes bleiben unverändert.

version: '3'

services:
    # Frontend
    web:
        image: jitsi/web:latest
        restart: ${RESTART_POLICY}
        #ports:
            #- '${HTTP_PORT}:80'
            #- '${HTTPS_PORT}:443'
        volumes:
            - ${CONFIG}/web:/config:Z
            - ${CONFIG}/transcripts:/usr/share/jitsi-meet/transcripts:Z
        environment:
            #- ENABLE_LETSENCRYPT
            - ENABLE_HTTP_REDIRECT
            - ENABLE_HSTS
            - ENABLE_XMPP_WEBSOCKET
            - DISABLE_HTTPS
            #- LETSENCRYPT_DOMAIN
            #- LETSENCRYPT_EMAIL
            #- LETSENCRYPT_USE_STAGING
            - PUBLIC_URL
.
.
.
            - XMPP_RECORDER_DOMAIN
            - TOKEN_AUTH_URL

        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:
            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

4. Jitsi Server starten

Nun können wir Jitsi starten. Dazu gebt ihr bitte folgenden Befehl ein:

docker-compose up -d

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

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

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

8. Quellen

https://github.com/jitsi/docker-jitsi-meet

https://github.com/jitsi/docker-jitsi-meet/issues/123

https://www.golem.de/news/sicherheitsluecke-unsichere-standardpasswoerter-in-jitsi-meet-2004-147840.html

Teile diesen Beitrag
Christian

Categories:

22 Kommentare

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

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

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

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

  5. 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 🙂

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

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

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

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

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

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

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

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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.