Diese BigBlueButton Installationsanleitung (Version 2.5) beschreibt alle notwendigen Installationsschritte inkl. der Einrichtung des Greenlight-Frontends zur einfachen Benutzerverwaltung auf Basis des Ubuntu 20.04.x LTS Betriebssystems inkl. weiterer Optimierungen Ihres BigBlueButton-Servers.
Die neue BigBlueButton Version 2.5 hat lange auf sich warten lassen, kommt dafür aber mit sehr tollen und neuen Features.
Die minimalen Servervoraussetzungen für einen BigBlueButton Server sind:
- Ubuntu 20.04 64-bit OS running Linux kernel 5.x
- Latest version of docker installed
- 16 GB of memory with swap enabled
- 8 CPU cores, with high single-thread performance
- 500 GB of free disk space (or more) for recordings, or 50GB if session recording is disabled on the server.
- TCP ports 80 and 443 are accessible
- UDP ports 16384 – 32768 are accessible
- 250 Mbits/sec bandwidth (symmetrical) or more
- TCP port 80 and 443 are not in use by another web server or reverse proxy
- A hostname (such as bbb.example.com) for setup of a SSL certificate
- IPV4 and IPV6 addres
Serverempfehlungen:
netcup: https://www.netcup.de/vserver/#root-server-details
hetzner: https://www.hetzner.com/de/dedicated-rootserver/matrix-ax
Installationsquellen (Stand 24. November 2022):
Ubuntu: https://releases.ubuntu.com/focal/ubuntu-20.04.5-live-server-amd64.iso
BigBlueButton: https://docs.bigbluebutton.org/2.5/install.html
Greenlight: https://docs.bigbluebutton.org/greenlight/gl-overview.html
Freies Benutzerhandbuch: Praxishandbuch
102 Questions on BigBlueButton: The Definitive Guide (2022)
Für diese Installationsanleitung setzen wir folgende Bedingungen voraus:
* ein eigener Server für BigBlueButton 2.5.x auf Basis von Ubuntu 20.04.xLTS
* ein coturn-Server, betrieben auf einem separaten Server (Best-Practice mit Port 443)
* DNS-Einträge (A/AAA-Records) für BigBlueButton
* IPv4 und IPv6
Möchten Sie einen bestehenden BigBlueButton-Server von Version 2.4 auf 2.5 aktualisieren, so folgen Sie dieser Anleitung.
Sofern der Server mit dem Betriebssystem Ubuntu 18.04.x installiert wurde müssen ein paar Systemeinstellungen sichergestellt werden. Überprüfen wir also zuerst die Spracheinstellungen am Server, erwartet wird die Collation „en_US.UTF-8“:
sudo -s cat /etc/default/locale
Das Ergebnis sollte wie folgt aussehen:
LANG="en_US.UTF-8"
Andernfalls korrigieren Sie diese Einstellungen mittels der nachfolgenden Befehle
apt install language-pack-en
update-locale LANG=en_US.UTF-8
und überprüfen dann, ob noch weitere Einträge in der Datei „/etc/default/locale“ vorhanden sind. Wenn ja, dann entfernen Sie diese bitte, melden sich vom System ab, dann wieder am System an und überprüfen die Ausgabe mittels des nachfolgenden Befehls erneut.
systemctl show-environment
Nun setzen wir den Hostnamen in der hosts-Datei:
nano /etc/hosts
[...] 127.0.1.1 bbb.ihredomain.de ::1 bbb.ihredomain.de 123.345.567.789 bbb.ihredomain.de 2a03:.....:wxyz bbb.ihredomain.de [...]
Nach der hosts-Datei setzen wir noch den FQDN in der hostname-Datei:
nano /etc/hostname
Tragen Sie den Domänennamen (FQDN) ein:
bbb.ihredomain.de
Starten Sie nun den Server neu
reboot now
und fahren mit der Installation fort. Für die Installation nutzen wir ein Installationsskript, welches wir herunterladen und direkt ausführen. Wechseln Sie nach dem Neustart zuerst in den priviligierten Benutzermodus:
sudo -s
und bereiten das Installationsskript vor. Ersetzen Sie bbb.ihredomain.de mit ihrer gewünschten Domain und die Emailadresse mail@ihredomain.de mit einer für die Let’sEncrypt Zertifikatserstellung benötigten, gültigen Emailadresse.
wget -qO- https://ubuntu.bigbluebutton.org/bbb-install-2.5.sh | bash -s -- -v focal-250 -s bbb.ihredomain.de -e mail@ihredomaine.de -w
Wenn Sie auch Greenlight mitinstallieren lassen wollen, dann könnten Sie den Parameter „-g“ ergänzen
wget -qO- https://ubuntu.bigbluebutton.org/bbb-install-2.5.sh | bash -s -- -v focal-250 -s bbb.ihredomain.de -e mail@ihredomaine.de -w -g
oder folgen dem weiteren Verlauf dieser Anleitung, um Greenlight und Docker manuell zu installieren.
Die Installation startet und installiert Ihnen das aktuelle BigBlueButton 2.5 in wenigen Minuten (ca. 10 bis 20 Minuten), abhängig von der Bandbreite am Server. Nach Abschluss der Installation überprüfen Sie das BBB-System mittels
bbb-conf --check
Starten wir BBB neu und kontrollieren die Funktionsfähigkeit:
bbb-conf --restart
Um Problemen mit Verbindungen über verschiedene Netzwerke (bspw. verursacht durch NAT o. Ä.) zu verhindern, sollten Sie Ihren eigenen Coturn-Server nutzen. Die Funktionsfähigkeit des coturn-Servers lässt sich hier überprüfen. Sofern Ihr coturn-Server erfolgreich überprüft wurde (srflx-Einträge mit OK quittiert), bearbeiten Sie die Datei apply-config.sh
mv /etc/bigbluebutton/bbb-conf/apply-config.sh /etc/bigbluebutton/bbb-conf/apply-config.sh.bak
touch /etc/bigbluebutton/bbb-conf/apply-config.sh
nano /etc/bigbluebutton/bbb-conf/apply-config.sh
Kopieren Sie den Inhalt hinein und passen den stun/turn-Server an:
GitHub: https://codeberg.org/criegerde/bigbluebutton/src/branch/master/apply-config.sh
#
#!/bin/bash
# v. 2.5.1x+
/usr/bin/clear
echo ""
echo "...::: BigBlueButton :::..."
echo ""
source /etc/bigbluebutton/bbb-conf/apply-lib.sh
# Variablen
COTURN_URL="coturn.ihredomain.de"
COTURN_PORT="443"
COTURN_PASSWORD="DasCoturn-Secret!"
# enableUFWRules
enableMultipleKurentos
echo ""
echo " - Logging"
sed -i 's/appLogLevel=.*/appLogLevel=Error/g' /usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties
sed -i 's/level:.*/level: error/g' /usr/local/bigbluebutton/bbb-webrtc-sfu/config/default.yml
sed -i 's/loglevel =.*/loglevel = "OFF"/g' /etc/bbb-fsesl-akka/application.conf
sed -i 's/stdout-loglevel =.*/stdout-loglevel = "OFF"/g' /etc/bbb-fsesl-akka/application.conf
echo ""
echo " - Analyzing off"
sed -i 's/#disabledFeatures=.*/disabledFeatures=learningDashboard/g' /usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties
grep -qxF "learningDashboardEnabled=false" /etc/bigbluebutton/bbb-web.properties || echo "learningDashboardEnabled=false" >> /etc/bigbluebutton/bbb-web.properties
echo ""
echo " - Disable recordings"
sed -i 's/disableRecordingDefault=.*/disableRecordingDefault=true/' /usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties
sed -i 's/breakoutRoomsRecord=.*/breakoutRoomsRecord=false/g' /usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties
sed -i 's/allowStartStopRecording=.*/allowStartStopRecording=false/' /usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties
sed -i 's/autoStartRecording=.*/autoStartRecording=false/' /usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties
echo ""
echo " - DefaultMessages"
sed -i 's/defaultWelcomeMessage=.*/defaultWelcomeMessage=Konferenz: \<b\>\%\%CONFNAME\%\%\<\/b\>/' /usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties
sed -i 's/defaultWelcomeMessageFooter=.*/defaultWelcomeMessageFooter=Die Datenschutzerkl\ä\;rung finden Sie \<a href\=\"https\:\/\/www\.ihredomain\.de\/dsgvo\" target\=\"\_blank\"\>hier\<\/a\>\./' /usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties
echo ""
echo " - Set default logout URL"
sed -i 's/bigbluebutton.web.logoutURL=.*/bigbluebutton.web.logoutURL=https:\/\/www\.c\-rieger\.de/g' /usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties
echo ""
echo " - SIP-Setting"
sed -i s/sipjsHackViaWs: .*/sipjsHackViaWs: true/' /usr/share/meteor/bundle/programs/server/assets/app/config/settings.yml
echo ""
echo " - Setting camera defaults"
#yq w -i $HTML5_CONFIG 'public.kurento.cameraProfiles.(id==low).bitrate' 50
#yq w -i $HTML5_CONFIG 'public.kurento.cameraProfiles.(id==medium).bitrate' 100
#yq w -i $HTML5_CONFIG 'public.kurento.cameraProfiles.(id==high).bitrate' 200
#yq w -i $HTML5_CONFIG 'public.kurento.cameraProfiles.(id==hd).bitrate' 300
yq w -i $HTML5_CONFIG 'public.kurento.cameraProfiles.(id==low).default' false
yq w -i $HTML5_CONFIG 'public.kurento.cameraProfiles.(id==medium).default' false
yq w -i $HTML5_CONFIG 'public.kurento.cameraProfiles.(id==high).default' true
yq w -i $HTML5_CONFIG 'public.kurento.cameraProfiles.(id==hd).default' false
echo ""
echo " - Set guest app window title"
sed -i 's/"app.guest.windowTitle":.*/"app.guest.windowTitle": "Your Name - Guest Lobby",/g' /usr/share/meteor/bundle/programs/web.browser/app/locales/en.json
sed -i 's/"app.guest.windowTitle":.*/"app.guest.windowTitle": "Ihr Name - Wartebereich",/g' /usr/share/meteor/bundle/programs/web.browser/app/locales/de.json
echo ""
echo " - Set default presentations"
cp /var/www/bigbluebutton-default/default.pdf /var/www/bigbluebutton-default/default.pdf.bak
cp /home/<user>/default.pdf /var/www/bigbluebutton-default/default.pdf
cp /var/www/bigbluebutton-default/default.pptx /var/www/bigbluebutton-default/default.pptx.bak
cp /home/<user>/default.pptx /var/www/bigbluebutton-default/default.pptx
cp /var/www/bigbluebutton-default/favicon.ico /var/www/bigbluebutton-default/favicon.ico.bak
cp /home/<user>/favicon.ico /var/www/bigbluebutton-default/favicon.ico
echo ""
echo " - Custom settings"
sed -i 's/startClosed:.*/startClosed: true/' /usr/share/meteor/bundle/programs/server/assets/app/config/settings.yml
sed -i 's/hidePresentation:.*/hidePresentation: false/' /usr/share/meteor/bundle/programs/server/assets/app/config/settings.yml
echo ""
chown meteor:meteor $HTML5_CONFIG
echo " - Update TURN server configuration turn-stun-servers.xml"
cat <<HERE > /usr/share/bbb-web/WEB-INF/classes/spring/turn-stun-servers.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="stun0" class="org.bigbluebutton.web.services.turn.StunServer">
<constructor-arg index="0" value="stun:$COTURN_URL:$COTURN_PORT"/>
</bean>
<bean id="turn0" class="org.bigbluebutton.web.services.turn.TurnServer">
<constructor-arg index="0" value="$COTURN_PASSWORD"/>
<constructor-arg index="1" value="turns:$COTURN_URL:$COTURN_PORT?transport=tcp"/>
<constructor-arg index="2" value="86400"/>
</bean>
<bean id="turn1" class="org.bigbluebutton.web.services.turn.TurnServer">
<constructor-arg index="0" value="$COTURN_PASSWORD"/>
<constructor-arg index="1" value="turn:$COTURN_URL:$COTURN_PORT?transport=tcp"/>
<constructor-arg index="2" value="86400"/>
</bean>
<bean id="stunTurnService"
class="org.bigbluebutton.web.services.turn.StunTurnService">
<property name="stunServers">
<set>
<ref bean="stun0"/>
</set>
</property>
<property name="turnServers">
<set>
<ref bean="turn0"/>
<ref bean="turn1"/>
</set>
</property>
</bean>
</beans>
HERE
echo ""
echo "(c) Carsten Rieger IT-Services"
Starten und überprüfen Sie nun Ihren BigBlueButton-Server erneut:
bbb-conf --restart
Um BigBlueButton einfach administrieren und eine Benutzerverwaltung nutzen zu können bedienen wir uns des Greenlight-Frontends. Dazu gehen wir wie folgt vor:
apt update && apt install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
apt update && apt install -y docker-ce docker-ce-cli containerd.io
Testen Sie nun, dass docker auf ihrem Server installiert ist:
docker -v
Legen Sie den ~/greenlight Ordner an und wechseln in diesen Ordner hinein:
mkdir ~/greenlight && cd ~/greenlight
Um greenlight zu starten muss der Docker geladen und die Konfiguration erstellt werden:
docker run --rm bigbluebutton/greenlight:v2 cat ./sample.env > .env
Um greenlight einrichten und konfigurieren zu können erstellen wir das notwendige Secret (SECRET_KEY_BASE):
docker run --rm bigbluebutton/greenlight:v2 bundle exec rake secret
Notieren Sie sich die Ausgabe des vorigen Befehls als SECRET_KEY_BASE. Lassen Sie sich dann die weiteren Secret-Informationen (BIGBLUEBUTTON_ENDPOINT und BIGBLUEBUTTON_SECRET) ausgeben
bbb-conf --secret
und tragen alle drei SECRETS in die Datei ~/.greenlight/.env ein.
cd ~/greenlight
nano .env
Unterhalb der SECRETS finden Sie noch den Parameter SAFE_HOSTS, der ebenfalls gesetzt werden muss. Hier wird der FQDN verwendet, ohne https, also bspw: ihre.domain.de.
Überprüfen Sie dann die Greenlightkonfiguration mittels:
docker run --rm --env-file .env bigbluebutton/greenlight:v2 bundle exec rake conf:check
Ohne SMTP-Konfiguration in der .env-Datei müssen alle drei Tests erfolgreich (passed) dargestellt werden. Haben Sie SMTP konfiguriert
nano ~/greenlight/.env
[…] ALLOW_MAIL_NOTIFICATIONS=true […] SMTP_SERVER=smtp.domäne.de SMTP_PORT=587 SMTP_DOMAIN=ihredomäne.de SMTP_USERNAME=smtpbenutzer@ihredomäne.de SMTP_PASSWORD=IhrPasswort SMTP_AUTH=plain SMTP_STARTTLS_AUTO=true SMTP_SENDER=email@ihredomäne.de […]
so müssen alle vier Tests als erfolgreich (passed) dargestellt werden.
Greenlight wird nun nach <https://bbb.ihredomäne.de/b> installiert.
docker run --rm bigbluebutton/greenlight:v2 cat ./greenlight.nginx | sudo tee /etc/bigbluebutton/nginx/greenlight.nginx
Prüfen Sie, ob die nachfolgende Datei Inhalt aufweist:
cat /etc/bigbluebutton/nginx/greenlight.nginx
Die Administrationsoberfläche wäre technisch schon unter https://<ihredomäne.de>/b erreichbar, doch wir wollen BBB zukünftig direkt in greenlight unter https://<ihredomäne.de> starten. Aus diesem Grund fügen wir am Ende der vHost-Datei (/etc/nginx/sites-available/bigbluebutton) folgende Zeilen vor der letzten Klammer ‚}‚ ein:
cp /etc/nginx/sites-available/bigbluebutton /etc/nginx/sites-available/bigbluebutton.bak nano /etc/nginx/sites-available/bigbluebutton
[...]
location = / {
return 307 /b;
}
}
Überprüfen Sie die Webserverkonfiguration mittels
nginx -t
und starten, einen fehlerfreien Test mit nginx -t vorausgesetzt, letztmalig den Webserver nginx neu:
systemctl restart nginx
Um Greenlight zu starten wird docker-compose benötigt.
curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
Kopieren Sie die docker-compose.yml Datei aus dem Greenlight image nach ~/greenlight:
docker run --rm bigbluebutton/greenlight:v2 cat ./docker-compose.yml > docker-compose.yml
Erzeugen Sie mit dem nachfolgenden Befehl ein zufälliges Passwort für PostgreSQL und ersetzen es in den .env- und .docker-compose.yml-Dateien:
export pass=$(openssl rand -hex 8); sed -i 's/POSTGRES_PASSWORD=password/POSTGRES_PASSWORD='$pass'/g' docker-compose.yml;sed -i 's/DB_PASSWORD=password/DB_PASSWORD='$pass'/g' .env
Nun starten Sie die Administrationsanwendung greenlight
docker-compose up -d
und rufen dann BigBlueButton und greenlight erstmalig auf. Bitte haben Sie Geduld, es kann bis 30 bis 60 Sekunden dauern, bis der Greenlight-Docker ordnungsgemäß hochgefahren ist:
https://<bbb.ihredomain.de>
Um in Zukunft das Frontend greenlight zu aktualisieren führen Sie im greenlight-Verzeichnis folgende Befehle aus:
cd ~/greenlight
docker-compose pull
docker-compose down
docker-compose up -d
Weiterführende Informationen zu Greenlight finden Sie hier.
Wie Sie der Adresszeile im Browser entnehmen können wurden Sie nach /b, also zu Greenlight weitergeleitet. Für mögliche Analysen finden Sie die Logdateien unter:
~/greenlight/log
Richten Sie sich noch einen BBB-Administratoraccount ein
docker exec greenlight-v2 bundle exec rake user:create["name","email","password","admin"]
um sich am Webfrontend anmelden zu können. Ersetzen Sie dabei die Werte „name„, „email“ und „password“ mit realen Werten. Zudem können Sie auch einen „normalen“ Benutzer, ohne Administratorenberechtigungen, erzeugen:
docker exec greenlight-v2 bundle exec rake user:create["name","email","password","user"]
Auch hier gilt es, die Werte „name„, „email“ und „password“ mit den „echten“ Werten des BBB-Benutzers zu ersetzen.
Starten Sie dann BigBlueButton neu:
bbb-conf --restart
Somit nutzen Sie ihren eigenen coturn-Server und keine Drittanbieterdienste wie bspw. Googles stun-Server. Die ausgezeichnete Integration in Ihre Nextcloud beschreibt der folgende Artikel.
Zudem lohnt sich auch der ein oder andere Blick hinter die BBB-Kulissen:
* drei parallele Kurento-server
* Audioeinstellungen
* „Komfort Lärm“ (comfort noise)
* Standardpräsentation
* Greenlight Customizing
* u.v.m.
Die aktuellen Versionen ermitteln Sie durch
bbb-conf --version
Haben Sie weitere Anpassungen wie beispielsweise die Erhöhung der Kurrento-Server (s. apply-config.sh) durchgeführt, so lassen sich diese bspw. per
netstat -antp | grep kurento
ermitteln. Zum Abschluss erweitern wir crontab, um sowohl die Logfiles turnusmäßig zu bereinigen, als auch die SSL-Zertifikate regelmäßig automatisch zu erneuern:
crontab -e
Fügen Sie am Ende diese Zeilen hinzu:
@daily /bin/journalctl --vacuum-size=1G > /dev/null 2>&1 @daily find /var/log/nginx/*.log -mtime +14 -delete @daily find /var/log/bbb-webrtc-sfu/*.log -mtime +14 -delete @daily find /var/log/bigbluebutton/*.log -mtime +14 -delete @daily find /var/log/*.log -mtime +14 -delete 30 2 * * 1 /usr/bin/certbot renew >> /var/log/le-renew.log 35 2 * * 1 /bin/systemctl reload nginx
Sollte es zu Problemen bei der Verwendung im Firefox Browser kommen, so wäre folgende Einstellung ein Versuch wert: about:config » media.peerconnection.ice.relay_only » true
Quelle: https://docs.bigbluebutton.org/admin/setup-turn-server.html#test-your-turn-server
Weitere BBB-Befehle (bbb-conf) finden Sie hier.
Sofern Sie eine Nextcloud-Instanz betreiben können Sie hier erfahren, wie Sie BigBlueButton in Ihre Nextcloud integrieren.
Die Installation wurde erfolgreich abgeschlossen und so wünsche ich Ihnen viel Spaß mit Ihrer eigenen BigBlueButton-Instanz. Über Ihre Unterstützung (diese wird ordnungsgemäß versteuert!) würden sich meine Frau, meine Zwillinge und ich sehr freuen!