DIY-Videokonferenzsystem mit Jitsi-Server (und Docker)

Kein Datenschutzproblem, keine Gebühren: Das Videokonferenzsystem Jitsi Meet lässt sich schnell auf einem eigenen Server installieren. Ich habe das mal ausprobiert.

Lesezeit: 8 Min., von Titus Gast gepostet am Wed, 1.4.2020
Tags: online, server, git, docker, video, kommunikation

DIY-Videokonferenz-System mit Jitsi-Server (und Docker)

Update 2.4.2020: Jitsi Meet geht auch ganz ohne Docker.

Viele haben in diesen Tagen der Corona-Isolation das Problem, dass brauchbare Video-Konferenz-Tools entweder teuer, nur über den Arbeitgeber verfügbar oder überlastet sind. Das hilft einem natürlich dann wenig, wenn sich nur mal ein paar Menschen privat in diesem Internet treffen, der Sportverein eine Trainingssession veranstalten oder mehrere Familienmitglieder eine Familienkonferenz machen wollen. Wer also nicht ohnehin über seinen Arbeitgeber ein leistungsfähiges Videokonferenzsystem hat, braucht eine Alternative für Homeoffice, Homeschooling, Mannschaftssport zuhause oder Treffen mit Freunden und Familie.

Die gängigen Lösungen wie Facetime, Skype oder Whatsapp stoßen da schnell an ihre Grenzen, weil z.B. nicht bei allen verfügbar, nur auf dem Handy nutzbar und/oder die Teilnehmer*innenzahl beschränkt ist. Alternativen wie Zoom kosten Geld und sind aus Datenschutzgründen halt auch etwas fragwürdig.

Video-Konferenzen mit Jitsi

Es gibt da ein wunderbares kostenloses (weil Open Source) Tool namens Jitsi Meet, das Video-Anrufe nicht nur verschlüsselt, sondern extra für Video-Konferenzen gemacht ist. Man kann Jitsi Meet an jedem modernen Browser nutzen und es gibt auch Apps für Android und iOS. Zwar gibt es unter meet.jit.si einen öffentlichen Server, den man verwenden kann – der ist aber gerade häufig überlastet. Nun ist Jitsi Open Source und das bedeutet, dass jede*r sich das Tool installieren kann. Deshalb rufen die Entwickler aktuell in Corona-Zeiten auch dazu auf, das Tool selbst auf einem eigenen Server zu installieren.

Update 2.4.2020: Wer Gefallen an Jitsi Meet gefunden hat, kann auch der Kurzanleitung folgen und das System fest auf einem Server installieren, ganz ohne Docker – das geht ebenfalls sehr schnell. Mehr dazu unten.

Jitsi Meet auf dem eigenen Server – so geht’s

Das wollte ich genauer wissen und habe es mal ausprobiert. Da die Architektur von Jitsi Meet eher komplex ist, habe ich mich für die Docker-Variante entschieden, bei der alles in fertigen Paketen geliefert wird und man nur noch alles nach Gusto konfigurieren muss. Das war – nach anfänglichen Startschwierigkeiten – erfreulich einfach, deshalb teile ich hier die Schritte, die für mich funktioniert haben. Neben der offiziellen Anleitung von Jitsi Meet war mir dabei auch eine Anleitung von Golem.de extrem hilfreich. Wichtig: Die folgenden Angaben sind natürlich ohne Gewähr!

Voraussetzungen für den eigenen Jitsi-Server

Um Jitsi Meet via Docker an den Start zu bringen, brauchen wir zunächst zwei Dinge:

  1. einen (virtuellen) Server. Ich habe mir bei Hetzner innerhalb von wenigen Minuten einen Cloud-Server eingerichtet, der ist nicht teuer und das Cloud-Tool ist echt toll. Ansonsten kann ich den Hoster Servercow sehr empfehlen, einen kleinen, aber sehr feinen und sympathischen Anbieter mit hervorragendem Support.

  2. eine Domain (ich habe eine Subdomain für eine mir gehörende Domain angelegt und lasse die auf die IP des Servers zeigen). Die bekommt man am einfachsten bei Domainhostern wie INWX, United Domains o.ä. Wichtig: Man muss seine DNS-Einträge selbst bearbeiten können, damit man die IP des Servers für die Domain hinterlegen kann (A- bzw. AAAA-Record).

