Installationsanleitung für Jitsi Meet Online-Meeting Server unter Ubuntu 22.04 - Stand 27.11.2025

 

Anleitungen, die geholfen haben:

https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-quickstart/

https://www.howtoforge.de/anleitung/so-installierst-du-influxdb-und-telegraf-unter-debian/

https://www.howtoforge.de/anleitung/so-installierst-du-den-tig-stack-telegraf-influxdb-und-grafana-auf-ubuntu-22-04/

https://scheible.it/jitsi-meet-statistik-grafana-dashboard/

https://grafana.com/docs/grafana/latest/setup-grafana/installation/debian/

https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-grafana-on-ubuntu-22-04

https://jitsi.github.io/handbook/docs/devops-guide/secure-domain/

und die KI von Google :)

 

#das System auf den neuesten Stand bringen
sudo apt update && sudo apt upgrade

#Verschlüsselung und digitalen Signatur von Daten und Repositories
sudo apt install gnupg

 

#Installation Webserver
sudo apt install nginx-full -y

 

#Installation Java Developement Kit Version 17
sudo apt install openjdk-17-jdk

 

# Ensure support for apt repositories served via HTTPS
sudo apt install apt-transport-https

#wenn notwendig sicheres Herunterladen der Softwarepakete über HTTPS - bei APT Version 1.5 nicht notwendig - "apt --version"
sudo apt install apt-transport-https

#nach einem sudo apt update bekam ich folgende Meldung vom System:
#The following packages have been kept back:
#libnss-systemd libpam-systemd libsystemd0 libudev1 systemd systemd-sysv systemd-timesyncd udev
#0 upgraded, 0 newly installed, 0 to remove and 8 not upgraded.
sudo apt full-upgrade

#Auf Ubuntu-Systemen benötigt Jitsi Abhängigkeiten aus dem Ubuntu-Universe-Paket-Repository. Um sicherzustellen, dass dieses aktiviert ist:
sudo apt-add-repository universe
sudo apt update

#Hostname setzen - eventuell in der /rtc/hots auch setzen, wenn nicht vorhanden
sudo hostnamectl set-hostname meet.example.org

#Dadurch wird das Prosody-Repository hinzugefügt, sodass eine aktuelle Version von Prosody installiert wird, die für Funktionen wie die Lobby-Funktion erforderlich ist.
sudo curl -sL https://prosody.im/files/prosody-debian-packages.key -o /usr/share/keyrings/prosody-debian-packages.key
echo "deb [signed-by=/usr/share/keyrings/prosody-debian-packages.key] http://packages.prosody.im/debian $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/prosody-debian-packages.list
sudo apt install lua5.2

#Hinzufügen vom Jitsi package repository
curl -sL https://download.jitsi.org/jitsi-key.gpg.key | sudo sh -c 'gpg --dearmor > /usr/share/keyrings/jitsi-keyring.gpg'
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
sudo apt update

#Ports für ufw definieren - ufw aktivieren wenn notwendig
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 10000/udp
sudo ufw allow 22/tcp
sudo ufw allow 3478/udp
sudo ufw allow 5349/tcp
sudo ufw enable

systemctl status ufw

 

# jitsi-meet installation - Domäne eingeben und Let's encrypt Zertifikat installieren (Port 80 in ufw wichtig)
sudo apt install jitsi-meet

#Videobridge konfigurieren
# hier folgendes eintragen /etc/jitsi/videobridge/config  
JVB_OPTS="--apis=rest,xmpp"

#Datei /etc/jitsi/videobridge/sip-communicator.properties ist nicht mehr notwendig
#Datei /etc/jitsi/videobridge/jvb.conf sieht so aus:

