Jitsi Meet Tutorial 29-09-22/13:00

Jitsi Meet Tutorial

Jitsi Meet, der kostenlose Videokonferenz Baukasten. Klingt super, in solch Pandemischen-Zeiten! Nur halt scheisse wenns dann irgendwann einfach aufhört zu funktionieren. Genau diesen Fall hatten wir vor kurzem und nach mehreren Stunden der Fehlersuche war eine Neuinstallation dann doch die sauberste Variante. Gerade auch weil der vServer NUR für Jitsi Meet genutzt wird.

Die Anleitung bezieht sich auf einen virtuellen Server mit Ubuntu 18.04 - ist aber im Grunde bei fast jeder Distro der gleiche Ablauf. Als Webserver kommt der Indianer zum Einsatz, dieser sollte also schon vorhanden sein (gern auch unkonfiguriert) Bevor es aber zur "eigentlich" recht einfachen Installation von Jitsi geht, direkt der Hinweis: Bringt euer System auf einen aktuellen Stand! Bei vielen, wie auch bei mir, wurde eine etwas ältere Jitsi Installation von heute auf Morgen gekillt, weil die letzten System-Updates irgendwas von der Videobridge zerschossen haben - oder mit irgendwelchen System-Libs nicht mehr kompatibel war. Deswegen zeige ich hier eine komplette Neuinstallation auf einem frischem System, inkl. Feintuning und der finalen Absicherung des ganzen Systems.

 Was wir wollen:
- Jitsi Meet, ruckelfrei bis mind. 10 Teilnehmer
- Nur registrierte Benutzer können Meetings starten
- Gäste können jedoch, ohne Login, eingeladen werden und teilnehmen
- Grundsätzlich stabiles System mit einer Minimum Absicherung

 Was wir brauchen:
- Virtuellen oder dedizierten Server
- Mindestens 2GB Ram & Dualcore CPU aus den letzten 5 Jahren
- Apache² oder Nginx als Webserver
- Eine Subdomain mit A-Record die auf unseren Server verweist
- 20 Minuten Zeit...  

Der Einfachheit halber ist diese Anleitung auf vier kleine Kapitel unterteilt. 

 

 Schritt 1/4: System auf einen aktuellen Stand bringen

# Aktuelle Version anzeigen
lsb_release -a

Distributor ID:	Ubuntu
Description:	Ubuntu 18.04.4 LTS
Release:	18.04
Codename:	bionic

# Den letzten Stand einholen
sudo apt update
sudo apt list --upgradable
sudo apt upgrade

# Danach erstmal rebooten - falls noch was installiert wurde
sudo reboot

# Und nach dem Reboot kurz entmüllen ^^
sudo apt --purge autoremove

# Den Update Manager installieren bzw. aktualisieren
sudo apt install update-manager-core

# Und dann direkt das Dist-Upgrade anstoßen
sudo do-release-upgrade

# Nach gefühlten 100 Kaffee sollten dann so etwas dabei raus kommen.
Distributor ID:	Ubuntu
Description:	Ubuntu 20.04 LTS
Release:	20.04
Codename:	focal

 

 Schritt 2/4: System grundlegend absichern (wirklich nur GRUNDLEGEND!)

Root Passwort ändern, neuen Benutzer anlegen und SSH konfigurieren

# Root password ändern
passwd  

# Neuen Benutzer anlegen und Passwort vergeben
adduser NAMEHIER 

# SSH Deamon härten
# /etc/ssh/sshd_config  
nano /etc/ssh/sshd_config  

# Standardport ändern
Port 10101

# Root Login verbieten (deswegen u.a der neue Benutzer)
PermitRootLogin no  

# Nur den neu angelegten Benutzer zulassen
AllowUsers NAMEHIER

# Danach den SSHd neu starten
service ssh restart   

 

Die UFW Firewall installieren

# Paket installieren
apt install ufw  

# Als erstes den Port, welchen wir für SSH gesetzt haben, eintragen
ufw allow 10101  

# Weitere Ports, welche von Jitsi benötigt werden freigeben
ufw allow 80/tcp  
ufw allow 443/tcp  
ufw allow 10000/udp  
ufw allow 3478/udp
ufw allow 5349/tcp

# Nochmal alles überprüfen und UFW dann aktivieren
ufw status verbose
ufw enable  

 

Und wer noch einen draufsetzen möchte kann auch noch Fail2Ban mit ranklatschen, um die Zugriffe und Autobans für die Shell zu aktivieren. 

# Fail2Ban Paket holen ...
apt install fail2ban  


# Originale Config kopieren um diese dann zu bearbeiten
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local  


# Verzeichnis: /etc/fail2ban/
# Datei: jail.local
# Abschnitt kopieren und einfügen/anhängen
 
# SSH SERVER CONFIG START  
[sshd]  
enabled     = true  
port        = 10101 
filter      = sshd  
logpath     = /var/log/auth.log  
maxretry    = 4  
# SSH SERVER CONFIG END

 

 Schritt 3/4: Jitsi Meet installieren

Zum warm werden, direkt erstmal den Hostname setzen...

# Hostname vom System setzen, worüber Jitsi später ansprechbar ist.
hostnamectl set-hostname NAMEHIER.domain.tld  

# Das gleiche in der /etc/hosts
nano /etc/hosts  
127.0.0.1 localhost.localdomain localhost NAMEHIER.domain.tld  

 

Nochmal schauen ob wirklich alles up2date ist und ggf. apt-transport-https nachinstallieren

# Updates holen
apt update
apt upgrade  

# Den HTTPS Transporter noch drauf hauen, falls nicht vorhanden
apt install apt-transport-https  

 

GPG Schlüssel holen und Installation starten

# Jitsi GPG Schlüssel holen ...
curl https://download.jitsi.org/jitsi-key.gpg.key | sudo sh -c 'gpg --dearmor > /usr/share/keyrings/jitsi-keyring.gpg'  

# ... und eintragen
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  

# Nochmal alles einrollen lassen
apt update  

# Jitsi Meet installieren! (endlich ^^)
apt -y install jitsi-meet 

# Manchmal kommt es vor dass die openjdk-8-jdk noch nicht auf dem System vorhanden ist. Diese dann einfach noch mit drauf hauen und den Installer erneut ausführen.

 Wenn der Installer-Dialog startet wird man direkt nach der Domain gefragt, auf welcher Jitsi laufen soll. Hier, logischer Weise, eure eigene Domain eintragen, welche auch in der /etc/hosts steht. Ebenfalls ob man bereits ein SSL Zertifikat hat oder via LetsEncrpyt selbst erstellen möchte. Im Fall dieser Anleitung wird letzteres der Fall sein. 

 

Da von Haus aus schon ein Script für LetsEncrypt mitgeliefert wird, einfach wie folgt ausführen:

# LetsEncrypt Zertifikat erstellen. Das Script erkennt automatisch ob nginx oder Apache2 installiert habt und trägt auch alle nötigen Daten in eure VHOST/Webserver-Config ein.
/usr/share/jitsi-meet/scripts/install-letsencrypt-cert.sh 

# Die Mailadresse, welche im Script angegeben werden muss dient lediglich zur Fehlerbenachrichtigung.
# Hinweis: Falls das Script fehlschlagen sollte, muss CERTBOT noch installiert werden.

Die eigentliche Installation ist hiermit abgeschlossen. Wenn alles geklappt hat solltet ihr unter NAME.domain.tld jetzt ein grundlegendes Jitsi Meet laufen haben blush

 

 Schritt 4/4: Feintung von Jitsi

Damit das System nicht zum Flaschenhals wird, erhöhen wir direkt folgendes: 

# Datei "system.conf" unter "/etc/systemd/"
# Am Ende des Files eintragen oder inline bearbeiten.
DefaultLimitNOFILE=65000    
DefaultLimitNPROC=65000    
DefaultTasksMax=65000

# Daemon neu starten damit Änderungen wirksam werden
systemctl daemon-reload

 

Es sollen nur vordefinierte Benutzer ein Meeting starten können. Alle anderen User (bzw. Gäste) sollen aber jedem gestarteten Meeting betreten können. Dazu muss Prosody noch angepasst und die Domain für Gäste hinzugefügt werden. Keine Sorge, die Gäste-Domain ist nur intern und muss nicht als A-Record angelegt werden. Alle anderen Werte in dieser Datei sollten vom Installer schon gesetzt worden sein. Kann man recht einfach herausfinden wenn überall "NAME.domain.tld" steht.

# Verzeichnis: /etc/prosody/conf.avail/  
# Datei: NAME.domain.tld.cfg.lua

# Authentifizierung von Anonym auf interne Benutzer umstellen.
VirtualHost "NAME.domain.tld"
authentication = "internal_hashed" 

# Und am Ende die Gäste-Domain anfügen:
VirtualHost "guest.NAME.domain.tld"
    authentication = "anonymous"
    c2s_require_encryption = false
    modules_enabled = {
	"bosh";
	"pubsub";
	"turncredentials";
	"muc_lobby_rooms";
    }
    main_muc = "conference.NAME.domain.tld" 

 

Nun bearbeiten wir die eigentliche Config Datei von unserer Meet Instanz und nehmen noch ein paar kleinere Einstellungen vor, die sich teils (abhängig vom System) enorm auf die Perfomance auswirken:

# Verzeichnis: /etc/jitsi/meet/  
# Datei: NAME.domain.tld.-config.js

# Die guest Domain unter "anonymousdomain" hinzufügen.
anonymousdomain: 'guest.NAME.domain.tld', 

# Den AudioLevel Indicator deaktivieren. 
# Keine Ahnung wieso, aber der kleine animierte Pegel verschlingt sehr viel Leistung
disableAudioLevels: true,

# Videoauflösung von 720p auf 480p setzen
# Ehrlich, wer brauch eine 720er HD-Ready Auflösung ?
# Die geringere Auflösung schont den Server UND natürlich auch alle Clients, da viel weniger Bandbreite benötigt wird.

contraints: {
      video: {
       height: {
        ideal: 480,
        max: 480,
        mind: 240
       }
      }
     },


# Die LayerSuspension sorgt dafür dass die gesendeten Auflösungen individuell angepasst werden
# Vorteil davon ist dass nicht permanent ein Client seine hohe Auflösung sendet, wenn diese gar nicht benötigt wird oder gerade jemand anderes spricht. 
# Spart ebenfalls sehr viel Bandbreite
enableLayerSuspension: true;


# Benutzer beim Betreten direkt nach einem Namen fragen
requireDisplayName: true,


# Die Landing Seite anzeigen...
# Ohne diese landen User, beim Aufruf eurer Domain, ansonsten in Random Channels
enableWelcomePage: true;


# UI Einstellungen für das Optische..
defaultLocalDisplayName: 'Ich',
defaultRemoteDisplayName: 'Besucher',
defaultLanguage: 'de',


# Verlauf der Räume deaktivieren
doNotStoreRoom: true,

Natürlich könnte man, wenn man es 100% Datenschutzfreundlich haben will, an diesem Punkt noch die "Analytics" und "3rd Party Tools" (Gravatar etc.) deaktivieren. Ebenso falls die Stun/Turn Server genutzt werden sollen, diese laufen standardmäßig noch über die vorgegebenen Jitsi Server. Da dies aber nur benötigt wird wenn sich der Server hinter einer zugemauerten Verbindung befindet, belassen wir es dabei.

 So und das war es auch schon! Jitsi sollte nun ordnungsgemäß laufen, mit SSL verschlüsselt sein und eine grundlegende Absicherung haben. Nur registrierte Benutzer können ein Meeting starten und Gäste können laufenden Meetings beitreten und werden direkt nach ihrem Namen gefragt. 

Last but not least, hier noch wie man Benutzer hinzufügt, alles neu startet und/oder einen täglich automatisierten Neustart hinzufügt. 

# Benutzer für Jitsi anlegen
prosodyctl register USERNAME NAME.domain.tld PASSWORD

# Um alle Dienste von Jitsi mit einem Befehl neu zu starten folgendes verwenden:
service prosody restart && service jicofo restart && service jitsi-videobridge2 restart && service apache2 restart
# Kann natürlich auch mit (m)einem SSSR-Script verwendet werden


# Cron für täglich Neustart anlegen
# Verzeichnis: /root/
nano jitsi-restart.sh
# Oben genannte Befehlskette eintragen, speichern und ausführbar machen
chmod +x jitsi-restart.sh

# Crontab anlegen
crontab -e

# Folgendes eintragen, für täglichen Neustart um 05:00 Uhr
0 5 * * * /root/jitsi-restart.sh > /dev/null 2>&1

# Crontab anzeigen
crontab -l


cheeky Anmerkung: Die Anleitung ist wirklich so simpel wie möglich gehalten. Es gibt tausende Jitsi Anleitungen im Netz, wobei viele davon schon teilweise komplett OutOfDate sind, da sich in den letzten Versionen dann doch so einiges verändert hat. Für unser Szenario reicht es aber dicke hin um ab und an mal eine Konferenz mit mehreren Teilnehmern zu machen. 



S P A M B O X !