BigBlueButton

13 juin 2020 Non Par nospheratus
Remote Teaching and Web Lecturing | Pukunui + BigBlueButton
BigBlueButton

 Installation des prérequis :

Prérequis : OS Ubuntu 16.04 LTS 64bit. 16GB de RAM – 8cpu – 500GB de Disk.

Tout d’abord s’assurer que le système est bien à jour :

$ grep « multiverse » /etc/apt/sources.list

 Il faut avoir une ligne non commentée du genre

deb http://archive.ubuntu.com/ubuntu xenial multiverse

 L’important est « multiverse » et que la ligne ne soit pas commentée.

Si y a pas alors :

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

 Sur les environnements virtuels, l’entropie étant trop faible il faut la simuler, donc on installe le logiciel haveged

$ sudo apt-get install haveged

 Il faut ensuite ajouter certains repository qui sont indispensables pour BBB.

$ sudo add-apt-repository ppa:bigbluebutton/support -y

$ sudo add-apt-repository ppa:rmescandon/yq -y

$ sudo add-apt-repository ppa:libreoffice/ppa

Ensuite Update & Upgrade :

$ sudo apt-get update && apt-get dist-upgrade –y && apt-get upgrade –y && apt autoremove –y

BBB utilise MongoDB qui est une base de données très rapide pour synchroniser les clients. On l’installe donc :

$ 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

$ sudo apt-get update

$ sudo apt-get install -y mongodb-org curl

Le client BBB html5 necessite nodejs :

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash –

sudo apt-get install -y nodejs

 Installation de la clefs apt-get de BBB :

 $ wget https://ubuntu.bigbluebutton.org/repo/bigbluebutton.asc -O- | sudo apt-key add –

Pour le cas où il s’agit d’une mise à jour il faut purger l’ancienne version :

$ sudo bbb-conf –stop

$ sudo apt-get purge -y bbb-client

Il faut ensuite ajouter le repository BBB :

$ echo « deb https://ubuntu.bigbluebutton.org/xenial-22/ bigbluebutton-xenial main » | sudo tee /etc/apt/sources.list.d/bigbluebutton.list

 Puis mettre à jour la liste des paquets :

$ sudo apt-get update

 Installation de BBB

$ sudo apt-get install bigbluebutton -y
$ sudo apt-get install bbb-html5 -y

 Afin d’être sur que tout soit bien à jour :

$ sudo apt-get dist-upgrade -y

Enfin il faut lancer le service

$ sudo bbb-conf –restart

Ne pas tenir compte si une erreur comme celle-ci apparait :

 # Not running: tomcat7 or grails ou Error: Could not connect to the configured hostname/IP address

 Après que le redémarrage soit fini, vérifier la conf de BBB :

$ sudo bbb-conf –check

BigBlueButton Server 2.2.5 (1848)

                    Kernel version: 4.4.0-177-generic

                      Distribution: Ubuntu 16.04.6 LTS (64-bit)

                            Memory: 32945 MB

                         CPU cores: 16

/usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties (bbb-web)

       bigbluebutton.web.serverURL: https://bbb.univ-fcomte.fr

                defaultGuestPolicy: ALWAYS_ACCEPT

                 svgImagesRequired: true

/etc/nginx/sites-available/bigbluebutton (nginx)

                       server name: bbb.univ-fcomte.fr

                              port: 80, [::]:80

                              port: 443 ssl

                    bbb-client dir: /var/www/bigbluebutton

/var/www/bigbluebutton/client/conf/config.xml (bbb-client)

                Port test (tunnel): rtmp://bbb.univ-fcomte.fr

                              red5: bbb.univ-fcomte.fr

              useWebrtcIfAvailable: true

/opt/freeswitch/etc/freeswitch/vars.xml (FreeSWITCH)

                       local_ip_v4: 194.57.76.115

                   external_rtp_ip: stun:stun.freeswitch.org

                   external_sip_ip: stun:stun.freeswitch.org

/opt/freeswitch/etc/freeswitch/sip_profiles/external.xml (FreeSWITCH)

                        ext-rtp-ip: $${local_ip_v4}

                        ext-sip-ip: $${local_ip_v4}

                        ws-binding: :5066

                       wss-binding: :7443

/usr/local/bigbluebutton/core/scripts/bigbluebutton.yml (record and playback)

                     playback_host: bbb.univ-fcomte.fr

                 playback_protocol: https

                            ffmpeg: 4.2.2-1bbb1~ubuntu16.04

/etc/bigbluebutton/nginx/sip.nginx (sip.nginx)

                        proxy_pass: 194.57.76.115

