jitsi at home

Installation eines jitsi Server

Stand: 18.06.2024

Jitsi ist eine Reihe von Open-Source-Projekten, die es Ihnen ermöglichen, ein sicheres Videokonferenzsystem für Ihr Team aufzubauen.
In diesem Tutorial zeige ich Ihnen, wie man jitsi als virtuelle Maschine installiert und einen Internetzugang zur Verfügung stellt. So kann man bequem jitsi zu Hause testen. Sie können mit dieser Anleitung aber auch einen "richtigen" jitsi Server installieren. Ignorieren Sie dann die Kapitel zu VirtualBox und DynDNS.

1 Voraussetzungen


2 DynDNS

Jitsi benötigt eine Domain - eine Adresse im Internet - um zu funktionieren, also z. B. www.beispieldomain.de. Da nicht jeder über eine feste IP-Adresse und eine Domain verfügt, verwenden wir in unserem Beispiel eine dynamische Domain (DynDNS).
Es gibt Anbieter, von denen man kostenlos eine Subdomain erhält. In unserem Beispiel verwenden wir eine Subdomain von www.selfhost.de. Diese Subdomain hat dann den Namen EIGENERNAME.selfhost.co. Im Router aktivieren wir dann DynDNS, geben die Zugangsdaten unserer Subdomain ein und leiten die Verbindung an unseren jitsi-Server weiter. Dann ist unser jitsi-Server über das Internet erreichbar. In unserem Beispiel heißt die Subdomain: vmfree.selfhost.co.
Also überall wo vmfree.selfhost.co vorkommt, bitte durch den eigenen Domainnamen ersetzen.


2.1 DynDNS im Router aktivieren

Damit man über das Internet auf den jitsi-Server zugreifen kann, muss im Router DynDNS aktiviert werden. Hier die Konfiguration für die FRITZ!Box: hostname
Der FRITZ!Box mitteilen, welcher Server mit DynDNS verbunden werden soll und welche Ports freizugeben sind. Es müssen die Ports freigegeben werden, die der jitsi-Server benötigt. Siehe Kapitel Firewall.
: hostname


3 Installation Ubuntu 24.04 Server


3.1 Statische IP-Adresse

Entweder man konfiguriert den Ubuntu Server so, dass dieser eine feste IP-Adresse hat, oder man stellt den DHCP-Server im Router so ein, dass er dem Server immer die gleiche IP-Adresse zuteilt. Dies ist wichtig, da wir den Server im Router mittels DynDNS verbinden müssen.
Um dem Ubuntu-Server eine feste IP-Adresse zu geben, muss die Netzwerkkonfigurationsdatei im Ordner

/etc/netplan
geändert werden. In diesem Beispiel heißt die Datei
01-netcfg.yaml
Hier die Änderungen:

    network:
        version: 2
        renderer: networkd
        ethernets:
            enp0s3:
                dhcp4: no
                addresses: [192.168.0.51/24]
                gateway4: 192.168.0.10
                nameservers:
                    addresses: [8.8.8.8]

Hier wird der Netzwerkkarte enp0s3 die IP-Adresse 192.168.0.51 zugewiesen. Der Router hat die IP-Adresse 192.168.0.10. Es wird der Nameserver von Google verwendet 8.8.8.8.
Mit

sudo netplan apply
werden die Änderungen aktiviert.


3.2 Konfiguration Firewall

Firewall installieren:

    sudo apt install ufw
Ports für jitsi meet öffnen:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 4443/tcp
sudo ufw allow 10000/udp

Ports prüfen:

sudo ufw status

Verwendet man als Zugang DynDNS mit einer Fritz!Box, so ist die Firewall nicht notwendig. Man gibt dann in der Fritz!Box die benötigten Ports frei.


3.3 Logins verhindern mit fail2ban

fail2ban analysiert fehlgeschlagene Loginversuche und sperrt diese. Installation fail2ban:

sudo apt install fail2ban
Konfiguration:
  1. Kopie der Konfigurationsdatei erstellen:
    cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
  2. Im Abschnitt [sshd] der Datei jail.local hinzufügen:
    enabled = true  
    filter  = sshd
    maxretry = 3
  3. fail2ban neu starten:
    systemctl restart fail2ban


Jetzt gibt es zwei Möglichkeiten: Jitsi mittels Installationsskript installieren (Kapitel 4 Installationsskript) oder jitsi manuell installieren. Dann lesen Sie ab Kapitel Manuelle Installation weiter.


