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.
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.
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 jetzt und verweisen auf das Zertifikat von Lets Encrypt.
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 erlauben, 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:
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 in ein anderes Verzeichnis. Als Beispiel verwenden wir hier ein Unterverzeichnis von `/var/www/html`, wo üblicherweise die Daten für den Webserver liegen.
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:
Damit ein eigenes Hintergrundbild angezeigt wird, muss 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.
Für einen eigenen Text auf der Begrüßungsseite, muss die Datei `main-de.json` angepasst werden. Dort ändert man im Schlüssel "welcomepage" die Einträge "appDescription" und "title".
"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.",
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)
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:
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 Desktop App.
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.
Mit dem zusätzlichen Software-Paket `jigasi` ist es möglich, per Telefoneinwahl an einer JItsi Konferenz teilzunehmen. Das kann nützlich sein, wenn gerade kein PC oder Smartphone zur Verfügung steht, oder wenn man an einem PC ohne Mikrofon arbeitet.
Normalerweise kann `jigasi` mit einem beliebigen SIP-Konto verknüpft werden und wäre damit über das Telefonnetz erreichbar. Wir möchten jedoch zusätzlich erreichen, dass
- nach der Telefoneinwahl eine Pin-Nummer abgefragt wird
- mehrere Räume genutzt werden können
Dazu wird unser Jitsi Meet Server mit einem bestehenden [Asterisk-Server](https://www.asterisk.org/) verbunden, auf dem zuerst ein neues internes SIP-Konto angelegt werden muss.
!!! note "Anmerkung"
Die Beschreibung der kompletten Asterisk-Installation ist ein Thema für sich und würde hier zu weit führen. Ausgangspunkt für die hier beschriebene Anpassung ist ein funktionierender Asterisk-Server, der mit einem Sipgate-Basic Account verbunden und damit über das öffentliche Telefonnetz erreichbar ist.
#### Vorbereitungen am Asterisk-Server
In der Datei `/etc/asterisk/sip.conf` werden folgende Einträge hinzugefügt:
```
[2000]
type = friend
context = meine-telefone
secret = sip-passwort
host = dynamic
```
Daraus ergeben sich folgende Zugangsdaten, die später bei der Installation von `jigasi` eingetragen werden müssen:
- SIP Benutzername: 2000@sip.server (wobei "sip.server" natürlich auch die IP-Adresse des Asterisk Servers sein kann)
- SIP Passwort: sip-passwort (selbstverständlich hier nur als Beispiel)
Nun müssen noch die Einwahl-Regeln in die Datei `/etc/asterisk/extensions.conf` eingetragen werden:
```
[von-voip-provider]
; xxxxxx = username vom Sipgate Zugang
; yyy1...yyy8 = Beispiele für Asterisk-Konferenzräume
; zzzz = Beispiel für vordefinierte Jitsi Meet Konferenz
exten => xxxxxx,1,Answer()
same => n,Wait(1)
same => n,Playback(conf-getpin)
same => n,Read(NUMMER,,0,3)
same => n,GotoIf($[ ${NUMMER} = yyy1 ]?telko:)
same => n,GotoIf($[ ${NUMMER} = yyy2 ]?telko:)
same => n,GotoIf($[ ${NUMMER} = yyy3 ]?telko:)
same => n,GotoIf($[ ${NUMMER} = yyy4 ]?telko:)
same => n,GotoIf($[ ${NUMMER} = yyy5 ]?telko:)
same => n,GotoIf($[ ${NUMMER} = yyy6 ]?telko:)
same => n,GotoIf($[ ${NUMMER} = yyy7 ]?telko:)
same => n,GotoIf($[ ${NUMMER} = yyy8 ]?telko:)
same => n,GotoIf($[ ${NUMMER} = zzzz ]?videochat1:)
same => n,GotoIf($[ ${NUMMER} > 99999 ]?videochat2:)
same => n,Hangup
same => 20(telko),ConfBridge(${NUMMER},default_bridge,user_ohne_pw,sample_user_menu)
same => 30(videochat1),SIPAddHeader(Jitsi-Conference-Room:UnserMeeting)
same => 31,Dial(SIP/2000,20)
same => 40(videochat2),SIPAddHeader(Jitsi-Conference-Room:${NUMMER})
same => 41,Dial(SIP/2000,20)
```
Asterisk Konfiguration neu laden:
```
asterisk -rx 'core reload'
```
Bei diesem Beispiel wird bei der Telefoneinwahl als erstes eine Konferenz-Pin-Nummer abgefragt. Die ersten 8 Auswertungen dieser Pin prüfen auf voreingestellte, 4-stellige Nummern, die zu "normalen" Telefonkonferenz-Räumen führen. Dann wird als Beispiel eine 4-stellige Nummer ausgewertet, die zu einem voreingestellten Jitsi Meet Konferenzraum führt `UnserMeeting`. Davon können auch noch mehr angelegt werden. Wenn dann das Meeting mit dem entsprechenden Namen läuft, kann man sich mit der Pin dazu einwählen.
Die letzte Pin-Auswertung prüft auf eine mindestens 6-stellige Zahl und verwendet diese dann dynamisch als Raumname. Hier muss die Jitsi Meet Konferenz mit einer solchen, gültigen Zahl als Name gestartet werden. Der Einladungs-Link enthält dann automatisch auch die Telefoneinwahl-Pin. Mit dieser Variante stehen sehr viele Konferenzräume mit Telefoneinwahl zur Verfügung, die allerdings keine "sprechenden" Namen haben können.
#### Jigasi installieren
Die Installation von `jigasi` ist mit einem Befehl erledigt:
```
apt-get -y install jigasi
```
Während der Installation wird man aufgefordert, die Zugangsdaten für ein SIP-Konto einzugeben. Dabei werden die im Asterisk-Server eingetragenen Daten verwendet.
![SIP Benutzer](bilder/sip-benutzer.jpg)
und noch das Passwort:
![SIP Passwort](bilder/sip-passwort.jpg)
Für Jigasi wird ein neuer Benutzer angelegt (oder es kann auch der bereits vorhandene verwendet werden).
Jetzt sollte es möglich sein, sich über das Telefonnetz in eine laufende Jitsi Meet Konferenz einzuwählen.
!!! info
Nach meinem Kenntnisstand, können sich über eine Sipgate Nummer bis zu 15 Personen einwählen. In unseren unseren normalen Telefonkonferenzen hatten wir bis jetzt immer nur bis zu 8 Teilnehmer.