/usr/local/bigbluebutton/bbb-webrtc-sfu/config/default.yml (Kurento SFU)

                        kurento.ip: 194.57.76.115

                       kurento.url: ws://127.0.0.1:8888/kurento

                    localIpAddress: 194.57.76.115

               recordScreenSharing: true

                     recordWebcams: true

                  codec_video_main: VP8

               codec_video_content: VP8

/usr/share/meteor/bundle/programs/server/assets/app/config/settings.yml (HTML5 client)

                             build: 874

                        kurentoUrl: wss://bbb.univ-fcomte.fr/bbb-webrtc-sfu

                  enableListenOnly: true

# Potential problems described below

 On peut aussi utiliser :

$ sudo bbb-conf --status

root@BigBlueButton:~# bbb-conf –status

nginx —————————————————► [✔ – active]

freeswitch ————————————► [✔ – active]

redis-server ——————————► [✔ – active]

bbb-apps-akka —————————► [✔ – active]

bbb-transcode-akka ————► [✔ – active]

bbb-fsesl-akka ————————► [✔ – active]

red5 ——————————————————► [✔ – active]

mongod ————————————————► [✔ – active]

bbb-html5 —————————————► [✔ – active]

bbb-webrtc-sfu ————————► [✔ – active]

kurento-media-server ——► [✔ – active]

etherpad ——————————————► [✔ – active]

bbb-web ———————————————► [✔ – active]

A ce moment-là, le serveur BBB écoute en IPv4 sur l’adresse du serveur. Si l’on ouvre un navigateur sur l’IP on aura l’écran de bienvenu :

Toutes-fois, on ne peut pas se loguer sur BBB. Il est possible d’installer les API-demos, pour essayer, mais dans le cadre de ce tuto, nous nous en passerons.

D’ici il est déjà possible d’utiliser BBB avec une application tierce tel que Moodle. Pour ce faire il faut récupérer l’adresse d’accès à l’API ainsi que le code secret :

$ sudo bbb-conf –secret

root@BigBlueButton:~# bbb-conf –secret

    URL: https://bbb.univ-fcomte.fr/bigbluebutton/

    Secret: GJot1EDTu2pXXXXXXXXXXIh3wcz3sEds4jLWQ7pGTo

Pour relancer le serveur & vérifier le bon fonctionnement :

$ sudo bbb-conf --restart
$ sudo bbb-conf --check

 Affectation d’un hostname au serveur

Afin que le serveur réponde sur son nom de domaine il convient de le configurer dans BBB

$ sudo bbb-conf –setip HOSTNAME

Par ex si le hostname du serveur est bbb.univ-fcomte.fr :

$ sudo bbb-conf –setip bbb.univ-fcomte.fr

Configuration du SSL

 Afin de simplifier les choses, nous allons utiliser Let’s Encrypt

$ sudo apt-get update
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository universe
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get install certbot
sudo mkdir -p /etc/nginx/ssl
sudo openssl dhparam -out /etc/nginx/ssl/dhp-4096.pem 4096

On fait ensuite une requete de SSL avec le nom de domaine que l’on a choisi pour BBB à l’étape d’avant :

 $ sudo certbot –webroot -w /var/www/bigbluebutton-default/ -d bbb.univ-fcomte.fr certonly

 Ceci génère les fichiers suivant :

 $ ls /etc/letsencrypt/live/bbb.univ-fcomte.fr/

cert.pem  chain.pem  fullchain.pem  privkey.pem

 Il faut ensuite éditer le fichier de configuration nginx :

/etc/nginx/sites-available/bigbluebutton

Il faut ajouter ce qui est en rouge :