4 Installationsskript

Mit diesem Skript erfolgt die Installation automatisch und es werden auch die Anpassungen vorgenommen. Als Zertifikat wird dabei letsencrypt verwendet. Das Skript kann hier heruntergeladen werden.

4.1 Konfigurationsdatei

Die Konfigurationsdatei enthält alle notwendigen Informationen zur Anpassung von jitsi. Die Datei hat die Syntax

PARAMETER=Wert
Passen Sie die Werte entsprechend an.
Parameter sind:
Hier ein Beispiel:
HOST=vmfree.selfhost.co
MAIL=info@vmfree.org
ADMINISTRATOR=administrator
PASSWD=AdminPassword
TITLE=Test Videokonferenz 
SUBTITLE=mit Jitsi
URL=https://www.vmfree.org
URLTITLE=Example
URLDATENSCHUTZ=https://vmfree.selfhost.co/datenschutzerklaerung/
URLDATENSCHUTZTITLE=Datenschutz
URLIMPRESSUM=https://vmfree.selfhost.co/impressum/
URLIMPRESSUMTITLE=Impressum

4.2 Skript ausführen

Das Skript muss mit root-Rechten ausgeführt werden und es muss die Konfigurationsdatei mitgegeben werden:

sudo sh install.sh Konfigurationsdatei
Während der Installation, wird nochmals der Hostname abgefragt und die Art des Zertifikats. Geben Sie als Hostname den Fully Quallified Domain Name (FQDN) an, wie in der Konfigurationdatei mit dem Parameter HOST angegeben. Wählen Sie bei der Abfrage des Zertifikats den ersten Eintrag: "Generate a new self-signed certificate". Siehe auch Kapitel Installation jitsi-Server.
Nach der Installation können Sie jitsi testen.


Manuelle Installation

1 Konfiguration Ubuntu 24.04 Server

Nach der Installation diese Anpassungen vornehmen (die Änderungen müssen mit sudo oder Benutzer root durchgeführt werden):

  1. Eine feste (static) IP-Adresse verwenden. In unserem Beispiel 192.168.0.51.
  2. Hostname auf Domain name ändern:
    hostnamectl set-hostname vmfree.selfhost.co
  3. Datei
    /etc/hosts
    ändern von:
    127.0.0.1 localhost
    nach:
    127.0.0.1 localhost	vmfree.selfhost.co
  4. Es wird das universe Repository benötigt:
    apt install software-properties-common  
    apt-add-repository universe
  5. Zugriff auf Pakete mit HTTPS
    apt install apt-transport-https


2 Installation jitsi-Server

Jetzt kann jitsi installiert werden. Als Erstes werden die Software-Quellen von Jitsi Meet mit den nachfolgenden beiden Zeilen hinzugefügt und die Paketquelle aktualisiert:

sudo curl https://download.jitsi.org/jitsi-key.gpg.key | sh -c 'gpg --dearmor > /usr/share/keyrings/jitsi-keyring.gpg'
sudo echo 'deb [signed-by=/usr/share/keyrings/jitsi-keyring.gpg] https://download.jitsi.org stable/' | tee /etc/apt/sources.list.d/jitsi-stable.list > /dev/null  
sudo apt update

Installation jitsi-Server:

