Jitsi
Jitsi ist eine Sammlung verschiedener Open Source Projekte, welche eine einzigartige Video Konferenz Plattform bildet, die selbst gehostet werden kann. Jbiri ist das Tool zur Aufzeichnung der Meetings.
Self-Hosting:
über Pakete für Debian oder Ubuntu
via Docker für RHEL und andere
Minimales Server-Sizing:
2 CPU-Cores
2 GB RAM
100 GB Disk
Tipp
Das Ghost-Icon zu einem Teilnehmer zeigt an, dass dieser eine langsame Internet-Verbindung hat.
Installation und Konfiguration
via Docker
Unter RHEL setzt man am besten auf die Docker-Container.
Vorbereitung der Docker Installation mit dem root User und im Home Verzeichnis von root (/root)
Siehe auch: https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-docker
cd /opt/
wget https://github.com/jitsi/docker-jitsi-meet/archive/stable-4857.tar.gz
tar -xzvf stable-4857.tar.gz
rm stable-4857.tar.gz
cd docker-jitsi-meet-stable-4857/
cp env.example .env
./gen-passwords.sh
mkdir -p /etc/jitsi-meet-cfg/{web/letsencrypt,transcripts,prosody/config,prosody/prosody-plugins-custom,jicofo,jvb,jigasi,}
Anschliessend müssen in einer Datei weitere Einstellungen gesetzt werden:
CONFIG=/etc/jitsi-meet-cfg
TZ=Europe/Zurich
PUBLIC_URL=https://meet.example.com
Zusätzlich können optionale Einstellungen wie Authentifizierung gesetzt werden (https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-docker#authentication):
AUTH_TYPE=jwt
ENABLE_AUTH=1
JWT_APP_ID=ID
JWT_APP_SECRET=PASSWORD
Wenn die Konfiguration abgeschlossen ist, können die Container via docker-compose gestartet werden
cd /opt/docker-jitsi-meet-stable-4857/
docker-compose up -d
Damit werden die entsprechenden Images heruntergeladen und die Container erstellt. Ebenso werden entsprechende Konfig-Dateien im Verzeichnis /etc/jitsi-meet-cfg/ angelegt welche angepasst werden können. Wenn man dort Änderungen gemacht hat, muss man die Docker Container natürlich anschliessend neustarten:
cd /opt/docker-jitsi-meet-stable-4857/
docker-compose down --remove-orphans
docker-compose up -d
auf Debian/Ubuntu
Siehe auch
https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-quickstart
https://doganbros.com/index.php/jitsi/jitsi-installation-with-jwt-support-on-ubuntu-20-04-lts/
Folgende Ports müssen vonn aussen erreichbar sein:
80/tcp
443/tcp
4443/tcp
3478/udp
5222/tcp
5349/tcp
5347/tcp
10000:20000/udp
System Updates:
apt update
apt upgrade
Hostname und Timezone setzen:
hostnamectl set-hostname meet.example.com
timedatectl set-timezone Europe/Zurich
Since Ubuntu 20.04 TLS Focal Fossa is a fairly new distribution, libssl1.0-dev does not exist in its Debian repository. So we need to install libssl1.0-dev package for 18.04 TLS Bionic Beaver.
Add the following line for global Debian repo:
/etc/apt/sources.list
deb http://security.ubuntu.com/ubuntu bionic-security main
apt update && apt-cache policy libssl1.0-dev
apt-get update
apt-get install gcc -y
apt-get install unzip -y
apt-get install lua5.2 -y
apt-get install liblua5.2 -y
apt-get install luarocks -y
luarocks install basexx
apt-get install libssl1.0-dev -y
luarocks install luacrypto
mkdir src
cd src
luarocks download lua-cjson
luarocks unpack lua-cjson-2.1.0.6-1.src.rock
cd lua-cjson-2.1.0.6-1/lua-cjson
sed -i 's/lua_objlen/lua_rawlen/g' lua_cjson.c
sed -i 's|$(PREFIX)/include|/usr/include/lua5.2|g' Makefile
luarocks make
luarocks install luajwtjitsi
cd
wget https://prosody.im/files/prosody-debian-packages.key -O- | sudo apt-key add -
echo deb http://packages.prosody.im/debian $(lsb_release -sc) main | sudo tee -a /etc/apt/sources.list
apt-get update
apt-get upgrade -y
apt-get install prosody -y
chown root:prosody /etc/prosody/certs/localhost.key
chmod 644 /etc/prosody/certs/localhost.key
shutdown -r now
cp /etc/prosody/certs/localhost.key /etc/ssl
apt-get install -y gnupg2 nginx-full default-jre apt-transport-https
apt-add-repository universe
curl 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 > /dev/null
apt-get update
apt-get install jitsi-meet -y
apt-get install jitsi-meet-tokens -y
/etc/prosody/prosody.cfg.lua
Folgende Zeilen nach admins Objekt hinzufügen:
admins = {}
component_ports = { 5347 }
component_interface = "0.0.0.0"
c2s_require_encryption auf false setzen:
c2s_require_encryption=false
Sicherstellen, dass Includes korrekt gesetzt sind:
Include "conf.d/*.cfg.lua"
Issuers und Audiences setzen:
asap_accepted_issuers = { "jitsi", "zellim" }
asap_accepted_audiences = { "jitsi", "zellim" }
oder
asap_accepted_issuers = { "*" }
asap_accepted_audiences = { "*" }
VirtualHost konfigureren:
VirtualHost "meet.example.com"
authentication = "token";
app_id = "example_app_id"; -- application identifier
app_secret = "example_app_secret"; -- application secret known only to your token
Modul mod_presence_identity hinzufügen:
VirtualHost "meet.example.com"
modules_enabled = { "presence_identity" }
Modul Room Token Vefification aktivieren:
Component "conference.meet.example.com" "muc"
modules_enabled = { "token_verification" }
/etc/jitsi/jicofo/sip-communicator.properties
org.jitsi.jicofo.auth.URL=XMPP:meet.example.com
org.jitsi.jicofo.auth.DISABLE_AUTOLOGIN=true
org.jitsi.jicofo.BRIDGE_MUC=JvbBrewery@internal.auth.meet2.patientube.com
org.jitsi.jicofo.auth.URL=XMPP:meet2.patientube.com
org.jitsi.jicofo.auth.DISABLE_AUTOLOGIN=true
/etc/jitsi/jicofo/config
JICOFO_HOST=meet.example.com
/etc/jitsi/videobridge/config
# sets the hostname of the XMPP server (default: domain if set, localhost otherwise)
JVB_HOST=meet.example.com
# extra options to pass to the JVB daemon
JVB_OPTS="--apis=rest,xmpp,"
Nach JAVA_SYS_PROPS
AUTHBIND=yes
Host File anpassen /etc/hosts
127.0.0.1 meet.example.com
Konfiguration hinter Reverse Proxy / NAT
Im File folgendes auskommentieren bzw hinzufügen „/etc/jitsi/videobridge/sip-communicator.properties“:
#org.ice4j.ice.harvest.STUN_MAPPING_HARVESTER_ADDRESSES=meet-jit-si-turnrelay.jitsi.net:443
org.ice4j.ice.harvest.NAT_HARVESTER_LOCAL_ADDRESS=10.100.1.41
org.ice4j.ice.harvest.NAT_HARVESTER_PUBLIC_ADDRESS=2.56.40.15
LetsEncrypt-Zertifikat
/usr/share/jitsi-meet/scripts/install-letsencrypt-cert.sh
JWT-Token
Zum Testen am einfachsten mit Hilfe von https://jwt.io/ (JWT_APP_ID
ersetzen).
# HEADER
{
"alg": "HS256",
"typ": "JWT"
}
# PAYLOAD
{
"room": "*",
"aud": "JWT_APP_ID",
"iss": "JWT_APP_ID",
"sub": "*",
"context": {
"user": {
"name": "some-username"
}
}
}
Bei VERIFY SIGNATURE die JWT_APP_SECRET
einfügen, secret base64 encoded
deaktivieren.
Mehr Informationen findet man in der Dokumentation.
Jibri
Jibri bietet Dienste für die Aufzeichnung oder das Streaming einer Jitsi Meet-Konferenz. Dazu wird eine Chrome-Instanz gestartet, die in einem virtuellen Framebuffer gerendert wird, und die Ausgabe wird mit ffmpeg aufgezeichnet und codiert.
Um Jibri via Docker zu aktivieren, müssen zunächst Vorbereitungen am Host getroffen werden:
echo "options snd-aloop enable=1,1,1,1,1 index=0,1,2,3,4" > /etc/modprobe.d/alsa-loopback.conf
echo "snd_aloop" > /etc/modules-load.d/snd_aloop.conf
modprobe snd-aloop
lsmod | grep snd_aloop
Das Recording aktivieren:
ENABLE_RECORDING=1
Wenn custom DEFAULT_LOGO_URL
und JITSI_WATERMARK_LINK
verwendet werden sollen, werden zusätzlich /etc/hosts
-Einträge im Container benötigt. Dazu die docker-compose Datei anpassen und die Container neustarten.
...
networks:
meet.jitsi:
extra_hosts:
- "example.com:10.100.1.36"
- "www.example.com:10.100.1.36"
Zum Schluss muss Jitsi zusätzlich mit Jibri gestartet werden:
docker-compose down --remove-orphans
docker-compose -f docker-compose.yml -f jibri.yml up -d
Die Recordings finden sich im Verzeichnis /etc/jitsi-meet-cfg/jibri/recordings/
.
Customizations
Look and Feel
/usr/share/jitsi-meet/interface_config.js
DEFAULT_LOGO_URL: 'https://example.com/forum/assets/site-logo.svg'
JITSI_WATERMARK_LINK: 'https://example.com'
DEFAULT_WELCOME_PAGE_LOGO_URL: 'https://example.com/assets/site-logo.svg',
/etc/jitsi/meet/meet.example.com-config.js
disableInviteFunctions: true,
doNotStoreRoom: true,
enableClosePage: true,
invite aus toolbarButtons entfernen.
/usr/share/jitsi-meet/static/close2.html ersetzen.
Customized HTML-Dateien
Um customized HTML-Dateien zu verwenden, den Volume-Block des docker-compose Files wie folgt anpassen:
volumes:
- ${CONFIG}/web:/config:Z
- ${CONFIG}/web/letsencrypt:/etc/letsencrypt:Z
- ${CONFIG}/transcripts:/usr/share/jitsi-meet/transcripts:Z
- /etc/jitsi-meet-cfg/web/static/close2.html:/usr/share/jitsi-meet/static/close2.html
- /etc/jitsi-meet-cfg/web/static/logo-white.svg:/usr/share/jitsi-meet/static/logo-white.svg
Über die beiden letzten Zeilen, lassen sich neue Dateien hinzufügen, oder vorhandene Dateien überschreiben.
Monitoring
apt install python3-psutil
https://github.com/nbuchwitz/check_jitsi#activate-private-rest-api-on-jitsi-videobridge
Activate private rest API on jitsi videobridge
/etc/jitsi/videobridge/config
JVB_OPTS="--apis=rest,xmpp"
/etc/jitsi/videobridge/sip-communicator.properties
org.jitsi.videobridge.ENABLE_STATISTICS=true
Built on 2024-11-18