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

11.04.2020Anleitung wurde angepasst, da bei der aktuellen Version noch Passwörter generiert werden müssen.
27.03.2020Erstellung dieser Anleitung

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 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 3 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
        #ports:
            #- '${HTTP_PORT}:80'
            #- '${HTTPS_PORT}:443'
        volumes:
            - ${CONFIG}/web:/config
            - ${CONFIG}/web/letsencrypt:/etc/letsencrypt
            - ${CONFIG}/transcripts:/usr/share/jitsi-meet/transcripts
        labels:
            - "traefik.enable=true"
            - "traefik.http.routers.web.entrypoints=http"
            - "traefik.http.routers.web.rule=Host(`jitsi.euredomain.de`)"
            - "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`)"
            - "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"

        environment:
            - ENABLE_AUTH
            - ENABLE_GUESTS
            - ENABLE_LETSENCRYPT
            - ENABLE_HTTP_REDIRECT
.
.
.
        networks:
            proxy:
            meet.jitsi:
                aliases:
                    - ${XMPP_DOMAIN}

.
.
.


# Custom network so all services can communicate using a FQDN
networks:
    meet.jitsi:
    proxy:
      external: true

4. Jitsi Server starten

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

docker-compose up

Nach einiger Zeit sollte dann in der Konsole immer wieder folgende Meldung erscheinen:

Dieses Problem scheint laut Hersteller „normal“ zu sein. Dies steht bei git dazu:

Yes, that is somewhat by design: config files are generated on first container boot. If you want to re-create them, then wiping the config is necessary.

I understand this is not ideal, we may make improvements in the future, but for now, that's the best we can do. 

Nun beenden wir Jitsi mit den Tasten „STRG+C“.

Wie empfohlen löschen wir die Konfigurationsdateien. Dazu gebt ihr folgenden Befehl ein:

rm -r ~/.jitsi-meet-cfg

Anschließend könnt ihr Jitsi erneut starten.

docker-compose up

Nun sollte zu Beginn folgendes in der Konsole erscheinen:

Der Prozess ist abgeschlossen, wenn ihr folgendes seht:

Dies kann je nach Hardware mehrere Minuten dauern.

Nun könnt ihr Jitsi wieder mit „STRG+C“ beenden und mit folgendem Befehl im Hintergrund starten.

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

14 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

Schreibe einen Kommentar

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