BigBlueButton
Updated 8 Avril 2021
BigBlueButton est un outil de conférence Web open source. Au départ, elle a été conçue à des fins éducatives. Son nom vient de l'idée de base, qui est de pouvoir démarrer une conférence Web aussi facilement que possible, comme si l'on appuyait sur un "gros bouton bleu".
Créer un conteneur LXC
BigBlueButton est développé et testé sur Ubuntu Xenial. Vous pouvez installer Ubuntu dans un conteneur LXC. Pour créer un conteneur LXC, il faut d'abord installer les paquets requis :
emerge -a app-emulation/lxc dev-libs/libcgroup
Lancez cgconfig pour créer le cgroup systemd :
/etc/init.d/cgconfig start
Si Docker est utilisé dans un conteneur LXC, chargez les modules du noyau nécessaires sur l'hôte et ajoutez-les à la liste de démarrage automatique :
modprobe -a br_netfilter ip_tables nf_conntrack_netlink nf_nat overlay xt_conntrack
echo -e "br_netfilter\nip_tables\nnf_conntrack_netlink\nnf_nat\noverlay\nxt_conntrack" > /etc/modules-load.d/docker.conf
Créez un conteneur pour BigBlueButton :
lxc-create -t download -n bigbluebutton -- -d ubuntu -r xenial -a amd64
Lancez-le :
lxc-start bigbluebutton
Configurez votre réseau conformément aux [instructions] (lxc#nastroika_seti_konteinera), mais n'attribuez pas d'adresse IP ni de passerelle en modifiant le fichier de configuration du conteneur.
Autorisez l'exécution du test hello-world pour Docker :
lxc.cgroup.devices.allow = c 10:200 rwm
Modifiez les paramètres du réseau dans le conteneur. Indiquez l'adresse IP, le masque de réseau, la passerelle par défaut et les adresses des serveurs DNS :
... auto eth0 iface eth0 inet static address 192.168.11.2 netmask 255.255.255.0 gateway 192.168.11.1 dns-nameservers 8.8.8.8 ...
Relancez le conteneur.
lxc-stop -r bigbluebutton
Connectez le conteneur :
lxc-attach bigbluebutton
Actualisez le dépôt binaire :
Installez le client et le serveur SSH :
Modifiez le mot de passe root :
Autorisez l'utilisateur root à se connecter via SSH :
...
PermitRootLogin yes
...
Relancez SSH:
Réinitialisez la locale :
Vérifiez que la locale est bien définie en tant que variable d'environnement :
Ajoutez la définition du serveur comme meet.example.org :
127.0.0.1 meet.example.org bigbluebutton localhost
Comme l'installation se fait dans un conteneur, certains composants de BigBlueButton ont besoin d'une source entropy. Installez le générateur de nombres aléatoires :
Ajoutez le démon à la liste de démarrage automatique et lancez-le :
Installez la boîte à outils de gestion des dépôts :
Installer et configurer BigBlueButton
Ajoutez les dépôts à partir desquels l'installation doit être effectuée :
Activez le dépôt MongoDB et installez la base de données :
Ajoutez le dépôt NodeJS avec la version 8.x et mettez-le en place :
Ajoutez la clé et le dépôt BigBlueButton :
Lancez l'installation de BigBlueButton :
Vous serez tenu d'accepter la licence EULA.
En raison des limitations de LXC, le processus d'installation ne peut pas être achevé si Redis et FreeSWITCH ne peuvent pas démarrer.
Corrigez le module de démarrage de Redis en désactivant les restrictions manquantes :
[Unit] Description=Advanced key-value store After=network.target Documentation=http://redis.io/documentation, man:redis-server(1) [Service] Type=forking ExecStart=/usr/bin/redis-server /etc/redis/redis.conf PIDFile=/var/run/redis/redis-server.pid TimeoutStopSec=0 Restart=always User=redis Group=redis ExecStartPre=-/bin/run-parts --verbose /etc/redis/redis-server.pre-up.d ExecStartPost=-/bin/run-parts --verbose /etc/redis/redis-server.post-up.d ExecStop=-/bin/run-parts --verbose /etc/redis/redis-server.pre-down.d ExecStop=/bin/kill -s TERM $MAINPID ExecStopPost=-/bin/run-parts --verbose /etc/redis/redis-server.post-down.d UMask=007 #PrivateTmp=yes #PrivateDevices=yes #ProtectHome=yes #ReadOnlyDirectories=/ #ReadWriteDirectories=-/var/lib/redis #ReadWriteDirectories=-/var/log/redis #ReadWriteDirectories=-/var/run/redis #CapabilityBoundingSet=~CAP_SYS_PTRACE # redis-server writes its own config file when in cluster mode so we allow # writing there (NB. ProtectSystem=true over ProtectSystem=full) #ProtectSystem=true #ReadWriteDirectories=-/etc/redis [Install] WantedBy=multi-user.target Alias=redis.service
Démarrez Redis :
Corrigez le module de démarrage de FreeSWITCH en désactivant les restrictions manquantes :
[Unit] Description=freeswitch After=syslog.target network.target local-fs.target [Service] ; service Type=forking PIDFile=/opt/freeswitch/var/run/freeswitch/freeswitch.pid Environment="DAEMON_OPTS=-nonat" EnvironmentFile=-/etc/default/freeswitch ExecStart=/opt/freeswitch/bin/freeswitch -u freeswitch -g daemon -ncwait $DAEMON_OPTS TimeoutSec=45s Restart=always ; exec WorkingDirectory=/opt/freeswitch User=freeswitch Group=daemon #LimitCORE=infinity #LimitNOFILE=100000 #LimitNPROC=60000 #LimitSTACK=250000 #LimitRTPRIO=infinity #LimitRTTIME=7000000 #IOSchedulingClass=realtime #IOSchedulingPriority=2 #CPUSchedulingPolicy=rr #CPUSchedulingPriority=89 #UMask=0007 [Install] WantedBy=multi-user.target
Lancez FreeSWITCH:
Reprenez l'installation :
Installer BigBlueButton HTML5 :
Pour réduire les bruits d'impulsion, réglez le niveau sonore pour la transmission de la voix entre utilisateurs :
<profile name="cdquality">
<param name="domain" value="$${domain}"/>
<param name="rate" value="48000"/>
<param name="interval" value="20"/>
<param name="energy-level" value="10"/>
...
Redémarrer BigBlueButton:
Contrôler les erreurs de configuration :
Spécifiez le nom d'hôte pour BigBlueButton, meet.example.org :
Configuration HTTPS
Obtenir le certificat Let's Encrypt
Procurez-vous un certificat pour le domaine meet.example.org, comme expliqué dans le manuel.
Configuration HTTPS pour Nginx
Créer un répertoire dédié aux certificats :
Copiez les certificats reçus via Let's Encrypt :
Créer une clé DH :
Ajoutez HTTPS Nginx:
server { server_name meet.example.org; listen 80; listen [::]:80; listen 443 ssl; listen [::]:443 ssl; ssl_certificate /etc/nginx/ssl/meet.example.org/fullchain.pem; ssl_certificate_key /etc/nginx/ssl/meet.example.org/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; if ($scheme = http) { return 301 https://$server_name$request_uri; } ...
Configuration FreeSWITCH pour SSL
Configurez FreeSWITCH pour l'utilisation de SSL. Pour ce faire, indiquez l'adresse externe :
location /ws {
proxy_pass https://1.2.3.4: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;
}
Important
Il est à noter que c'est l'adresse IP externe qui est indiquée dans cette configuration, et non le nom de l'hôte.
Configurer BigBlueButton pour l'exécution de sessions HTTPS
Configurez BigBlueButton pour l'exécution de sessions HTTPS et HTML5 :
... #---------------------------------------------------- # This URL is where the BBB client is accessible. When a user sucessfully # enters a name and password, she is redirected here to load the client. # Do not commit changes to this field. bigbluebutton.web.serverURL=https://meet.example.org ... # Force all attendees to join the meeting using the HTML5 client attendeesJoinViaHTML5Client=true # Force all moderators to join the meeting using the HTML5 client moderatorsJoinViaHTML5Client=true
Partagez l'accès à l'écran, aussi par HTTPS :
... streamBaseUrl=rtmp://meet.example.org/screenshare jnlpUrl=https://meet.example.org/screenshare jnlpFile=https://meet.example.org/screenshare/screenshare.jnlp
Demander au client de charger les composants via HTTPS :
Configurer WebRTC via le socket SSL :
... kurento: wsUrl: wss://meet.example.org/bbb-webrtc-sfu ... note: enabled: true url: https://meet.example.org/pad ...
Configurez le traitement des enregistrements via HTTPS :
...
playback_protocol: https
Redémarrer BigBlueButton:
Redémarrez Nginx :
Configuration d'un serveur TURN
Configurez votre serveur TURN, turn.example.org, comme expliqué dans le manuel.
Indiquez à BigBlueButton d'utiliser le serveur turn.example.org configuré comme serveur STUN et TURN. Pour vous connecter au serveur TURN, utilisez la clé 4b85833c7fdf06130bd7398ac9af558b. Elle est enregistrée dans static-auth-secret, dans les paramètres de votre serveur TURN.
<?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.example.org"/> </bean> <bean id="turn0" class="org.bigbluebutton.web.services.turn.TurnServer"> <constructor-arg index="0" value="4b85833c7fdf06130bd7398ac9af558b"/> <constructor-arg index="1" value="turns:turn.example.org: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="4b85833c7fdf06130bd7398ac9af558b"/> <constructor-arg index="1" value="turn:turn.example.org: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>
Redémarrer BigBlueButton:
Configurer Greenlight
Greenlight est une application Ruby on Rails qui fournit une interface simple permettant aux utilisateurs de créer des salles, d'organiser des conférences et de gérer les enregistrements de celles-ci.
Installez les outils nécessaires pour connecter le dépôt :
Ajoutez les clés et associez le dépôt de Docker :
Installez Docker 17.09.1 :
Vérifiez que Docker fonctionne en démarrant le conteneur hello-world :
Désactivez la mise à jour de docker-ce :
Créez un répertoire de configuration pour GreenLight :
Préparez un exemple de fichier de configuration GreenLight :
Créez une clé secrète pour GreenLight :
Enregistrez cette valeur dans la variable SECRET_KEY_BASE du fichier.env:
# Create a Secret Key for Rails
#
# You can generate a secure one through the Greenlight docker image
# with the command.
#
# docker run --rm bigbluebutton/greenlight:v2 bundle exec rake secret
#
SECRET_KEY_BASE=458e2c786750cb534f2350d12bcf173052cf5fa275c66d545fb64affe805f49cb09169a8a8799cbcaff7762c1c1664e48e5cf4d8754a5f0865e0c9fedc53e1cc
...
Récupérer l'URL du BigBlueButton et sa clé :
Enregistrez cette valeur dans les variables BIGBLUEBUTTON_ENDPOINT et BIGBLUEBUTTON_SECRET du fichier.env:
... # The endpoint and secret for your BigBlueButton server. # Set these if you are running GreenLight on a single BigBlueButton server. # You can retrive these by running the following command on your BigBlueButton server: # # bbb-conf --secret # BIGBLUEBUTTON_ENDPOINT=https://meet.example.org/bigbluebutton/ BIGBLUEBUTTON_SECRET=zZ7XSEB7EjubByrCxAthTNYomDVbMwjUbfT4xqoa3p
Vérifiez les paramètres de GreenLight :
Ajoutez une configuration Nginx :
Ajoutez une référence BigBlueButton à la page de GreenLight :
... # Redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /var/www/nginx-default; } location = / { return 307 /b; } }
Créez un script pour docker-compose :
Créez un mot de passe pour PostgreSQL :
Modifiez la version de docker-compose :
Démarrez le conteneur :
Redémarrez Nginx :
systemctl restart nginx
Créer le compte administrateur :
C'est fait ! Une fois meet.example.org ouvert, le site ressemblera à ceci :
Pour vous connecter en tant qu'administrateur, indiquez l'e-mailsupport@example.org~ et le mot de passe admin~~.
Configurer les notifications e-mail
Pour activer la confirmation du compte par courriel, spécifiez les paramètres du serveur de messagerie d'envoi :
... # Set this to true if you want GreenLight to send verification emails upon # the creation of a new account # ALLOW_MAIL_NOTIFICATIONS=true SMTP_SERVER=mail.example.org SMTP_PORT=465 SMTP_DOMAIN=example.org SMTP_USERNAME= SMTP_PASSWORD= SMTP_ATUH= SMTP_STARTTLS_AUTO=true # Specify the email address that all mail is sent from SMTP_SENDER=support@example.org ...
Relancez Greenlight :
Changer de mot de passe
Pour modifier le mot de passe d'un utilisateur, vous pouvez utiliser le terminal RubyOnRail :
Une fois cette opération effectuée, vous pouvez réinitialiser le mot de passe de l'utilisateur sur la page d'édition du compte :
Mettre à jour BigBlueButton
Connectez le conteneur :
lxc-attach bigbluebutton
Actualisez le dépôt binaire :
Mettez à jour tous les paquets du système :
Actualisez l'image de Greenlight :
Assurez-vous que les paramètres n'ont pas été modifiés après la mise à jour :
<profile name="cdquality">
<param name="domain" value="$${domain}"/>
<param name="rate" value="48000"/>
<param name="interval" value="20"/>
<param name="energy-level" value="10"/>
...
Relancez le conteneur.
lxc-stop -r bigbluebutton
Récupération d'images Docker avec Btrfs
Si votre conteneur utilise Btrfs, Docker se servira de sous-volumes pour les images, qui ne seront pas copiées lors de la création d'instantanés pour ce conteneur. Vous devez télécharger à nouveau les fichiers sources pour lancer Greenlight.
Téléchargez à nouveau toutes les images Docker utilisées avec Greenlight :
Relancez Greenlight :