videobridge {
  # The APIs by which the JVB can be controlled
  apis {
    xmpp-client {
      # The interval at which presence is published in the configured MUCs.
      presence-interval = ${videobridge.stats.interval}

      # Controls which statistics are sent.
      stats-filter {
        # Whether to filter the statistics.
        # If true, send whitelisted keys only. If false, send all statistics.
        enabled = false

        # Which statistics to send, when filter is enabled.
        # Ignored if filter is disabled.
        whitelist = ["average_participant_stress", "colibri2", "current_timestamp", "drain", "graceful_shutdown",
          "healthy", "region", "relay_id", "release", "shutting_down", "stress_level", "version"]
      }

      # The size of the Smack JID cache
      jid-cache-size = 1000

      configs {
        # example-connection-id {
        #   For the properties which should be
        #   filled out here, see MucClientConfiguration
        # }
      }
    }
    # The COLIBRI REST API
    rest {
      enabled = true
    }
  }
  # Configuration of the different REST APIs.
  # Note that the COLIBRI REST API is configured under videobridge.apis.rest instead.
  rest {
    debug {
      enabled = true
    }
    health {
      enabled = true
    }
    shutdown {
      # Note that the shutdown API requires the COLIBRI API to also be enabled.
      enabled = false
    }
    drain {
      enabled = true
    }
    version {
      enabled = true
    }
    prometheus {
      enabled = true
    }
  }
    http-servers {
        public {
            port = 9090
        }
    }

  stats {
    // The interval at which stats are gathered.
    interval = 5 seconds

    // Statistics about the transit time of RTP/RTCP packets. Note that the collection code for the JSON and Prometheus
    // outputs is different, and each has a slight performance impact, so the format(s) that are not needed should be
    // kept disabled.
    transit-time {
      // Enable collection of transit time stats in JSON format. Available through /debug/jvb/stats/transit-time
      enable-json = true
      // Enable collection of transit time stats in Prometheus. Available through /metrics.
      enable-prometheus = false
      // Enable collection of internal jitter (difference in processing time). Available through
      // /debug/jvb/stats/transit-time
      enable-jitter = false
    }
    jvm {
      // Whether to enable collection of JVM metrics (thread count, garbage collection)
      enabled = true
    }
  }

    websockets {
        enabled = true
        domain = "meet.example.com:443"
        tls = true
    }
    apis.xmpp-client.configs {
        shard {
            HOSTNAME=localhost
            DOMAIN="auth.meet.example.com"
            USERNAME=jvb
            PASSWORD="GSS9KLnW"
            MUC_JIDS="jvbbrewery@internal.auth.meet.example.com"
            MUC_NICKNAME=ad7b0207-1a3d-431e-9577-a1246b86c4a8
        }
    }
}
ice4j {
    harvest {
        mapping {
            aws {
                enabled = false
            }
            stun {
                addresses = ["meet-jit-si-turnrelay.jitsi.net:443"]
            }
        }
    }
}

#Service neu starten
service jitsi-videobridge2 restart 

#Ausgabe von stats testen mit
curl -v http://127.0.0.1:8080/colibri/stats

 

#Installation InfluxDB

#für Influx
sudo ufw allow 8086

#gleich auch für Grafana
sudo ufw allow 3000

#wegen neuem PGP Key - https://www.influxdata.com/blog/linux-package-signing-key-rotation/ - danach
sudo apt install influxdb2 influxdb2-cli
sudo systemctl start influxdb

#influx Setup starten - Bucket ist die Datenbank
influx setup

#liest den Token des angegebenen Benutzers aus - für später merken - wichtig für die Skripterstellung mittels Flux in der Data Source influxDB (InfluxQL kann scheinbar nicht mit Token authentifizieren) für Grafana
sudo influx auth list

#Aufruf der Administrationsoberfläche - mit den angegebenen Informationen anmelden - 
https://meet.example.com:8086

#Sichern von InfluxDB über SSL/TLS-Zertifikate habe ich noch nicht durchgeführt - darum nur über http:// erreichbar - bissl doof :)

 

#Telegraf Installation
sudo apt install telegraf

#wenn noch keine Anpassungen in der Datei /etc/telegraf/telegraf.conf vorgenommen wurden, kann Telegraf nicht starten - darum Anpassungen ab Sektion [[outputs.influxdb_v2]]
#Datei /etc/telegraf/telegraf.d/jitsi.conf erzeugen mit folgendem Inhalt:

###############################################################################
#                                  INPUTS                                     #
###############################################################################

[[inputs.http]]
    name_override = "jitsi_stats"
    urls = [
      "http://localhost:8080/colibri/stats"
    ]

    data_format = "json"

###############################################################################
#                                  OUTPUTS                                    #
###############################################################################

[[outputs.influxdb]]
    urls = ["http://localhost:8086"]
    database = "jitsi"
    timeout = "0s"
    retention_policy = ""

 

#Telegraf neu starten
sudo systemctl restart telegraf

#Grafana installieren - nach einer im oberen Teil angegebenen Beschreibung

#und jetzt können in der Administrationsobefläche von Telegraf Sktipts erstellt werden, die dann in einem Dashboard (Add Visualization) hinterlegt werden können - viele Spaß :)

 

#Secure Domain - mittels Prosody konfigurieren - für Abfrage eines Benutzers und Kennworts für den Moderator - siehe Anleitungen im oberen Bereich - fertig :)