## Diese Warnung ist Bestandteil jedes Howtos und darf nicht entfernt werden. {{{#!vorlage Warnung 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: [https://www.thomas-krenn.com/de/tkmag/allgemein/linux-basierte-root-server-absichern/ Linux-basierte Root-Server absichern]. }}} [[Inhaltsverzeichnis()]] {{{#!vorlage Hinweis Diese Howto-Anleitung wurde zuletzt von [user: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: [https://www.thomas-krenn.com/de/tkmag/allgemein/linux-basierte-root-server-absichern/ Linux-basierte Root-Server absichern]. == Repository anlegen == [[Vorlage(Fremd, Quelle, "")]] Als Root per [:SSH:] auf dem Server einloggen und alle Updates und Upgrades ausführen. Repository hinzufügen updaten. {{{#!vorlage Befehl 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 2.4: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#Installation:] [:nginx#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. {{{#!vorlage Befehl 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. {{{#!vorlage Befehl /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:]. {{{#!vorlage Befehl 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 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#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 }}} [[Bild(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 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:] {{{#!vorlage Befehl $ 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. {{{#!vorlage Befehl $ sudo tail -f /var/log/jitsi/jicofo.log }}} = Links = * [https://www.netways.de/blog/2020/03/27/jitsi-best-practice-und-skalierung/ Jitsi Best Practice und Skalierung] {de} * [https://www.kuketz-blog.de/jitsi-meet-datenschutzfreundlich-ohne-google-stun-server/ Jitsi Meet: Datenschutzfreundlich ohne Google STUN-Server] {de} * [https://jitsi.org Jitsi Projektseite] {en} * [https://meet.jit.si/ Frei zugängliche Jitsi Meet Videokonferenzseite] {en} * [https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-quickstart/ Offizielle Installationsanleitung] {en} * [https://www.howtoforge.de/anleitung/so-erstellen-sie-ihren-eigenen-videokonferenzserver-mit-jitsi-meet-auf-ubuntu-1804-lts/ Ein bebildertes HowTo] {de} * [https://appimage.github.io/jitsi-meet/ Jitsi Meet Linux-Desktop-AppImage] {en} * [tag:Howto:Howto-Liste] {Übersicht} - Übersicht aller Howto-Artikel #tag: Howto