BigBlueButton v. 2.2 inkl. greenlight v. 2

BigBlueButton (bbb)

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

Die minimalen Servervoraussetzungen für einen BigBlueButton Server sind:

  • Ubuntu 16.04.x 64 Bit mit einem 4.x-er Kernel
  • 8+ GB RAM
  • 4 + CPU cores
  • TCP 80, 443 und 7443 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.de/dedicated-rootserver

Installationsquellen (Stand 13. November 2020):
Ubuntu 16.04.7 64Bit LTS ISO-Download
https://docs.bigbluebutton.org/2.2/install.html
https://docs.bigbluebutton.org/greenlight/gl-overview.html


Installieren Sie Ubuntu 16.04.x LTS Server (das Installationsmedium finden Sie hier) und konfigurieren die A- und AAAA-Records für den BigBlueButtonServer.

Für den nachfolgenden Screenshot und den weiteren Verlauf dieser Anleitung verwende ich als Synonym die Werte „bbb.c-rieger.de“ und „ihre.domäne.de“. Bitte ersetzen Sie diese Domäne an allen Stellen mit ihrer Domäne.

Beispiel A(AAA)-Records

Nach der Ubuntu 16.04.x-Serverinstallation beginnen wir mit der Überprüfung aller Voraussetzungen für eine BigBlueButton Serverinstallation. Überprüfen wir also zuerst die Spracheinstellungen am Server, erwartet wird „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 installieren wir die Firewall (ufw)

apt install -y ufw

und richten diese wie folgt ein:

ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 7443/tcp
ufw allow 16384:32768/udp
ufw logging medium
ufw default deny incoming
ufw enable
ufw status verbose

Nun setzen wir den hostnamen

nano /etc/hosts

nach der folgenden Systax:
EXTERNAL_IP_ADDRESS EXTERNAL_HOST_NAME

45.129.182.95 bbb.c-rieger.de

Mit Hinblick auf die Verwendung von Let’s Encrypt und der Verwendung von https konfigurieren wir die Softwarequellen:

apt update
apt install -y software-properties-common
add-apt-repository universe
add-apt-repository ppa:certbot/certbot
apt install -y certbot

Dann erstellen wir einen 4096-Bit diffie-hellman Schlüssel um die Sicherheit zu erhöhen.

mkdir -p /etc/nginx/ssl
openssl dhparam -out /etc/nginx/ssl/dhp-4096.pem 4096

Die SSL-Zertifikate selbst erstellen wir erst später im Anschluß an die BigBlueButton-Installation.

Bevor die Installation beginnt muss noch geprüft werden, ob xenial multiverse in der /etc/apt/sources.list verfügbar ist:

grep "multiverse" /etc/apt/sources.list

Sollte der grep kein Ergebnis anzeigen, so ergänzen Sie die fehlende Softwarequelle durch:

echo "deb http://archive.ubuntu.com/ubuntu/ xenial multiverse" | sudo tee -a /etc/apt/sources.list

Nun fügen wir die BBB Softwarequellen hinzu und starten die Installation:

add-apt-repository ppa:bigbluebutton/support -y
add-apt-repository ppa:rmescandon/yq -y
add-apt-repository ppa:libreoffice/ppa
apt update && apt dist-upgrade

Der HTML5-Client benötigtdie MongoDB und nodejs:

wget -qO - https://www.mongodb.org/static/pgp/server-3.4.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
apt update && apt install -y mongodb-org curl
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
apt install -y nodejs

Fügen Sie den BBB-Schlüssel und den BBB-Download zum Server hinzu:

wget https://ubuntu.bigbluebutton.org/repo/bigbluebutton.asc -O- | sudo apt-key add -
echo "deb https://ubuntu.bigbluebutton.org/xenial-22/ bigbluebutton-xenial main" | sudo tee /etc/apt/sources.list.d/bigbluebutton.list
apt update

Es ist soweit, die Installation beginnt:

apt install -y bigbluebutton bbb-html5
apt-get install -f && apt dist-upgrade

Die Installation ist nun bereits abgeschlossen und die Konfiguration beginnt. Wir ersetzen den Flash- mit dem HTML5-Client. Dazu sichern wir die Datei

cp /usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties /usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties.bak

und bearbeiten

nano /usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties
[...]
attendeesJoinViaHTML5Client=true
...
moderatorsJoinViaHTML5Client=true
[...]

Weitere, globale Einstellungen für den HTML5-Client werden in der Datei

/usr/share/meteor/bundle/programs/server/assets/app/config/settings.yml

vorgenommen. Weitere Informationen finden Sie hier.

Bevor wir nun die SSL-Zertifikate erstellen und einbinden können müssen wir BBB konfigurieren.

bbb-conf --setip ihre.domäne.de

Ersetzen Sie ihre.domäne.de und requestieren dann die SSL-Zertifikate:

certbot --webroot -w /var/www/bigbluebutton-default/ -d ihre.domäne.de certonly

Ersetzen Sie erneut „ihre.domäne.de“ mit ihrer richtigen Domäne, bspw. bbb.c-rieger.de

IMPORTANT NOTES:

  • Congratulations! Your certificate and chain have been saved at
    /etc/letsencrypt/live/ihre.domäne.de/fullchain.pem. Your cert will
    expire on 2020-YY-ZZ. To obtain a new version of the certificate in
    the future, simply run Let’s Encrypt again.
  • If you like Let’s Encrypt, please consider supporting our work by: Donating to ISRG / Let’s Encrypt: https://letsencrypt.org/donate
    Donating to EFF: https://eff.org/donate-le

Sie finden die neuen Zertifikatsdateien (cert.pem, chain.pem, fullchain.pem, privkey.pem) unter

ls /etc/letsencrypt/live/ihre.domäne.de

Passen Sie nun den Webserver nginx an:

cp /etc/nginx/sites-available/bigbluebutton /etc/nginx/sites-available/bigbluebutton.bak
nano /etc/nginx/sites-available/bigbluebutton

Kopieren und ersetzen Sie die folgenden Zeilen und ihre.domäne.de mit ihrer Domäne:

server {
listen 80;
listen [::]:80;
server_name ihre.domäne.de;
listen 443 ssl;
listen [::]:443 ssl;
ssl_certificate /etc/letsencrypt/live/ihre.domäne.de/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ihre.domäne.de/privkey.pem;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS:!AES256";
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/nginx/ssl/dhp-4096.pem;
access_log /var/log/nginx/bigbluebutton.access.log;
[...]

Testen sie die neue Webserverkonfiguration

nginx -t

und starten den Webserver neu, sofern die Syntaxprüfung okay war.

systemctl restart nginx

Denken Sie unbedingt daran, die Domäne gemäß Ihrer Domäne umzubenennen. Um die Zertifikate automatisch erneuern zu lassen richten wir noch zwei Cronjobs ein:

crontab -e
30 2 * * 1 /usr/bin/certbot renew >> /var/log/le-renew.log
35 2 * * 1 /bin/systemctl reload nginx

Auch die FreeSWITCH Konfiguration muss für SSL noch angepasst werden:

cp /etc/bigbluebutton/nginx/sip.nginx /etc/bigbluebutton/nginx/sip.nginx.bak
nano /etc/bigbluebutton/nginx/sip.nginx
location /ws {
        proxy_pass https://<ihre-ip.de>:7443;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_read_timeout 6h;
        proxy_send_timeout 6h;
        client_body_timeout 6h;
        send_timeout 6h;

        auth_request /bigbluebutton/connection/checkAuthorization;
        auth_request_set $auth_status $upstream_status;
}

Ebenso muss BBB noch für die Verwendung von https-Sessions angepasst werden:

1. bigbluebutton.properties

cp /usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties /usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties.bak
nano /usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties
bigbluebutton.web.serverURL=https://ihre.domäne.de

2. screenshare.properties

cp /usr/share/red5/webapps/screenshare/WEB-INF/screenshare.properties /usr/share/red5/webapps/screenshare/WEB-INF/screenshare.properties.bak
nano /usr/share/red5/webapps/screenshare/WEB-INF/screenshare.properties
streamBaseUrl=rtmp://bigbluebutton.example.com/screenshare
jnlpUrl=https://ihre.domäne.de/screenshare
jnlpFile=https://ihre.domäne.de/screenshare/screenshare.jnlp

3. config.xml

sed -e 's|http://|https://|g' -i /var/www/bigbluebutton/client/conf/config.xml

4. kurento ws

cp /usr/share/meteor/bundle/programs/server/assets/app/config/settings.yml /usr/share/meteor/bundle/programs/server/assets/app/config/settings.yml.bak
nano /usr/share/meteor/bundle/programs/server/assets/app/config/settings.yml
kurento:
wsUrl: wss://ihre.domäne.de/bbb-webrtc-sfu

und

note:
enabled: true
url: https://ihre.domäne.de/pad

5. bigbluebutton.yml

cp /usr/local/bigbluebutton/core/scripts/bigbluebutton.yml /usr/local/bigbluebutton/core/scripts/bigbluebutton.yml.bak
nano /usr/local/bigbluebutton/core/scripts/bigbluebutton.yml
playback_protocol: https

Schließen Sie die Konfiguration ab und starten BBB neu:

bbb-conf --restart

Um BigBlueButton administrieren zu können und eine Benutzerverwaltung nutzen zu können bedienen wir uns greenlight. Dazu gehen wir wie folgt vor:

6. Installation von docker und docker-compose

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 lauffähig ist:

docker -v

Legen Sie den ~/greenlight Ordner an und wechseln Sie in diesen 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:

docker run --rm bigbluebutton/greenlight:v2 bundle exec rake secret

Setzen Sie das Secret in der Datei .env und der Variable SECRET_KEY_BASE.

cd ~/greenlight
nano .env

Zusätzlich führen Sie

bbb-conf --secret

aus und setzen ebenfalls in der Datei ~/greenlight/.env die Werte in den Variablen BIGBLUEBUTTON_ENDPOINT (die dargestellte URL), BIGBLUEBUTTON_SECRET (das dargestellte Secret) und SAFE_HOSTS (ohne https, also bspw: bbb.c-rieger.de).

Überprüfen Sie dann die Konfiguration mittels:

cd ~/greenlight
docker run --rm --env-file .env bigbluebutton/greenlight:v2 bundle exec rake conf:check

Ohne SMTP 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 <ihredomäne.de> installiert, wodurch später keine Konflikte mit BBB auftreten können.

docker run --rm bigbluebutton/greenlight:v2 cat ./greenlight.nginx | sudo tee /etc/bigbluebutton/nginx/greenlight.nginx

Prüfen Sie diese neu generierte Datei:

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;
}

Starten Sie letztmalig den Webserver nginx neu:

systemctl restart nginx

Um Greenlight zu starten wird docker-compose benötigt. Prüfen Sie, ob es bereits vorhanden ist:

cd ~/greenlight
docker-compose -v

Ist es nicht vorhanden, so installieren Sie es wie folgt nach:

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

cd ~/greenlight
docker-compose up -d

und rufen dann BigBlueButton und greenlight erstmalig auf:

https://<ihredomäne.de>

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 den realen Werten Ihres Administrato-Accounts. 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. Dazu editieren Sie die Datei

mv /usr/share/bbb-web/WEB-INF/classes/spring/turn-stun-servers.xml /usr/share/bbb-web/WEB-INF/classes/spring/turn-stun-servers.xml.bak
nano /usr/share/bbb-web/WEB-INF/classes/spring/turn-stun-servers.xml

und passen diese Zeilen vorab an Ihr System an:

...
<constructor-arg index="0" value="stun:coturn.ihre.domain:5349"/>
...
<constructor-arg index="0" value="abc...gh...987"/>
<constructor-arg index="1" value="turns:coturn.ihre.domain:5349?transport=tcp"/>
...
<constructor-arg index="0" value="abc...gh...987"/>
<constructor-arg index="1" value="turn:coturn.ihre.domain:5349?transport=tcp"/>
...

Kopieren Sie dann den gesamten Inhalt in die noch leere Datei:

<bean id="stun0" class="org.bigbluebutton.web.services.turn.StunServer">
    <constructor-arg index="0" value="stun:coturn.ihre.domain:5349"/>
</bean>


<bean id="turn0" class="org.bigbluebutton.web.services.turn.TurnServer">
    <constructor-arg index="0" value="abc...gh...987"/>
    <constructor-arg index="1" value="turns:coturn.ihre.domain:5349?transport=tcp"/>
    <constructor-arg index="2" value="86400"/>
</bean>

<bean id="turn1" class="org.bigbluebutton.web.services.turn.TurnServer">
    <constructor-arg index="0" value="abc...gh...987"/>
    <constructor-arg index="1" value="turn:coturn.ihre.domain: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"/>
            <ref bean="turn1"/>
        </set>
    </property>
</bean>

und starten dann BigBlueButton neu:

bbb-conf --restart

Somit nutzen Sie ihren eigenen coturn-Server und verlassen Ihre Serverumgebung nicht. Die asugezeichnete Integration in Ihre Nextcloud beschreibt der folgende Artikel auf dieser Webseite.

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