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 :)