diff --git a/README.md b/README.md index 95edd30..5882e83 100644 --- a/README.md +++ b/README.md @@ -5,10 +5,23 @@ - Ubuntu 18.04 Server - Apache Webserver - Domain, unter der Jitsi Meet erreichbar sein soll: `konferenz.domain.tld` +- LetsEncrypt Zertifikat für die verwendete Domain !!! warning "Achtung" Wenn unter `/etc/apache2/sites-available/` schon eine Datei `konferenz.domain.tld.conf` existiert, vorher sichern bzw. umbenennen, sonst scheitert die automatische Konfiguration der Installationsroutine. +## Ziel + +- Jitsi Meet Videokonferenzen auf dem eigenen Server +- angepasstes Layout mit eigenem Logo, Bergüßungstext und Hintergrundbild +- Verweise auf Datenschutzerklärung und Impressum +- gemeinsames Arbeiten an Etherpad Dokumenten +- telefonische Einwahl +- datenschutzfreundliche, möglichst Resourcen schonende Installation + +!!! info + Die Änderungen in den verschiedenen Konfigurationsdateien sind in dieser Dokumentation bewusst nicht pro Datei zusammengefasst, sondern nach Sinn und Ziel getrennt. Dadurch soll erreicht werden, dass man deren Bedeutung und Auswirkung besser nachvollziehen kann. + ## Installation Wie auf der [Github Seite von Jitsi Meet](https://github.com/jitsi/jitsi-meet/blob/master/doc/quick-install.md) beschrieben. @@ -29,3 +42,415 @@ apt-get update apt-get -y install jitsi-meet ``` +Während der Installation erscheinen zwei Eingabefenster. Im Ersten wird der Domainname angegeben, unter der Jitsi Meet erreichbar sein soll. + +![Domain](bilder/install-domain.jpg) + +Im zweiten Fenster kann man auswählen, ob während der Installation ein selbst signiertes Zertifikat angelegt werden soll, oder ob man später selbst ein Zertifikat eintragen möchte. Obwohl wir später ein LetsEncrypt Zertifikat verwenden wollen, wird hier die erste Option gewählt. Dadurch kann man vor der weiteren Konfiguration schon einmal testen, ob Jitsi Meet richtig funktioniert. + +![Zertifikat](bilder/install-zertifikat.jpg) + +Wenn die Installationsroutine durchgelaufen ist, sollte es schon möglich sein, Jitsi Meet auf dem eigenen Server unter `https://konferenz.domain.tld` zu testen (natürlich mit der üblichen Sicherheitswarnung bei eigenen Zertifikaten). + +![erster Start](bilder/web-start.jpg) + +## Konfiguration anpassen + +### LetsEncrypt Zertifikate verwenden + +Für eine sichere Verbindung wird ein Zertifikat verwendet, die sich sehr einfach von [Lets Encrypt](https://letsencrypt.org/) ausstellen lässt. Hier wird davon ausgegangen, dass dieses Zertifikat für die Domain `konferenz.domain.tld` bereits vorhanden ist. + +Bei der Installation von Jitsi Meet wurde ein selbst signiertes Zertifikat erstellt und in der Apache Konfigurationsdatei eingetragen. Diesen Eintrag ersetzen wir jetz und verweisen auf das Zertifikat von Lets Encrypt. + +Dazu eird die Datei `/etc/apache2/sites-available/konferenz.domain.tld.conf` geändert: + +``` + SSLCertificateFile /etc/jitsi/meet/konferenz.domain.tld.crt + SSLCertificateKeyFile /etc/jitsi/meet/konferenz.domain.tld.key +``` + +ersetzen durch: + +``` + SSLCertificateFile /etc/letsencrypt/live/konferenz.domain.tld/fullchain.pem + SSLCertificateKeyFile /etc/letsencrypt/live/konferenz.domain.tld/privkey.pem +``` + +Konfiguration neu laden + +``` +service apache2 reload +``` + +### Jitsi Meet vor unbefugter Benutzung schützen + +Nach der Standard-Installation von Jitsi Meet kann jeder, der die Web-Adresse kennt, ein Meeting starten und Gäste einladen. Das bringt den eigenen Server (und die erlaubte Bandbreite) möglicherweise schnell an die Grenze und ist daher nicht ratsam. Eine sinnvolle Einstellung ist, das Erstellen von Meetings nur für registrierte Benutzter zu erlaben, während Gäste ohne Anmeldung zu den Meetings eingeladen werden können. + +In der Datei `/etc/prosody/conf.avail/konferenz.domain.tld.cfg.lua` folgende Änderungen vornehmen: + +``` +VirtualHost "konferenz.domain.tld" + -- enabled = false -- Remove this line to enable this host + authentication = "anonymous" +``` + +ändern in: + +``` +VirtualHost "konferenz.domain.tld" + -- enabled = false -- Remove this line to enable this host + authentication = "internal_plain" +``` + +Damit können schon einmal keine neuen Konferenzen von nicht registrierten Benutzern angelegt werden. Allerdings müssten sich nun auch Gäste anmelden, um an einer Konferenz teilzunehmen. Daher wird am Ende der Datei noch ein `VirtualHost "guest...` ohne Authentification eingefügt: + +``` +VirtualHost "guest.konferenz.domain.tld" + authentication = "anonymous" + c2s_require_encryption = false + modules_enabled = { + "ping"; -- Enable mod_ping + "speakerstats"; + "turncredentials"; + "conference_duration"; + } +``` +Diese neue interne "Gast"-Domain muss jetzt noch in die Datei `/etc/jitsi/meet/konferenz.domain.tld-config.js` eingetragen, bzw. auskommentiert und angepasst werden: + +``` +var config = { + // Connection + // + + hosts: { + // XMPP domain. + domain: 'konferenz.domain.tld', + + // When using authentication, domain for guest users. + // anonymousdomain: 'guest.exemple.com', +``` + +ändern in: + +``` +var config = { + // Connection + // + + hosts: { + // XMPP domain. + domain: 'konferenz.domain.tld', + + // When using authentication, domain for guest users. + anonymousdomain: 'guest.konferenz.domain.tld', +``` + +In der Datei `/etc/jitsi/jicofo/sip-communicator.properties` wird folgender Eintrag eingefügt: + +``` +org.jitsi.jicofo.auth.URL=XMPP:konferenz.domain.tld +``` + +Jetzt wird ein Benutzer mit dem folgenden Befehl angelegt: + +``` +prosodyctl register konferenz.domain.tld +``` + +Und noch die entsprechenden Dienste neu starten: + +``` +systemctl restart jitsi-videobridge2 jicofo prosody +``` + +Wenn man jetzt ein neues Meeting startet, kommt ein Hiweis, dass man sich als "Organisator" anmelden muß: + +![Meeting Organisator](bilder/web-organisator.jpg) + +Mit den im vorherigen Schritt erstellten Benutzerdaten kann man sich jetzt anmelden: + +![Meeting Login](bilder/web-passwort.jpg) + +...und das Meeting starten: + +![Meeting Login](bilder/web-meeting.jpg) + +Solange das Meeting aktiv ist, können Gäste, die den Link kennen, ohne Anmeldung teilnehmen. + +### Design anpassen + +Wir möchten jetzt noch das Design des selbst gehosteten Jitsi Meet Servers anpassen, das eigene Logo einfügen und Impressum sowie Datenschutzerklärung in der Fußzeile anzeigen. + +Damit die dafür zu ändernden Dateien nicht mit dem nächsten Update überschrieben werden, kopieren wir sie zunächst inein anderes Verzeichnis. Als Beispiel verwenden wir hier ein Unterverzeichnis von `/var/www/html`, wo üblicherweise die Daten für den Webserver liegen. + +``` +mkdir /var/www/html/jitsi-custom +``` +``` +cp /usr/share/jitsi-meet/interface_config.js /var/www/html/jitsi-custom/interface_config.js +``` +``` +cp /usr/share/jitsi-meet/plugin.head.html /var/www/html/jitsi-custom/plugin.head.html +``` +``` +cp /usr/share/jitsi-meet/static/welcomePageAdditionalContent.html /var/www/html/jitsi-custom/welcomePageAdditionalContent.html +``` +``` +cp /usr/share/jitsi-meet/css/all.css /var/www/html/jitsi-custom/all.css +``` +``` +cp /usr/share/jitsi-meet/lang/main-de.json /var/www/html/jitsi-custom/main-de.json +``` + +Dort platzieren wir auch noch die Dateien für Impressum, Datenschutzerklärung, Logo und Hintergrundbild + +``` +/var/www/html/impressum.html +/var/www/html/datenschutz.html +/var/www/html/logo.jpg +/var/www/html/hg.jpg +``` + +In der Datei `interface_config.js` ändern wir den Seitentitel und den Link für das Logo: + +``` +var interfaceConfig = { + ... + JITSI_WATERMARK_LINK: 'http://eigene.webseite', + ... + APP_NAME: 'Unser Meeting', + ... +``` + +Bei Bedarf können in dieser Datei auch noch andere Änderungen vorgenommen werden. Mike Kuketz beschreibt [in seinem Blog](https://www.kuketz-blog.de/jitsi-meet-server-einstellungen-fuer-einen-datenschutzfreundlichen-betrieb/) zum Beispiel, wie man den Link zum Download der Android-App vom Google PlayStore zum [F-Droid-Store](https://f-droid.org/en/packages/org.jitsi.meet/) umleitet. + +Die Datei `plugin.head.html` ist standardmäßig leer und bekommt folgenden Inhalt: + +``` + +``` + +Der Inhalt der Datei `welcomePageAdditionalContent.html` wird mit den folgenden Zeilen ersetzt: + +``` + +``` + +Damit ein eigenes Hintergrundbild angezeigt wird, muß die Datei `all.css` geändert werden. Leider liegt diese Datei nur "[minifiziert](https://wiki.selfhtml.org/wiki/Minify)" vor und ist damit schwer lesbar. Für geringfügige Änderungen reicht es aus, wenn man im Texteditor nach der entsprechenden Stelle sucht. Es gibt aber auch Tools und Webdienste, die minifizierte css-Dateien wieder in ein lesbares Format umwandeln. + +Der zu suchende Eintrag lautet: + +``` +.welcome{background-image:linear-gradient(-90deg,#1251AE 0,#0074FF 50%,#1251AE 100%); +``` + +und wird ersetzt durch: + +``` +.welcome{background-image:url(../hg.jpg);background-size:cover; +``` +Für einen eigenen Text auf der Begrüßungsseite, muß die Datei `main-de.json` angepasst werden. Dort ändert man im Schlüssel "welcomepage" die Einträge "appDescription" und "title". + +``` +"welcomepage": { + ..., + "appDescription": "Hier kann auch ein eigener Text stehen. Die benutzerdefinierten Texte aus der geänderten Datei 'main-de.json' werden natürlich nur angezeigt, wenn die Sprache des Browsers auf deutsch eingestellt ist. Für andere Sprachen müssten die dafür vorgesehenen Dateien geändert werden.", + ..., + "title": "Unser eigener Jitsi Meet Server" + }, + +``` + +Der Apache Webserver muß jetzt so konfiguriert werden, dass er diese Dateien aus einem anderen Verzeichnis ausliefert. + +Dazu wird wieder die Datei `/etc/apache2/sites-available/konferenz.domain.tld.conf` geändert bzw. um folgende Einträge ergänzt: + +``` +Alias "/interface_config.js" "/var/www/html/jitsi-custom/interface_config.js" + + Require all granted + + +Alias "/plugin.head.html" "/var/www/html/jitsi-custom/plugin.head.html" + + Require all granted + + +Alias "/static/welcomePageAdditionalContent.html" "/var/www/html/jitsi-custom/welcomePageAdditionalContent.html" + + Require all granted + + +Alias "/lang/main-de.json" "/var/www/html/jitsi-custom/main-de.json" + + Require all granted + + +Alias "/css/all.css" "/var/www/html/jitsi-custom/all.css" + + Require all granted + + +Alias "/images/watermark.png" "/var/www/html/jitsi-custom/logo.png" + + Require all granted + + +Alias "/hg.jpg" "/var/www/html/jitsi-custom/hg.jpg" + + Require all granted + + +Alias "/impressum.html" "/var/www/html/jitsi-custom/impressum.html" + + Require all granted + + +Alias "/datenschutz.html" "/var/www/html/jitsi-custom/datenschutz.html" + + Require all granted + +``` +Nachdem die Konfiguration des Webservers neu geladen wurde: + +``` +service apache2 reload +``` + +wird Jitsi Meet min dem geänderten Layout angezeigt: + +![neues Layout](bilder/web-layout-neu.jpg) + +!!! info (Hinweis) + Wenn die Seite schon vor den Änderungen im Browser geöffnet wurde, kann es sein, dass nicht alle Änderungen angezeigt werden, da sich die Inhalte noch im Browser-Cache befinden. Selbst das Drücken von "F5" funktioniert dann nicht. Erst wenn der Cache für diese Seite gelöscht wird, sieht man alle Änderungen. + +![Cache leeren](bilder/web-cache-leeren.jpg) + +### Sonstige sinnvolle Einstellungen + +In der Datei `/etc/jitsi/meet/konferenz.domain.tld-config.js` werden noch folgende Änderungen vorgenommen, indem die entsprechenden Einträge auskommentiert bzw. geändert werden: + +``` +// Sprache einstellen +defaultLanguage: 'de', + +// verringert die CPU-Last auf den Client-Geräten +disableAudioLevels: true, + +// nur für die letzten 6 aktiven Sprecher wird das Video angezeigt +channelLastN: 6, + +// Verbindung zu anderen Anbietern verhindern (z.B.: Gravatar) +disableThirdPartyRequests: true, + +// Performnce Verbesserung, wenn Chrome Client(ab V69) verwendet wird +enableLayerSuspension: true, +``` + +Dienste neu starten: + +``` +systemctl restart jitsi-videobridge2 jicofo prosody +``` + +## Zusätzliche Funktionen + +### Etherpad einbinden + +Jitsi Meet bietet die Möglichkeit, während einer Konferenz gemeinsam an einem Textdokument zu arbeiten. Dazu ist eine Etherpad-Installation nötig, die über die Konfigurationsdatei `/etc/jitsi/meet/konferenz.domain.tld-config.js` eingebunden wird: + +``` +etherpad_base: 'https://pfad.zu.etherpad/p/', +``` + +Dienste neu starten: + +``` +systemctl restart jitsi-videobridge2 jicofo prosody +``` + +Jetzt sollte es möglich sein, in einer Konferenz ein Etherpad-Dokument zu öffnen: + +![Dokument anzeigen](bilder/web-dokument-anzeigen.jpg) + +und gemeinsam zu bearbeiten: + +![Dokument anzeigen](bilder/web-dokument-offen.jpg) + +!!! warning (Achtung!) + Bei aktuellen LetsEncrypt Installationen wird unter Umständen eine Apache-Konfigurationsdatei erstellt und aktiviert, die den Browser anweist, keine externen Quellen zu laden. Das ist prinzipiell gut und nützlich, verhindert aber in diesem Fall, dass Etherpad in Jitsi Meet geladen wird. Außerdem verhindert diese Einstellung die Benutzung dieses Servers mit der Jitsi Meet Dasktop App. + +![Dokument Fehler](bilder/web-dokument-fehler.jpg) + +In diesem Fall muss in der Datei `/etc/apache2/conf-enabled/ssl-params.conf ` der Eintrag `Header always set X-Frame-Options DENY` auskommentiert werden. + +### Telefoneinwahl + +kommt noch... + +## Quellen + +Die Informationen in dieser Dokumentation stammen unter Anderm aus den folgenden Internetseiten: + +- https://github.com/jitsi/jitsi-meet/blob/master/doc/quick-install.md +- https://github.com/jitsi/jitsi-videobridge/blob/master/doc/last-n.md +- https://www.kuketz-blog.de/jitsi-meet-server-einstellungen-fuer-einen-datenschutzfreundlichen-betrieb/ +- https://www.kuketz-blog.de/jitsi-meet-optimierung-der-performance/ +- https://www.digitalocean.com/community/tutorials/how-to-install-jitsi-meet-on-ubuntu-18-04 +- https://dev.to/noandrea/self-hosted-jitsi-server-with-authentication-ie7 diff --git a/bilder/install-domain.jpg b/bilder/install-domain.jpg new file mode 100644 index 0000000..b7ca200 Binary files /dev/null and b/bilder/install-domain.jpg differ diff --git a/bilder/install-zertifikat.jpg b/bilder/install-zertifikat.jpg new file mode 100644 index 0000000..e3d4895 Binary files /dev/null and b/bilder/install-zertifikat.jpg differ diff --git a/bilder/web-cache-leeren.jpg b/bilder/web-cache-leeren.jpg new file mode 100644 index 0000000..928b39f Binary files /dev/null and b/bilder/web-cache-leeren.jpg differ diff --git a/bilder/web-dokument-anzeigen.jpg b/bilder/web-dokument-anzeigen.jpg new file mode 100644 index 0000000..7c87c60 Binary files /dev/null and b/bilder/web-dokument-anzeigen.jpg differ diff --git a/bilder/web-dokument-fehler.jpg b/bilder/web-dokument-fehler.jpg new file mode 100644 index 0000000..7ed35c8 Binary files /dev/null and b/bilder/web-dokument-fehler.jpg differ diff --git a/bilder/web-dokument-offen.jpg b/bilder/web-dokument-offen.jpg new file mode 100644 index 0000000..90510ec Binary files /dev/null and b/bilder/web-dokument-offen.jpg differ diff --git a/bilder/web-layout-neu.jpg b/bilder/web-layout-neu.jpg new file mode 100644 index 0000000..e1f312b Binary files /dev/null and b/bilder/web-layout-neu.jpg differ diff --git a/bilder/web-meeting.jpg b/bilder/web-meeting.jpg new file mode 100644 index 0000000..8168e71 Binary files /dev/null and b/bilder/web-meeting.jpg differ diff --git a/bilder/web-organisator.jpg b/bilder/web-organisator.jpg new file mode 100644 index 0000000..9e85332 Binary files /dev/null and b/bilder/web-organisator.jpg differ diff --git a/bilder/web-passwort.jpg b/bilder/web-passwort.jpg new file mode 100644 index 0000000..e5a7536 Binary files /dev/null and b/bilder/web-passwort.jpg differ diff --git a/bilder/web-start.jpg b/bilder/web-start.jpg new file mode 100644 index 0000000..776943e Binary files /dev/null and b/bilder/web-start.jpg differ