staging.inyokaproject.org

Jitsi Meet Videokonferenzserver

Achtung!

Die Verwendung dieses Howto geschieht auf eigene Gefahr. Bei Problemen mit der Anleitung melde dies bitte in der dazugehörigen Diskussion und wende dich zusätzlich an den Verfasser des Howtos. Voraussetzung: Linux-basierte Root-Server absichern.

Hinweis:

Diese Howto-Anleitung wurde zuletzt von Fiodin am 03.08.2020 unter Ubuntu 18.04 erfolgreich getestet.

Problembeschreibung

Wer keines der zahlreichen proprietären Videokonferenzsysteme mit Registrierungspflicht nutzen möchte, dem bietet sich Jitsi Meet als freie Alternative an, zumal man mit wenigen Schritten einen eigenen Server mit professioneller Optik und besten Komfort aufsetzen kann. Jitsi lässt sich mit jedem modernen Browser auf Linux, macOS oder Windows nutzen. Auf PC/Notebooks wird ein Headset für eine reibungslose Kommunikation empfohlen. Stressfrei ist die Nutzung per Smartphone oder Tablett-PC mit der App: Jitsi Meet. Bei der App ist zu beachten immer die komplette URL für die Videokonferenz aufzurufen, sonst eröffnet man einen neuen Raum auf dem in der App hinterlegten Server. Also immer mit "https://" anstatt nur "konferenz.meinbeispielserver.de"

Anleitung

Voraussetzungen: Ubuntu 18.04 Root-Server mit vollständigem SSH-Zugriff bei einem Hoster erwerben (Ein einfacher VServer reicht bis 10 Teilnehmer) oder ein eigener fertig installierter Webserver und eine eigene Internetdomain. Bitte beachten: Linux-basierte Root-Server absichern.

Repository anlegen

Hinweis!

Zusätzliche Fremdquellen können das System gefährden.

Als Root per SSH auf dem Server einloggen und alle Updates und Upgrades ausführen. Repository hinzufügen updaten.

curl https://download.jitsi.org/jitsi-key.gpg.key | sudo sh -c 'gpg --dearmor > /usr/share/keyrings/jitsi-keyring.gpg'
echo 'deb [signed-by=/usr/share/keyrings/jitsi-keyring.gpg] https://download.jitsi.org stable/' | sudo tee /etc/apt/sources.list.d/jitsi-stable.list > /dev/null
apt-get update 

Webserver

Als Webserver kann für Jitsi entweder Apache oder nginx verwendet werden. Ist einer der beiden bereits installiert, so kann dieser Schritt übersprungen werden.

Für die Installation einer der beiden Webserver sei an dieser Stelle auf die jeweiligen Artikel hier im Wiki verwiesen:

Apache 2.4 (Abschnitt „Installation“)

nginx (Abschnitt „Installation“)

Jitsi

Jitsi Meet installieren. Es konfiguriert bei der Installation auch automatisch den jeweiligen Webserver. Bei der Frage nach der Domain muss die Adresse eingegeben werden, unter der die Videokonferenz später aufgerufen werden soll. Abschließend gibt es noch eine Frage nach dem SSL-Zertifikat. Hier einfach mit "OK" bestätigen oder das Zertifikat im Vorfeld selbst erstellen und den Verweis entsprechend eintragen.

apt update
apt install jitsi-meet 

Im folgenden Schritt wird mit dem bereits vorhandenen Skript das Letsencrypt-SSL-Zertifikat erstellt. Hier ist ebenfalls der Domainname einzugeben.

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

Firewall

Sofern eine Firewall eingerichtet wurde, nur die zwingend benötigten Ports erlauben, hier an dem Beispiel von ufw.

ufw allow ssh
ufw allow http
ufw allow https
ufw allow in 10000:20000/udp
ufw allow 4443/tcp
ufw enable 

Darauf achten, dass diese Ports auch eventuell im Router an den Server weiteregegeben werden, sofern der Server zu Hause betrieben wird.

Webserver

Eine funktionierende Konfiguration für nginx ist nachfoglend aufgeführt, wenn Jitsi in einer Subdomain verwendet wird:

server {
	listen 80;
	listen [::]:80;
	listen 4443;
	listen [::]:4443;
	charset utf-8;
	server_name server.name.de;
	# Umleitung direkt auf https
	return 301 https://$server_name$request_uri;
	
	location ^~ /.well-known/acme-challenge/ {
		default_type "text/plain";
		root /usr/share/jitsi-meet;
	}
}