server {
  server_name bbb.univ-fcomte.fr;
  listen 80;
  listen [::]:80;

  listen 443 ssl;

  listen [::]:443 ssl;

  ssl_certificate /etc/letsencrypt/live/bbb.univ-fcomte.fr/fullchain.pem;

  ssl_certificate_key /etc/letsencrypt/live/ bbb.univ-fcomte.fr /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;

 Les certificats let’s encrypt fonctionnent 90 jours. On ajoute une tache planifier pour le renouveler une fois par semaine :

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

 Configuration de FreeSWITCH avec SSL

 Sur le firewall il convient d’ouvrir le 7443 à la place du 5066.

 Editer le fichier /etc/bigbluebutton/nginx/sip.nginx

Et modifier comme en rouge :

location /ws {

  proxy_pass https:// 194.57.76.115: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;
}

Configuration de BBB pour charger les sessions en HTTPS

 Nous avons configuré nginx pour utiliser SSL maintenant il faut configurer FreeSWITCH pour utiliser https dans les connexions audio.

 Il faut éditer :

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

 Dans le fichier il faut mettre à jour la propriété « bigbluebutton.web.serverURL » pour utiliser https :

bigbluebutton.web.serverURL=https://bbb.univ-fcomte.fr
 
 Puis éditer le fichier 
/usr/share/red5/webapps/screenshare/WEB-INF/screenshare.properties
Et mettre à jour la propriété « jnlpUrl » et « jnlpFile » : 
streamBaseUrl=rtmp://bbb.univ-fcomte.fr/screenshare
jnlpUrl=https://bbb.univ-fcomte.fr/screenshare
jnlpFile=https://bbb.univ-fcomte.fr/screenshare/screenshare.jnlp
 
 Il faut aussi mettre à jour le fichier /var/www/bigbluebutton/client/conf/config.xml pour indiquer au client BBB de charger les composants en https : 

$ sudo sed -e ‘s|http://|https://|g’ -i /var/www/bigbluebutton/client/conf/config.xml

 
 Puis ouvrir le fichier : 

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

Et changer : 
kurento:
    wsUrl: ws://bbb.example.com/bbb-webrtc-sfu
en 
kurento:
    wsUrl: wss://bbb.example.com/bbb-webrtc-sfu
et 
note:
    enabled: true
    url: http://bbb.example.com/pad

en

  note:
    enabled: true
    url: https://bbb.example.com/pad
 
Enfin il faut aussi modifier la manière dont les enregistrements sont fournis en modifiant dans le fichier :
/usr/local/bigbluebutton/core/scripts/bigbluebutton.yml
ð  playback_protocol: https
 
Enfin pour valider tout ça on relance les services : 

$ sudo bbb-conf –restart

 

GreenLight

 Greenlight est une interface qui permet d’utiliser BBB directement. Il gère les salons, les utilisateurs, et les enregistrements. Il dispose d’une interface d’administration qui permet de configurer BBB suivant ses convenances.

Greenlight ne nécessite pas de disposer d’un système complet, mais doit être suffisamment cloisonné de BBB pour que les deux systèmes ne se perturbent pas. Aussi nous allons utiliser Docker CE.

Installation de Docker sur le serveur

 Configuration du repository pour utiliser https :

$ sudo apt-get update

$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

Ajout de la clef GPG officielle de Docker

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add –

$ sudo add-apt-repository « deb [arch=adm64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable « 

Installation du moteur Docker 

$ sudo apt-get update

$ sudo apt-get install docker-ce docker-ce-cli containerd.io

On vérifie ensuite que Docker est opérationnel :

docker -v

Installation de Greenlight

 Tout d’abord, on crée un dossier pour conserver les configurations

$ mkdir /opt/greenlight && cd /opt/greenlight

le contenair Greenlight va lire son environnement et sa configuration dans un fichier .env

Pour le générer et installer l’image Docker de Greenlight il faut lancer cette commande :

docker run –rm bigbluebutton/greenlight:v2 cat ./sample.env > .env

Le fichier se trouve /opt/greenlight/.env

Configuration de Greenlight

 Greenlight a besoin d’une clef secrète, pour la générer :

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

Cela vous donnera la clef qu’il faut mettre dans le fichier .env à la propriété « SECRET_KEY_BASE »

Configurer la liaison avec BBB

 Il faut utiliser bbb-conf –secret et récupérer l’URL & la clef secrète de BBB afin de remplir dans le fichier .env les propriétés : « BIGBLUEBUTTON_ENDPOINT » et « BIGBLUEBUTTON_SECRET »

 Configuration du host

 Pour des raisons de sécurité, nous allons restreindre l’accès à Greenlight à un seul nom de domaine. Par défaut BBB via Greenlight est accessible via https://bbb.univ-fcomte.fr donc il faut remplir la propriété « SAFE_HOSTS=bbb.univ-fcomte.fr » dans le fichier .env

Mise en place de l’authentification LDAP et SMTP et config particulière

 Dans le fichier .env il y a des sections consacrées au ldap et au smtp :

  • LDAP_SERVER=ldaps.univ-fcomte.fr
  • LDAP_PORT=636
  • LDAP_METHOD=ssl
  • LDAP_UID=uid
  • LDAP_BASE=ou=people,dc=univ-fcomte,dc=fr
  • LDAP_BIND_DN=cn=bigbluebutton,ou=services,dc=univ-fcomte,dc=fr
  • LDAP_PASSWORD=passwordldap
  • LDAP_ROLE_FIELD=

Puis :

Enfin on place la configuration de base des salons : la configuration par défaut 

  • ROOM_FEATURES=mute-on-join,require-moderator-approval,anyone-can-start,all-join-moderator

Vérification de notre configuration

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

 Les 4 tests doivent être OK.

Configuration Nginx pour diriger tout le trafic de BBB sur Greenlight

 Il faut adapter la configuration de nginx de BBB pour que lorsque l’on accède au domaine de bbb on soit automatiquement renvoyé sur Greenlight (ceci afin de forcer l’authentification des utilisateurs pour créer des salons)

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

 Puis il faut ajouter en bas du fichier de conf de nginx (/etc/nginx/sites-available/bigbluebutton) :

location = / {
return 3007 /b;
}

Enfin on relance nginx : sudo systemctl restart nginx

Démarrage de Greenlight

 Il convient de copier le docket-compose.yml de Greenlight dans le dossier, afin qu’il ne soit pas régénéré à chaque lancement :

docker run –rm bigbluebutton/greenlight:v2 cat ./docker-compose.yml > docker-compose.yml

 Il faut ensuite générer un password pour la base de données PostgreSQL et modifier les entrées dans le fichier .env

Pour cela on utilise la commande :

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

A présent tout est prêt. Il suffit de lancer le contenair :

cd /opt/greenlight/ && docker-compose up

Mises à jours de Greenlight

Pour mettre à jour Greenlight, il suffit d’utiliser la dernière version de l’image sur Dockerhub :

cd /opt/greenlight
docker pull bigbluebutton/greenlight:v2
docker-compose down
docker-compose up

Installation du Composant bbb-download

 Il a été demandé comment récupérer les enregistrements sous forme de fichiers vidéos. Actuellement BBB ne prévoit pas cette fonctionnalité. De ce fait il faut ajouter un composant qui va encoder avec ffmpeg les fichiers BBB. Par contre, le tableau blanc, ainsi que le chat ne sont pas présents dans les vidéos.

Pour installer :

cd /opt/
git clone https://github.com/createwebinar/bbb-download.git
cd bbb-download
chmod u+x install.sh
sudo ./install.sh

 Si l’on veut encoder toutes les vidéos déjà présentes on utilise :

sudo bbb-record –rebuildall

 Pour télécharger la vidéo le lien est :

 Tunning BBB

 Augmenter le nombre de fichiers ouverts par défaut pour augmenter les capacités d’accueil de BBB :

vi /etc/security/limits.conf

  • *               –       nofile          65535

Changer le tableau blanc :

  • On crée son propre tableau dans powerpoint et on l’appelle par ex : ufc.pptx
  • On convertit le fichier en pdf
  • On copie les fichiers dans /var/www/bigbluebutton-default/
  • On modifie le fichier /usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties

beans.presentationService.defaultUploadedPresentation=${bigbluebutton.web.serverURL}/ufc.pdf

Complément Prometheus pour métrologie

 Afin de pouvoir visualiser les ressources du serveur, nous allons ajouter un composant qui va interroger l’API de BBB afin de récupérer des mètrics qui pourront ensuite être utilisable dans des outils comme Grafana

On va utiliser le composant bbb-exporter avec prometheus :

On créé un dossier /opt/bbb-monitoring

On  dépose dans ce dossier les fichiers du github : https://github.com/greenstatic/bigbluebutton-exporter/tree/master/extras/all_in_one_monitoring

  • bbb_exporter_secrets.env
  • docker-compose.yaml
  • prometheus.yaml

Dans tous les fichiers il faut modifier les références example.com par bbb.univ-fcomte.fr

On récupère notre BBB secret : bbb-cong –secret

On ajoute les valeurs dans le fichier bbb_exporter_secrets.env

Vu que notre serveur Grafana est extérieur on efface le bloc « grafana » du fichier « docker-compose.yaml »

On modifie l’adresse sur laquelle va écouter Prometheus dans le fichier prometheus.yaml

  • remplace [localhost :9090]  par [‘194.57.76.115:9090’]

On démarre les services :

cd /opt/bbb-monitoring

docker-compose up –d

 De là nous avons notre prometheus qui est dispo et qui va récupérer des métrics : http://bbb.univ-fcomte.fr:9090/  L’interface de Prometheus étant assez rudimentaire, il est donc préférable d’utiliser notre serveur Grafana pour créer les graphiques. Il suffit d’ajouter une source de données Prometheus et de lui mettre l’adresse http://bbb.univ-fcomte.fr:9090/