BBB 2.3 Installationsanleitung

Mi, 5. Mai 2021, Lioh Möller

Die Installation von BigBlueButton gilt als berüchtigt. Doch wenn man einige Grundvoraussetzungen beachtet, geht diese leicht von der Hand. In dieser Anleitung erklären wir dir, wie es geht und wie du deinen BBB-Server nachhaltig betreiben kannst.

Voraussetzung sind zwei Server, die direkt aus dem Internet erreichbar sind und sich nicht hinter einer NAT-Firewall befinden. Einer der Server dient als TURN-Node, der andere zur Nutzung von BBB und dem Standard-Frontend Greenlight.

Für den TURN-Server wird Ubuntu 20.04 vorausgesetzt. Dieser benötigt nicht allzu viele Ressourcen. 4 GB RAM, 2 CPU-Cores und 20 GB Diskspace sollten ausreichen.

Der BBB-Server hingegen benötigt eine etwas grössere Ausstattung. 16 GB RAM, 8 CPU-Cores und 70 GB Diskspace sind die Grundvoraussetzung, sofern keine Aufnahmen durchgeführt werden sollen. Möchte man Meetings aufzeichnen, so erhöht sich der Speicherplatzbedarf schnell auf 500 GB und mehr.

Im Gegensatz zum Turn-Server setzt BBB weiterhin die ältere Ubuntu-Version 18.04 voraus. Die Server sollten sowohl via IPv4 und IPv6 erreichbar sein. In unserer Beispielkonfiguration gehen wir ausserdem davon aus, dass für beide Server ein DNS A und AAAA Record erstellt wurde. In folgendem Beispiel wären dies turn.meinedomain.xyz und bbb.meinedomain.xyz. Alle folgenden Befehle müssen mit Root-Rechten ausgeführt werden (zum Beispiel nach einem Start einer Root-Shell, mit sudo bash)

TURN-Server

Doch widmen wir uns zunächst der Installation des TURN-Servers. Sobald Ubuntu 20.04 in der Servervariante erfolgreich installiert wurde, kann die Konfiguration beginnen. Um den Zugriff zu Beschränken, wird die lokale Firewall ufw genutzt. Dazu werden folgende Regeln erstellt:

ufw allow ssh
ufw allow 80/udp
ufw allow 80/tcp
ufw allow 443/udp 
ufw allow 443/tcp 
ufw allow 3478/udp 
ufw allow 3478/tcp 
ufw allow 32769:65535/udp

Sollte eine externe Firewall zum Einsatz kommen, müssten dort die obigen Ports ebenfalls geöffnet werden.

Daraufhin kann die eigentliche Installation des TURN-Servers mithilfe des bbb-install Scripts gestartet werden:

<secret> muss dabei durch einen zufällig generierten Wert (möglichst ohne Sonderzeichen), ersetzt werden. Zur Erstellung eignet sich Beispielsweise das Programm pwgen. Dieses Secret wird im weiteren Verlauf benötigt, um den BBB Server mit dem TURN-Server zu verbinden. turn.meinedomain.xyz sowie die angegebene E-Mail-Adresse müssen an die lokalen Gegebenheiten angepasst werden.

wget -qO- https://ubuntu.bigbluebutton.org/bbb-install.sh | bash -s -- -c turn.meinedomain.xyz:<secret> -e webmaster@meinedomain.xyz

Damit ist die Installation des TURN-Servers bereits abgeschlossen.

BBB-Installation

Auf dem vorbereiteten Ubuntu 18.04 BBB-Server kann der folgende Installationsbefehl verwendet werden:

WICHTIG: Das <secret> muss entsprechend dem während der Installation des TURN-Servers vergebenen Secrets angepasst werden. bbb.meinedomain.xyz und turn.meinedomain.xyz sowie die E-Mail-Adresse müssen ebenfalls ersetzt werden.

wget -qO- https://ubuntu.bigbluebutton.org/bbb-install.sh | bash -s -- -w -v bionic-23 -s bbb.meinedomain.xyz -e webmaster@meinedomain.xyz -c turn.meinedomain.xyz:<secret> -g

Durch den Parameter -w wird die ufw Firewall automatisch konfiguriert. In einer möglicherweise vorhandenen externen Firewall müssen die Ports TCP 80 / 443 sowie UDP 16384:32768 ebenfalls freigeschaltet werden.

Basiskonfiguration

Unter /etc/bigbluebutton/bbb-conf/ wird ein apply-config.sh File erstellt. Dies wird zur Beibehaltung von Konfigurationen während eines Updates benötigt. 

Inhalt /etc/bigbluebutton/bbb-conf/apply-config.sh:

#!/bin/bash
source /etc/bigbluebutton/bbb-conf/apply-lib.sh
enableMultipleKurentos

So wird sichergestellt, dass mehrere Kurento Instanzen verfügbar sind, was die Performance deutlich erhöht.

Die Datei wird mit chmod +x /etc/bigbluebutton/bbb-conf/apply-config.sh ausführbar gemacht.

Danach wird in der Datei /etc/bigbluebutton/turn-stun-servers.xml folgender Inhalt eingefügt: Auch hier müssen das <secret> und der DNS-Name des TURN-Servers angepasst werden. Achtung: die Werte kommen mehrfach in der Datei vor (Search & Replace)

<?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:turn.meinedomain.xyz"/>
    </bean>

    <bean id="turn0" class="org.bigbluebutton.web.services.turn.TurnServer">
        <constructor-arg index="0" value="<secret>"/>
        <constructor-arg index="1" value="turns:turn.meinedomain.xyz:443?transport=tcp"/>
        <constructor-arg index="2" value="86400"/>
    </bean>

    <bean id="turn1" class="org.bigbluebutton.web.services.turn.TurnServer">
        <constructor-arg index="0" value="<secret>"/>
        <constructor-arg index="1" value="turn:turn.meinedomain.xyz:443?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>

Um Anpassungen in apply-config.sh und der obigen Konfigurationsdatei zu aktivieren, muss folgender Befehl ausgeführt werden:

bbb-conf --restart

RAP-Worker erhöhen

Um die Anzahl der RAP-Worker zur gleichzeitigen Verarbeitung von Recordings zu erhöhen, kann ein entsprechender systemd override erstellt werden:

mkdir -p /etc/systemd/system/bbb-rap-resque-worker.service.d
cat > /etc/systemd/system/bbb-rap-resque-worker.service.d/override.conf << HERE
[Service]
Environment=COUNT=3
HERE
systemctl daemon-reload
systemctl restart bbb-rap-resque-worker.service

Alte Aufnahmen entfernen

Um Aufnahmen die älter sind als ein angegebener Zeitraum automatisch zu entfernen, kann ein CronJob /etc/cron.daily/bbb-recording-cleanup mit folgendem Inhalt erstellt werden:

#!/bin/bash

MAXAGE=14

LOGFILE=/var/log/bigbluebutton/bbb-recording-cleanup.log

shopt -s nullglob

NOW=$(date +%s)

echo "$(date --rfc-3339=seconds) Deleting recordings older than ${MAXAGE} days" >>"${LOGFILE}"

for donefile in /var/bigbluebutton/recording/status/published/*-presentation.done ; do
        MTIME=$(stat -c %Y "${donefile}")
        # Check the age of the recording
        if [ $(( ( $NOW - $MTIME ) / 86400 )) -gt $MAXAGE ]; then
                MEETING_ID=$(basename "${donefile}")
                MEETING_ID=${MEETING_ID%-presentation.done}
                echo "${MEETING_ID}" >> "${LOGFILE}"

                bbb-record --delete "${MEETING_ID}" >>"${LOGFILE}"
        fi
done

for eventsfile in /var/bigbluebutton/recording/raw/*/events.xml ; do
        MTIME=$(stat -c %Y "${eventsfile}")
        # Check the age of the recording
        if [ $(( ( $NOW - $MTIME ) / 86400 )) -gt $MAXAGE ]; then
                MEETING_ID="${eventsfile%/events.xml}"
                MEETING_ID="${MEETING_ID##*/}"
                echo "${MEETING_ID}" >> "${LOGFILE}"

                bbb-record --delete "${MEETING_ID}" >>"${LOGFILE}"
        fi
done

Der Zeitraum lässt sich über die MAXAGE Variable steuern (in obigen Beispiel 14 Tage). Nach der Erstellung der Datei muss diese als ausführbar markiert werden:

chmod +x /etc/cron.daily/bbb-recording-cleanup

Greenlight

Nach der Installation muss zunächst ein lokaler Administratoren-Account angelegt werden:

docker exec greenlight-v2 bundle exec rake admin:create

Standardmässig wird das Konto mit admin@example.com als Username und administrator als Passwort erstellt. Daher sollte man sich direkt nach dem Anlegen des Kontos an der Weboberfläche anmelden und das Passwort sowie die E-Mail-Adresse anpassen.

Zum Mailversand wird im File ~/greenlight/.env folgendes unter den SMTP Optionen eingetragen:

SMTP_SERVER=smtp.meinedomain.xyz
SMTP_PORT=25
SMTP_DOMAIN=meinedomain.xyz
SMTP_USERNAME=
SMTP_PASSWORD=
SMTP_AUTH=
SMTP_STARTTLS_AUTO=false
SMTP_OPENSSL_VERIFY_MODE=none

Dabei wird davon ausgegangen, dass smtp.meinedomain.xyz vom BBB-Server aus erreichbar ist und über diesen ohne Authentifizierung relayed werden kann. (Die Konfiguration von Postfix als Relayhost wird in dieser Anleitung nicht behandelt). Alternativ können die Zugangsdaten deines Anbieters zum Mailversand eingetragen werden. In diesen Fall musst du höchstwahrscheinlich die beiden letzten Optionen SMTP_STARTTLS_AUTO und SMTP_OPENSSL_VERIFY_MODE entfernen und die entsprechenden Zugangsdaten hinterlegen.

Anschliessend müssen folgende Befehle im Verzeichnis ~/greenlight/ ausgeführt werden: (Dies führt zu einem Unterbruch!)

docker-compose down
docker-compose up -d
docker run --rm --env-file .env bigbluebutton/greenlight:v2 bundle exec rake conf:check

Das Ergebnis des Checks sollte so aussehen:

Checking environment: Passed
Checking Connection: Passed
Checking Secret: Passed
Checking SMTP connection: Passed

Nach jeder Änderungen am .env-File muss docker-compose erneut wie oben beschrieben ausgeführt werden.

Die Logs von Greenlight können mithilfe von tail -f ~/greenlight/log/production.log ausgegeben werden.

Damit sollte dein BBB und TURN-Server bereits lauffähig sein und einer ersten Videokonferenz steht nichts mehr im Wege. Falls du nicht möchtest, dass die Registrierung für jeden offen ist, kannst du die Option als Greenlight-Administrator in den Organisationseinstellungen unter Grundeinstellungen / Einstellungen / Registrierungsmethode entsprechend anpassen. Es besteht die Möglichkeit die Teilnahme nur auf Einladung zu aktivieren oder Zulassen/Ablehnen zu wählen. Dabei muss jeder Registrierungsversuch zunächst durch einen Administrator freigeschaltet werden.

BBB-Update

Eine Aktualisierung des BBB-Servers galt bis anhin als umständlich und fehleranfällig, da oftmals vorhandene Konfigurationsdateien überschrieben wurden. Wenn du wie zuvor beschrieben apply-config.sh nutzt oder die Konfigurationsanpassungen unter /etc/bigbluebutton ablegst, sollte ein Minor-Update reibungslos funktionieren.

Dazu kannst du wie folgt vorgehen:

Prüfe zunächst die Version von BBB:

bbb-conf --version

Anschliessend kann das Update durchgeführt werden, wobei du die Domain entsprechend der Gegebenheiten anpassen musst:

apt update 
apt list --upgradable 
apt upgrade 
bbb-conf --setip bbb.meinedomain.xyz

Greenlight update

Um Greenlight zu aktualisieren, werden folgende Befehle im Verzeichnis von Greenlight (~/greenlight/) eingegeben:

docker-compose pull 
docker-compose down 
docker-compose up -d

Zur Überprüfung eignet sich der Befehl

docker-compose logs -f

Damit hast du das nötige Handwerkszeug um einen BBB-Server erfolgreich einzurichten und langfristig zu betreiben. Die offizielle Dokumentation gilt als wahrer Informationsschatz, daher lohnt sich ein Blick darauf in jedem Fall.