Erste Version

This commit is contained in:
Bernd Reuther 2020-04-30 21:21:49 +02:00
parent 3d9b8d4402
commit 7f5fa15e9a
12 changed files with 425 additions and 0 deletions

425
README.md
View File

@ -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 <benutzername> konferenz.domain.tld <passwort>
```
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:
```
<style>
.welcome-page-content {
display: flex;
flex-direction: column;
flex-grow: 1;
justify-content: space-between;
position: relative;
z-index: 1;
margin-top: 35px;
width: 100%
}
.welcome-page-content .welcome-footer {
color: #FFF;
display: flex;
padding-bottom: 20px;
padding-top: 20px;
width: 100%;
z-index: 1
}
.welcome-page-content .welcome-footer-content a {
color: #fff !important;
text-decoration: underline
}
.welcome-page-content .welcome-footer-content {
display: flex;
justify-content: center;
width: 100%;
z-index: 2
}
.welcome-page-content .welcome-footer-about {
display: flex;
flex-direction: column;
flex: 1;
font-size: 14px;
line-height: 20px;
text-align: center;
justify-content: center
}
.welcome-page-content .welcome-footer-about:last-child {
margin-left: 4px
}
</style>
```
Der Inhalt der Datei `welcomePageAdditionalContent.html` wird mit den folgenden Zeilen ersetzt:
```
<template id = "welcome-page-additional-content-template">
<div class="welcome-page-content">
<div class="welcome-footer">
<div class="welcome-footer-content">
<div class="welcome-footer-about">
<div>
<a href="https://jitsi.org/jitsi-meet/" rel="noopener" target="_blank">Powered by Jitsi Meet</a> | <a href="/impressum.html" rel="noopener" target="_blank">Impressum</a> | <a href="/datenschutz.html" rel="noopener" target="_blank">Datenschutzerklärung</a>
</div>
</div>
</div>
</div>
</div>
</template>
```
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"
<Location /interface_config.js">
Require all granted
</Location>
Alias "/plugin.head.html" "/var/www/html/jitsi-custom/plugin.head.html"
<Location /plugin.head.html">
Require all granted
</Location>
Alias "/static/welcomePageAdditionalContent.html" "/var/www/html/jitsi-custom/welcomePageAdditionalContent.html"
<Location /static/welcomePageAdditionalContent.html">
Require all granted
</Location>
Alias "/lang/main-de.json" "/var/www/html/jitsi-custom/main-de.json"
<Location /lang/main-de.json">
Require all granted
</Location>
Alias "/css/all.css" "/var/www/html/jitsi-custom/all.css"
<Location /css/all.css">
Require all granted
</Location>
Alias "/images/watermark.png" "/var/www/html/jitsi-custom/logo.png"
<Location /images/watermark.png">
Require all granted
</Location>
Alias "/hg.jpg" "/var/www/html/jitsi-custom/hg.jpg"
<Location /hg.jpg">
Require all granted
</Location>
Alias "/impressum.html" "/var/www/html/jitsi-custom/impressum.html"
<Location /impressum.html">
Require all granted
</Location>
Alias "/datenschutz.html" "/var/www/html/jitsi-custom/datenschutz.html"
<Location /datenschutz.html">
Require all granted
</Location>
```
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

BIN
bilder/install-domain.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

BIN
bilder/web-cache-leeren.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

BIN
bilder/web-layout-neu.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

BIN
bilder/web-meeting.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

BIN
bilder/web-organisator.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
bilder/web-passwort.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

BIN
bilder/web-start.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB