BigBlueButton Installationsanleitung (v. 2.3) inkl. Greenlight auf Basis von Ubuntu 18.04.x LTS inkl. weiterer Optimierungen

BigBlueButton v. 2.3.x – Greenlight 2.8.x

Installationsanleitung für BigBlueButton inkl. Greenlight-Verwaltung/Administration

Die minimalen Servervoraussetzungen für einen BigBlueButton Server sind:

  • Ubuntu 18.04.x 64 Bit mit einem 4.x-er Kernel
  • 16+ GB RAM
  • 8+ CPU cores
  • TCP 80, 443 frei und offen
  • UDP 16384 – 32768 frei und offen
  • Port 80 darf nicht von anderen Webanwendungen in Nutzung sein
  • 300+ GB Festplattenplatz
  • 250+ Mbit/s Bandbreite (symmetrisch)
  • Dedidizierter Server (physikalisch / bare metal empfohlen!)
  • ein hostname und DNS -Record (A, AAAA), um unter anderem SSL nutzen zu können
  • IPv4 und IPv6

Serverempfehlungen:
netcup: https://www.netcup.de/vserver/#root-server-details
hetzner: https://www.hetzner.com/de/dedicated-rootserver/matrix-ax

Installationsquellen (Stand 17. September 2021):
Ubuntu: Ubuntu 18.04.6 64Bit LTS ISO-Download
BigBlueButton: https://docs.bigbluebutton.org/
Greenlight: https://docs.bigbluebutton.org/greenlight/gl-overview.html


BigBlueButton hat eine Vielzahl an Verbesserungen implementiert und einen Plattformwechsel von Ubuntu 16 auf Ubuntu 18.04.x LTS vollzogen. Für diese Installationsanleitung setzen wir folgende Bedingungen voraus:

* ein eigener Server für BigBlueButton 2.3.x auf Basis von Ubuntu 18.04.xLTS
* ein coturn-Server, betrieben auf einem anderen Server
* DNS-Einträge (A/AAA-Records) für BigBlueButton
* IPv4 und IPv6

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
123.345.567.789 bbb.ihredomain.de
2a03:4000:56:fc3:d48d:3fff:fe7e:25c5 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.sh | bash -s -- -v bionic-230 -s bbb.ihredomain.de -e mail@ihredomaine.de -w

Die Installation startet und installiert Ihnen das aktuelle BigBlueButton 2.3 in wenigen Minuten (ca. 15 bis 30 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 die Kommunikation auch über NAT-Grenzen hinweg zu ermöglichen konfigurieren wir den separaten coturn-Server in die freeswitch-Konfiguration von BBB ein. Öffnen Sie zuerst die Datei vars.xml

nano /opt/freeswitch/etc/freeswitch/vars.xml

und setzen darin Ihre Domain an zwei Stellen:

<X-PRE-PROCESS cmd="set" data="external_rtp_ip=stun:coturn.ihredomain.de:5349"/>

und

<X-PRE-PROCESS cmd="set" data="external_sip_ip=stun:coturn.ihredomain.de:5349"/>

Starten und überprüfen Sie BBB:

bbb-conf --restart

Um BigBlueButton administrieren zu können 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>

Wie sie der Adresszeile im Browser entnehmen können wurden Sie nach /b, also zu Grennlight 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.

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

#!/bin/bash
# Pull in the helper functions for configuring BigBlueButton
source /etc/bigbluebutton/bbb-conf/apply-lib.sh
enableUFWRules
enableMultipleKurentos
echo "  - ... setting reduced 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' true
yq w -i $HTML5_CONFIG 'public.kurento.cameraProfiles.(id==medium).default' false
yq w -i $HTML5_CONFIG 'public.kurento.cameraProfiles.(id==high).default' false
yq w -i $HTML5_CONFIG 'public.kurento.cameraProfiles.(id==hd).default' false
chown meteor:meteor $HTML5_CONFIG
echo "  - ...change to your private TURN server in 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:ihr.stunserver.de:5349"/>
    </bean>
    <bean id="turn0" class="org.bigbluebutton.web.services.turn.TurnServer">
        <constructor-arg index="0" value="DAS-COTURN-SECRET"/>
        <constructor-arg index="1" value="turns:ihr.stunserver.de:5349?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"/>
            </set>
        </property>
    </bean>
</beans>
HERE

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 drei Zeilen hinzu:

@daily /bin/journalctl --vacuum-size=1G > /dev/null 2>&1
30 2 * * 1 /usr/bin/certbot renew >> /var/log/le-renew.log
35 2 * * 1 /bin/systemctl reload nginx

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 eine Spende würden sich meine Frau, meine Zwillinge und ich sehr freuen!

© Carsten Rieger IT-Services