Auf dem Server installiert man dann ein Linux (ich nehme meistens Ubuntu, aber natürlich gehen auch Debian, CentOS oder andere) und Docker.

Server einrichten, Docker installieren

Wenn der Server läuft, logge ich mich via SSH ein und bringe erst mal das System auf den neuesten Stand.

apt update && apt upgrade -y

Anschließend installieren wir die Software, die wir brauchen – das sind vor allem Docker, Docker-Compose und Git.

Um Docker zu installieren, greifen wir auf die Docker-Quellen zurück und nehmen nicht das, was beim Betriebssystem mitgeliefert wird. Dabei habe ich mit folgenden Befehlen (nach jedem Kommentar eine Zeile) gemäß der offiziellen Anleitung gute Erfahrungen gemacht:

# Install packages to allow apt to use a repository over HTTPS:
apt install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common
    
# Add Docker’s official GPG key:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# Use the following command to set up the stable repository.
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

Anschließend müssen wir die Quellen aktualisieren und los geht’s mit der Docker-Installation. Weil die Container von Jitsi Meet via GitHub bereitgestellt werden, installieren wir auch gleich Git:

sudo apt update
sudo apt install docker-ce git

Die aufmerksame Leserin wird bemerkt haben, dass da noch was fehlt – nämlich Docker Compose. Das geht laut offizieller Anleitung über den folgenden Befehl:

sudo curl -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

Anschließend sorgen wir noch dafür, dass docker-compose auch ja ausführbar ist:

sudo chmod +x /usr/local/bin/docker-compose

Und schon haben wir einen Linux-Server mit Docker und Docker-Compose. Um sicher zu gehen, dass Docker auch immer dann startet, wenn das System startet, schließen wir die Installation mit einem geschmeidigen

sudo systemctl enable docker

ab. Das war der schwierige Teil. Puh.

Jitsi Meet als Docker-Container installieren

Und jetzt kommt Jitsi Meet. Dieser Teil ist in der Anleitung von Golem.de recht gut beschrieben, dort gibt es auch einige Hintergründe zu den verschiedenen Variablen, die man bei der Konfiguration bearbeiten kann. Die eigentliche Installation von Jitsi Meet besteht aus drei Kommandozeilen-Eingaben:

git clone https://github.com/jitsi/docker-jitsi-meet && cd docker-jitsi-meet

cp env.example .env

mkdir -p ~/.jitsi-meet-cfg/{web/letsencrypt,transcripts,prosody,jicofo,jvb}

Jetzt sollte alles am Start sein, man landet jetzt automatisch im Verzeichnis /docker-jitsi-meet und kann dort direkt mal testen, ob alles klappt. Bevor das geht, sollte man in in der Datei .env noch die eigenen Parameter einstellen; bei mir hat es gereicht, im ersten Konfigurationsblock einfach folgende Werte zu aktivieren:

#
# Basic configuration options
#

# Directory where all configuration will be stored
CONFIG=~/.jitsi-meet-cfg

# Exposed HTTP port
HTTP_PORT=80 

# Exposed HTTPS port
HTTPS_PORT=443

# System time zone
TZ=Europe/Amsterdam

# Public URL for the web service
PUBLIC_URL=https://meet.meine-tolle-domain.de

# IP address of the Docker host 
# See the "Running behind NAT or on a LAN environment" section in the README
DOCKER_HOST_ADDRESS=192.168.1.1

Ich habe die Ports auf 80 (HTTP) und 443 (HTTPS) geändert, meine (Sub)Domain eingetragen und die Variable DOCKER_HOST_ADDRESS aktiviert. Mehr brauchte es nicht.

Mit einem einfachen

docker-compose up

konnte ich dann die ganzen Jitsi-Meet-Container starten und die Website war erreichbar.

Verschlüsseln via Letsencrypt

Praktisch ist, dass die Docker-Container die Unterstützung für die Transportverschlüsselung via HTTPS schon eingebaut haben – man muss sie nur aktivieren. Um das zu machen, muss ich erst mal die Container stoppen und die zwischengespeicherte Konfiguration löschen.

docker-compose down
rm -R ../.jitsi-meet-cfg/ # Ich befinde mich im Verzeichnis /docker-jitsi-meet, die temporäre Konfiguration liegt eins höher! Daher die beiden Punkte.