server {
	listen 443 ssl http2;
	listen [::]:443 ssl http2;
	server_name server.name.de;
	ssl_certificate /link/zum/ssl/zertifikat/fullchain.pem;
	ssl_certificate_key /link/zum/ssl/zertifikat/privkey.pem;
	# Entsprechend anpassen, wenn nicht über Certbot
	include /etc/letsencrypt/options-ssl-nginx.conf;
	ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

	ssl_stapling on;
	ssl_stapling_verify on;

	# Use multiple curves
	ssl_ecdh_curve secp521r1:secp384r1;

	# Session handling
	ssl_session_cache shared:SSL:50m;
	ssl_session_tickets off;

	# HSTS (ngx_http_headers_module is required) In order to be recoginzed by SSL test, there must be an index.hmtl in the server's root
	add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload;" always;
	add_header X-Content-Type-Options "nosniff" always;
	add_header X-XSS-Protection "1; mode=block" always;
	add_header X-Robots-Tag none always;
	add_header X-Download-Options noopen always;
	add_header X-Permitted-Cross-Domain-Policies none always;
	add_header Referrer-Policy no-referrer always;
	#add_header X-Frame-Options "SAMEORIGIN" always;

	# Remove X-Powered-By, which is an information leak
	fastcgi_hide_header X-Powered-By;

	# Auf jedne fall anpassen, wenn nicht der Installationsroutine gefoglt wurde
	root /usr/share/jitsi-meet;
	# ssi on with javascript for multidomain variables in config.js
	ssi on;
	ssi_types application/x-javascript application/javascript;
	index index.html index.htm;
	error_page 404 /static/404.html;

	# Hier die der Domain entsprechende Datein hinzufügen
	location = /config.js {
		alias /etc/jitsi/meet/meine.domain-config.js;
	}

	location = /external_api.js {
		alias /usr/share/jitsi-meet/libs/external_api.min.js;
	}

	#ensure all static content can always be found first
	location ~ ^/(libs|css|static|images|fonts|lang|sounds|connection_optimization|.well-known)/(.*)$
	{
		add_header 'Access-Control-Allow-Origin' '*';
		alias /usr/share/jitsi-meet/$1/$2;
	}
	# BOSH
	location = /http-bind {
		proxy_pass      http://localhost:5280/http-bind;
		proxy_set_header X-Forwarded-For $remote_addr;
		proxy_set_header Host $http_host;
	}

	location ~ ^/([^/?&:'"]+)$ {
		try_files $uri @root_path;
	}

	location @root_path {
		rewrite ^/(.*)$ / break;
	}
	# xmpp websockets
	location = /xmpp-websocket {
		proxy_pass http://127.0.0.1:5280/xmpp-websocket?prefix=$prefix&$args;
		proxy_http_version 1.1;
		proxy_set_header Upgrade $http_upgrade;
		proxy_set_header Connection "upgrade";
		proxy_set_header Host $http_host;
		tcp_nodelay on;
	}

#       #Anything that didn't match above, and isn't a real file, assume it's a room name and redirect to /
	location ~ ^/([^/?&:'"]+)/(.*)$ {
		set $subdomain "$1.";
		set $subdir "$1/";
		rewrite ^/([^/?&:'"]+)/(.*)$ /$2;
	}
	# BOSH for subdomains
	location ~ ^/([^/?&:'"]+)/http-bind {
		set $subdomain "$1.";
		set $subdir "$1/";
		set $prefix "$1";

		rewrite ^/(.*)$ /http-bind;
	}
	# websockets for subdomains
	location ~ ^/([^/?&:'"]+)/xmpp-websocket {
		set $subdomain "$1.";
		set $subdir "$1/";
		set $prefix "$1";
		rewrite ^/(.*)$ /xmpp-websocket;
	}

}

In der server-Sektion 80 sind nochmal die Ports 4443 mit drin. Dies ist wichtig, wenn Jitsi in einer gehosteten Umgebung installiert ist, da es vorkommen kann, dass dieser Port nicht alleine durch die Firewall geöffnet werden kann. Durch nginx wird dieser Port dann geöffnet und Jitsi kann vollumfänglich genutzt werden. Mehr zur Syntax in der Konfiguration von nginx findet sich hier: nginx (Abschnitt „Konfiguration-erweitern-Minimalbeispiel“)

Abschluss

Nun sollte der neue Videokonferenzserver unter der eigenen Domain per Internet-Browser erreichbar sein. Die Jitsi Meet APPS für Smartphones sollten ebenso funktionieren.

Automatische Spracherkennung aktivieren. In der Datei /usr/share/jitsi-meet/interface_config.js 'LANG_DETECTION' auf 'true' setzen.

LANG_DETECTION: true, // Allow i18n to detect the system language

meet.jitsi.png

Administration

Hier werden ein paar Sachen zur Administration von Jitsi im Nachgang der Installation erläutert.

Unterhaltungen nur mit Passwort

Der so lauffähgie Jitsi-Server kann im Grunde von jedem verwendet werden, der die Adresse hat. Ist das nicht erwünscht, so lässt sich Jitsi konfigurieren, dass eine Unterhaltung nur mit einem Passwort begonnen werden kann.

Dazu muss in der /etc/prosody/conf.avail/[Domainname].cfg.lua innhalb des VirutalHost-Blocks für die Domain die Zeile mit authentication wie folgt abgewandelt werden:

authentication = "internal_hashed"

Soll es dennoch Gästen erlaubt sein anonyme Chats zu starten, so kann dies durch Hinzufügen des foglenden Blocks erreicht werden:

VirtualHost "guest.[Domainname]"
	authentication = "anonymous"
	c2s_require_encryption = false

Anschließend muss noch die anonymousdomain in der /etc/jitsi/meet/[Domainname]-config.js wie folgt abgeändert werden:

var config = {
   	hosts: {
		domain: '[Domainname]',
		anonymousdomain: 'guest.[Domainname]',
	},
	...
}

Anschließend Jitsi wie unter Dienst beschrieben neu starten.

Natürlich kann anstatt guest auch jede andere Subdomain verwendet werden. Dies sollte nur in den beiden Blöcken identisch sein.

Dienst

Der eingerichtete Jitsi Meet Dienst hat/braucht keine eigenen Administrationswerkzeuge. Er ist sofort, wie im vorhergehende Bild zu sehen, einsatzbereit. Die einzelnen Komponenten kann man wie folgt neu starten. Grundlagen findet man unter Dienste

$ sudo service prosody restart
$ sudo service jicofo restart
$ sudo service jitsi-videobridge2 restart 

Logs

Die Logdatei befindet sich unter: /var/log/jitsi/jicofo.log Grundlagen zur Handhabung findet man unter: Logdateien. Mit folgendem Befehl kann man sich fortlaufend die aktuelle Logdatei anschauen.

$ sudo tail -f /var/log/jitsi/jicofo.log 

Diese Revision wurde am 25. August 2020 23:31 von Fiodin erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Howto