sudo apt install jitsi-meet
  • Während der Installation wird nach dem Hostname gefragt. Eingabe ist vmfree.selfhost.co:
    hostname
  • Danach erfolgt die Abfrage, welche Art von Zertifikat genutzt werden soll. Für ein Zeritifkat von letsecnrypt wählen Sie "Generate a new self-signed certificate" aus. Möchten Sie ein eigenes Zertifikat verwenden, muss "I wont to use my own certificate" ausgewählt werden. Siehe dazu auch das Kapitel Zertifikate:
    hostname
  • Die weiteren Abfragen ohne Änderungen übernehmen.

  • 3 Zertifikate

    jitsi benötigt ein TLS-Zertifikat. Für unsere Installation verwenden wir ein kostenloses Zertifikat von letsencrypt. Das haben wir auch in der Installation bereits angegeben.

    3.1 Zertifikat mit letsencrypt erstellen

    Installation Zertifikatserstellung mit letsencrypt:

    sudo apt install certbot
    Zertifikat erstellen:
    sudo /usr/share/jitsi-meet/scripts/install-letsencrypt-cert.sh

    Beim Start des Skripts, werden Sie nach einer Emailadresse gefragt. letsencrypt informiert sie dann per email, wenn das Zertifikat abläuft:

    hostname

    Zertifikate von letsencrypt haben eine Gültigkeit von 90 Tagen. Danach müssen sie erneuert werden. Um ein Zertifikat zu erneuern können Sie dieses Programm ausführen:

    certbot renew

    Sie können periodisch ausführen lassen. Erstellen Sie dazu eine crontab-Datei mit dem Namen

    renew
    und diesem Inhalt:
    00 23 * * * cerbot renew
    Machen Sie die Datei cron bekannt:
    crontab renew
    Damit wird jeden Tag um 23 Uhr ein neues Zertifikat erstellt, wenn das bisherige Zertifikat abgelaufen ist. Nachdem das Zertifikat erstellt wurde, kann der Port 80 in der Firewall bzw. im Router wieder geschlossen werden. Port 80 in der Firewall "ufw" schliessen:
    sudo ufw delete allow 80/tcp

    3.2 Eigenes Zertifikat erstellen

    Eigenes Zertifikat erstellen:

    sudo openssl req -x509 -nodes -days 1095 -newkey rsa:2048 -keyout /etc/ssl/vmfree.selfhost.co.key -out /etc/ssl/vmfree.selfhost.co.crt
    Dieses Zertifikat hat eine Gültigkeit von 3 Jahren (-days 1095).


    4 Jitsi neu starten

    Entweder man startet den Server neu (mit reboot), oder man startet die jitsi-Prozesse neu:

    sudo systemctl reload nginx
    sudo systemctl restart prosody.service
    sudo systemctl restart jicofo.service
    sudo systemctl restart jitsi-videobridge2.service


    Zugang testen

    1. Browser starten
    2. URL: https://vmfree.selfhost.co
    3. Dann sollte diese Seite angezeigt werden:
      hostname
      Durch Eingabe eines Namens und Anklicken von "Start meeting" wird ein neues Meeting gestartet.


    Weitere Einstellungen

    1 Logging Level ändern

    Standardmäßig wird bei jitsi alles mitprotokolliert, z. B. auch die IP Adressen der Teilnehmer. Um dies abzuschalten, muss der Logging Level von INFO auf WARNING geändert werden. Dazu die Datei

    /etc/jitsi/videobridge/logging.properties
    ändern von:
    .level=INFO
    nach
    .level=WARNING
    Man sollte auch das Logging des Webservers (nginx) abschalten. Dazu die Datei
    /etc/nginx/nginx.conf
    ändern von:
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
    nach
    access_log off;
    error_log off;
    Danach jitsi neu starten.


    Keine Informationen zur Videokonfernz speichern. Jitsi speichert im Browser des Benutzers die ID, den Benutzernamen und die Einstellungen. Dadurch kann die Seite neu geladen werden und man kann direkt wieder am Meeting teilnehmen. Um dies zu verhinern musss die Datei
    /etc/jitsi/meet/vmfree.selfhost.co-config.js
    von:
    // doNotStoreRoom: true,
    nach:
    doNotStoreRoom: true,
    geändert werden.

    2 STUN Server

    Ein STUN-Server ermöglicht es einem Rechner hinter einer Firewall trotzdem eine Verbindung aufzubauen. Mit dem TURN-Protokoll können Teilnehmer Daten austauschen, auch wenn keine direkte Verbindung besteht. Der Server ist dabei eine Zwischenstation. Das Paket jitsi-meet-turnserver wird mit jitsi meet installiert. Es muss aber noch die entsprechenden Ports in der Firewall freigegeben werden:

    sudo ufw allow 3478/udp  
    sudo ufw allow 5349/tcp

    3 Erlaubte Benutzer

    Damit nicht jeder eine Sitzung in jitsi anlegen darf, kann man Benutzer anlegen. Nur diese Benutzer haben dann das entsprechende Recht.

    1. Datei
      etc/prosody/conf.avail/vmfree.selfhost.co.cfg.lua
      ändern von:
      authentication = "anonymous"
      und
      authentication = "jitsi-anonymous"
      nach:
      authentication = "internal_hashed"
    2. Datei
      etc/prosody/prosody.cfg.lua
      ändern von:
      allow_registration = false
      nach:
      allow_registration = true
    3. Datei
      etc/prosody/conf.avail/vmfree.selfhost.co.cfg.lua
      um diesen Text ergänzen:
      	VirtualHost "guest.vmfree.selfhost.co"
      	    authentication = "anonymous"
      	    c2s_require_encryption = false
    4. Datei
      /etc/jitsi/meet/vmfree.selfhost.co-config.js
      ändern von:
      // anonymousdomain: 'guest.example.com',
      nach:
      anonymousdomain: 'guest.vmfree.selfhost.co',
    5. In Datei
      /etc/jitsi/jicofo/jicofo.conf
      vor der letzten Zeile einfügen:
      authentication: {
              enabled: true
              type: XMPP
              login-url:
          }
    6. Benutzer anlegen, die eine Konferenz erstellen dürfen:
      prosodyctl register Anwendername vmfree.selfhost.co Passwort
      Wobei Anwendername durch den gewünschten Anwendernamen ersetzt werden muss und Passwort durch das Passwort mit dem sich der Anwender authentifizieren muss.
    7. Danach
    8. jitsi neu starten.


    4 Keine Verbindungen zu gravatar.com

    Über ein Einstellungsmenü können Teilnehmer ihr Profil bzw. ihren Namen anpassen. Dieser wird dann in der Konferenz angezeigt. Beim Klick auf die Einstellungen (Rädchen-Symbol) gelangt man in ein Menü, wo man seine Geräte, Profil und mehr konfigurieren kann. Unter Profil lässt sich eine E-Mail-Adresse für Gravatar eingeben. Eine Eingabe dort löst wiederum eine Verbindung zu www.gravatar.com aus. Damit wird eine Verbindung zu einem externen Dienstleister hergestellt.
    Um dies zu unterbinden muß die Datei

    /etc/jitsi/meet/vmfree.selfhost.co-config-js
    geändert werden. Von:
    // disableThirdPartyRequests: false,
    nach:
    disableThirdPartyRequests: true,
    Danach jitsi neu starten.


    5 jitsi App mit Android

    Um jitsi auf einem Gerät mit Android zu verwenden, sollte man die jitsi-App von F-Droid installieren. Die App vom Google Play Store enthält Tracker.


    6 Startseite anpassen

    Als Startseite wird das eigene Webcambild verwendet. Dazu die Datei

    /etc/jitsi/meet/vmfree.selfhost.co-config.js 
    von:
    // prejoinPageEnabled: false,
    nach:
    prejoinPageEnabled: true,
    ändern.

    Den Text der Startseite finden Sie in der Datei

    /usr/share/jitsi-meet/lang/main-de.json
    Den Text für den Titel und Untertitel finden Sie hier:
    headerTitle:
    headerSubtitle:
    Um ein eigenes Logo einzubinden überschreiben Sie die Datei
    /usr/share/jitsi-meet/images/watermark.svg


    Um das Hinterbrundbild zu ändern, überschreiben Sie die Datei

    /usr/share/jitsi-meet/images/welcome-background.png

    In der Datei

    /usr/share/jitsi-meet/css/all.css
    können weitere Anpassungen für an der Startseite vorgenommen werden. Der besseren Lesbarkeit, sollte man die Datei zuvor formatieren, z. B. hier.

    Hintergrundbild in voller Größe darstellen:

    von:
    .welcome .header {
           background-image:linear-gradient(0deg,rgba(0,0,0,.2),rgba(0,0,0,.2)),url(../images/welcome-background.png);
           background-position:center;
           background-repeat:none;
           background-size:cover;
           padding-bottom:0;
          background-color:#131519;
          overflow:hidden;
          edit by jitsi.sh
          height:400px;
          position:relative;
         }
    nach:
    .welcome .header{
           background-image:linear-gradient(0deg,rgba(0,0,0,.2),rgba(0,0,0,.2)),url(../images/welcome-background.png);
           background-position:center;
           background-repeat:none;
           background-size:cover;
           padding-bottom:0;
           background-color:#131519;
           overflow:hidden;
           height:auto;
           position:absolute;
           bottom: 0;
           top: 0;
           left: 0;
           right: 0
          }

    Box mit Titel und Eingabe weiter nach unten setzen. Dazu Datei

    /usr/share/jitsi-meet/css/all.css
    ändern von:
    .welcome .header .header-container {
           display:flex;
           flex-direction:column;
           margin:104px 32px 0 32px;
           z-index:2
          }
    nach:
    .welcome .header .header-container {
           display:flex;
           flex-direction:column;
           margin:15% 32px 0 32px;
           z-index:2
          }

    Raumliste ausblenden:

    .welcome-cards-container {  
           display: none;  
         }

    Hat das Bild ein anderes Dateiformat (z. B. png, jpg), dann müssen Sie die den Dateinamen in
    /usr/share/jitsi-meet/css/all.css
    anpassen. Achtung: Bei einem Update wird die Datei überschrieben.


    7 Datenschutzerklärung

    Um eine Datenschutzerklärung auf der Willkommensseite von jitsi hinzuzufügen, muss die Datei

    /usr/share/jitsi-meet/static/welcomePageAdditionalContent.html
    von:
    <template id = "welcome-page-additional-content-template"></template>
    nach:
    <template id = "welcome-page-additional-content-template">
        <div id="footer"> 
            <center>Betrieben von vmfree | 
            <a href="https://www.vmfree.org/impressum.html">Impressum</a> | 
            <a href="https://www.vmfree.org/datenschutzhinweis.html/">Datenschutzhinweis</a></center>
            </center>
        </div>
        </template>

    geändert werden. Dazu müssen natürlich die Dateien impressum.html und datenschutzhinweis.html noch erstellt werden.
    Die Anzeige muss noch aktiviert werden. Dazu die Datei
    /usr/share/jitsi-meet/interface_config.js
    von:
    DISPLAY_WELCOME_PAGE_CONTENT: false,
    DISPLAY_WELCOME_PAGE_TOOLBAR_ADDITIONAL_CONTENT: false,
    nach:
    DISPLAY_WELCOME_PAGE_CONTENT: true,
    DISPLAY_WELCOME_PAGE_TOOLBAR_ADDITIONAL_CONTENT: true,
    ändern. Danach muß der Webserver neu geladen werden: Nach diesen Änderungen jitsi neu starten.

    8 Prozesse

    Für einen reibungslosen Betrieb sollte man in der Datei

    /etc/systemd/system.conf
    die Anzahl der zulässigen Prozesse erhöhen. Dazu müssen die folgenden Einträge am Ende hinzugefügt werden:
    DefaultLimitNOFILE=65000  
    DefaultLimitNPROC=65000  
    DefaultTasksMax=65000
    Damit die Einträge wirksam werden, muss der Dienst Systemd neugestartet werden:
    systemctl daemon-reload

    9 Optimierungen

    Dieser Optimierungen werden nicht durch das Installationsskript durchgeführt und müssen daher manuell geändert werden.
    Man kann die Auflösung des eigenen Videos heruntersetzen. Dazu in der Datei

    /etc/jitsi/meet/vmfree.selfhost.co-config-js
    die Auflösung ändern von:
    // resolution: 720,
    nach:
    resolution: 480,

    Zusätzlich kann die zu übertragende Videoqualität in Jitsi Meet eingestellt werden. Dies erfolgt in der Datei
    /etc/jitsi/meet/vmfree.selfhost.co-config-js
    Um eine niedrigere Videoqualität einzustellen, müssen diese Zeilen geändert werden von:
        // constraints: {
        //     video: {
        //         height: {
        //             ideal: 720,
        //             max: 720,
        //             min: 240
        //         }
        //     }
        // },
    nach:
         constraints: {
             video: {
                 height: {
                     ideal: 480,
                     max: 480,
                     min: 240
                 }
             }
         }, 


    Nach Beenden einer Videokonferenz die Startseite nicht anzeigen. Dazu in der Datei
    /etc/jitsi/meet/vmfree.selfhost.co-config-js
    diesen Wert ändern von:
    // enableClosePage: true,
    nach:
    enableClosePage: false,
    und die Datei
    /usr/share/jitsi-meet/interface_config.js
    von:
    SHOW_PROMOTIONAL_CLOSE_PAGE: false,
    nach:
    SHOW_PROMOTIONAL_CLOSE_PAGE: true,
    ändern.

    Bei jitsi werden alle Teilnehmer angezeigt. Um Video-Stream zu reduzieren kann nur das Video des aktuellen Sprechers eingeblendet werden. Dazu in der Datei
    /etc/jitsi/meet/vmfree.selfhost.co-config-js
    diesen Wert ändern von:
    channelLastN: -1,
    nach:
    channelLastN: 1,

    Videos nur übertragen, die auch bei einem Teilnehmer dargestellt werden:
    /etc/jitsi/meet/vmfree.selfhost.co-config-js
    diesen Wert ändern von:
    // enableLayerSuspension: false,
    nach:
    enableLayerSuspension: true,
    Nach diesen Änderungen jitsi neu starten.

    Contact info@vmfree.org