Um Letsencrypt zu aktivieren, sind die Zeilen 30, 33 und 36 in der Konfiguration .env zu bearbeiten. Aktiviert wird Letsencrypt über ENABLE_LETSENCRYPT=1, daneben braucht es natürlich noch eine Domain und eine E-Mail-Adresse.

#
# Let's Encrypt configuration
#

# Enable Let's Encrypt certificate generation
ENABLE_LETSENCRYPT=1

# Domain for which to generate the certificate
LETSENCRYPT_DOMAIN=meet.meine-tolle-domain.de

# E-Mail for receiving important account notifications (mandatory)
LETSENCRYPT_EMAIL=webmaster@meine-tolle-domain.de

Anschließend spendieren wir nochmal eine Runde

docker-compose up -d

und überprüfen dann im Browser, ob der Server auch via HTTPS erreichbar ist. Wenn das klappt, hast du wahrscheinlich wie ich das Problem, dass er gleichzeitig über HTTP auch noch erreichbar ist. Auch das kann man ändern. Ganz unten in Zeile 309 steht in der .env die Variable

#ENABLE_HTTP_REDIRECT=1

Da sollte stehen:

ENABLE_HTTP_REDIRECT=1

Wichtig: Bevor das klappt, musste ich nochmal via

docker-compose down
rm -R ../.jitsi-meet-cfg/
docker-compose up -d

dafür sorgen, dass die Änderungen auch in die Konfiguration übernommen werden.

Zum Schluss wollte ich noch dafür sorgen, dass Jitsi Meet bei jedem Server-Neustart mitgestartet wird. Sicher gibt es dafür total elegante Methoden, ich habe das eher brachial gelöst, indem ich den folgenden Cronjob angelegt habe:

@reboot cd /[mein-verzeichnis]/docker-jitsi-meet/ && docker-compose up -d

Und schon habe ich meinen eigenen Videokonferenz-Server. Die ersten Tests waren vielversprechend – sowohl mit der App als auch mit dem Browser funktioniert es einfach und die Last auf dem Server ist überschaubar. Jetzt muss er sich nur noch in der Praxis bewähren.

Jitsi Meet ohne Docker

Es gibt gute Gründe, auf die oben beschriebene Docker-Installation zu verzichten. Ich hatte zum Beispiel das Bedürfnis, die HTML-Dateien der Jitsi-Seiten zu bearbeiten, etwa die Standardsprache anzupassen oder mal in die Logfiles zu schauen. Ein Blick in die Kurzanleitung des Jitsi-Projektes zeigte mir, dass die feste Installation auf einem virtuellen Server doch nicht so schwer aussieht wie zunächst gedacht, also habe ich das gerade mal ausprobiert. Und siehe da: Das ist überwiegend Plug and Play und – da die ganze Docker-Installation entfällt – unter dem Strich sogar viel einfacher.

Zunächst brauchen wir wie gehabt den Server, aber den haben wir ja nun schon und haben ihn auch schon auf den neuesten Stand gebracht. Als nächstes fügen wir die Quellen des Jitsi-Projektes hinzu:

echo 'deb https://download.jitsi.org stable/' >> /etc/apt/sources.list.d/jitsi-stable.list

Anschließend überprüfen wir den Schlüssel:

wget -qO -  https://download.jitsi.org/jitsi-key.gpg.key | sudo apt-key add -

Und nach einem weiteren apt update kann’s auch schon losgehen mit der Installation.

apt -y install jitsi-meet

Im Installationsprozess wird man dann nach der Domain gefragt (die hat man natürlich vorher schon eingerichtet) und muss zunächst ein selbst-signiertes SSL-Zertifikat erstellen. Zum Schluss kommt dann Letsencrypt ins Spiel – um das einzurichten, gibt es ein Skript, das man nur aufrufen muss:

/usr/share/jitsi-meet/scripts/install-letsencrypt-cert.sh

Et voilà, jetzt sollte man über den Browser die zuvor festgelegte Domain aufrufen und dort einen frischen Jitsi-Meet-Server vorfinden.

Startbildschirm von Jitsi Meet auf meinem eigenen Server


Posts zu ähnlichen Themen: