Installation service BBB Colibris


Plan d'action

Prendre un serveur Hetzner dédié pour BBB
Migrer le mattermost
Utiliser le serveur libéré pour installer Debian11, y créer des VM

Installation BBB

https://pad.colibris-outilslibres.org/p/migrations_serveurs
Serveur
Checklist

  • Choix d'un serveur :

  • Core i7 - 64Mb - 2x500Gb SSD - NIC 1 Gb à 34.29€ TTC / mois

  • Installation d'un Ubuntu 18.04.5 -> OK

  • configuration clés SSH

  • Flo -> OK

  • Jeey -> OK

  • Install BBB via le script


Configuration

  • DNS : mise à jour du DNS des entrées A (88.99.95.38) et AAAA (2a01:4f8:10a:1f65::2) sur cloudflare pour visio.colibris-lemouvement.org -> OK

  • DNS : Création d'un CNAME coturn.colibris-lemouvement.org


Install

  • apt upgrade -y # mise a jour systeme

  • hostnamectl set-hostname visio.colibris-lemouvement.org

  • vi /etc/hosts # changer a la mano pour visio.colibris-lemouvement.org

  • apt install htop vim # necessaire de survie

  • vi /root/.ssh/authorized_keys # mettre les clés de jeey et mrflos

  • reboot



Post-install
passé l'install, un soucis avec coturn qui ne semble pas accessible (TODO plus tard)
On ouvre les ports ufw
ufw allow 3478
ufw allow 5349
ufw allow 32769:65535/udp
ufw allow 4000 #pour BBB-recorder

sudo systemctl restart coturn


  • Administration Greenlight

  • On crée un admin par défaut

  • cd /root/greenlight

  • docker exec greenlight-v2 bundle exec rake admin:create


  • changement du mot de passe par défaut

  • Paramètrage de l'organisation

  • paramètre du site :

  • couleurs

  • base :

  • plus clair :

  • plus sombre :

  • Paramètres du site :

  • méthode d'inscription : Invitation

  • TODO configuration serveur mail

  • Nombre de salles par utilisateur : 5


config nginx

stream {
  • upstream web {
    • server coturn.colibris-lemouvement.org;
  • }
  • upstream turn {
    • server 2a01:4f8:10a:1f65::2:5349;
  • }
  • map $ssl_preread_alpn_protocols $upstream {
    • ~\bh2\b web;
    • ~\bhttp/1. web;
    • default turn;
  • }
  • server {
    • listen 80;
    • listen [::]:80;
    • proxy_pass coturn.colibris-lemouvement.org:80;
  • }
  • server {
    • listen 443;
    • listen [::]:443;

  • ssl_preread on;
  • proxy_pass $upstream;
  • }
}



vi /etc/default/coturn (decommenter la ligne TURNSERVER_ENABLED=1)
vi /etc/turnserver.conf

listening-port=3478
tls-listening-port=5349

listening-ip=88.99.95.38
listening-ip=2a01:4f8:10a:1f65::2
relay-ip=88.99.95.38
relay-ip=2a01:4f8:10a:1f65::2

If the server is behind NAT, you need to specify the external IP address.

If there is only one external address, specify it like this: #external-ip=172.17.19.120

If you have multiple external addresses, you have to specify which

internal address each corresponds to, like this. The first address is the

external ip, and the second address is the corresponding internal IP.

#external-ip=172.17.19.131/10.0.0.11 #external-ip=172.17.18.132/10.0.0.12

min-port=32769
max-port=65535
verbose
#no-tcp-relay
fingerprint
lt-cred-mech
use-auth-secret
static-auth-secret=sK^Z86y^KdBZE,D6
realm=colibris-lemouvement.org

cert=/etc/turnserver/fullchain.pem
pkey=/etc/turnserver/privkey.pem

From https://ssl-config.mozilla.org/ Intermediate, openssl 1.1.0g, 2020-01 cipher-list="ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384"
dh-file=/etc/turnserver/dhp.pem

keep-address-family
no-cli
no-tlsv1
no-tlsv1_1

Block connections to IP ranges which shouldn't be reachable

no-loopback-peers no-multicast-peers

CVE-2020-26262

If running coturn version older than 4.5.2, uncomment these rules and ensure

that you have listening-ip set to ipv4 addresses only. #denied-peer-ip=0.0.0.0-0.255.255.255
#denied-peer-ip=127.0.0.0-127.255.255.255
#denied-peer-ip=::1

Private (LAN) addresses

If you are running BigBlueButton within a LAN, you might need to add an "allow" rule for your address range.

IPv4 Private-Use

denied-peer-ip=10.0.0.0-10.255.255.255 denied-peer-ip=172.16.0.0-172.31.255.255
denied-peer-ip=192.168.0.0-192.168.255.255

Other IPv4 Special-Purpose addresses denied-peer-ip=100.64.0.0-100.127.255.255
denied-peer-ip=169.254.0.0-169.254.255.255
denied-peer-ip=192.0.0.0-192.0.0.255
denied-peer-ip=192.0.2.0-192.0.2.255
denied-peer-ip=198.18.0.0-198.19.255.255
denied-peer-ip=198.51.100.0-198.51.100.255
denied-peer-ip=203.0.113.0-203.0.113.255

IPv6 Unique-Local

denied-peer-ip=fc00::-fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff

IPv6 Link-Local Unicast denied-peer-ip=fe80::-febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff

Other IPv6 Special-Purpose assignments

denied-peer-ip=::ffff:0:0-::ffff:ffff:ffff denied-peer-ip=64:ff9b::-64:ff9b::ffff:ffff
denied-peer-ip=64:ff9b:1::-64:ff9b:1:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=2001::-2001:1ff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=2001:db8::-2001:db8:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=2002::-2002:ffff:ffff:ffff:ffff:ffff:ffff:ffff


Personnalisation BBB


Image de fonds de vidéo

https://docs.bigbluebutton.org/admin/customize.html#use-custom-images-for-virtual-background



Texte/Présentation par défaut

Modifier le fichie de configuration pour mettre à jour le nom du fichier par défaut :
vi /etc/bigbluebutton/bbb-web.properties


Texte de présentation

rechercher clé
defaultWelcomeMessage

et
defaultWelcomeMessageFooter


Présentation par défaut

  • Rechercher cette ligne :
beans.presentationService.defaultUploadedPresentation=${bigbluebutton.web.serverURL}/default.pdf

  • changer le nom de la présentation par défaut
  • Enregistrer et quitter
  • Télécharger le nouveau fichier de présentation par défaut dans
    /var/www/bigbluebutton-default/
    
  • Redémarrer le serveur BBB
  • bbb-conf --restart
    

Disable 'You are now muted' audio message

https://docs.bigbluebutton.org/admin/customize.html#turn-off-you-are-now-muted
  • Éditer fichier
vi /opt/freeswitch/etc/freeswitch/autoload_configs/conference.conf.xml

  • mettre en commentaire pour chaque profil les paramètres
<param name="muted-sound"
<param name="unmuted-sound"

  • Redémarrer le serveur BBB
bbb-conf --restart


A priori, cela ne fonctionne pas -> tentative de commentairage de ces lignes dans les autres profils ...

Disable audio echo test

et accueil directement en mode "Micro + audio"
  • Éditer le fichier
vi /etc/bigbluebutton/bbb-html5.yml

  • Passer le paramètre "ListenOnlyMode" en false
  • Passer le paramètre "skipCheck" en true
  • Redémarrer le serveur BBB
bbb-conf --restart


Changement du message "you're the only person in this conference"

  • copier le fichier .wav dans les dossiers ad-hoc (suivant la qualité) dans
opt/freeswitch/share/freeswitch/sounds/en/us/callie/conference/

  • éditer le fichier de configuration
vim /opt/freeswitch/etc/freeswitch/autoload_configs/conference.conf.xml

  • et mettre à jour le paramètre dans chaque profil avec le nom du fichier .wav choisi
<param name="alone-sound" value="conference/###NOM###.wav"/>

  • Redémarrer le serveur BBB
bbb-conf --restart



Changer le titre de la fenêtre BigBlueButton

  • To change the title,
edit /usr/share/meteor/bundle/programs/server/assets/app/config/settings.yml

  • change the entry for clientTitle


Baisser la qualité des webcams

vi /etc/bigbluebutton/bbb-conf/apply-config.sh


Ajouter
echo "  - Setting camera defaults"
yq w -i $HTML5_CONFIG 'public.kurento.cameraProfiles.(id""<span id="TOC_5_1" class="yeswiki-title-anchor"></span>""==low).bitrate' 50
yq w -i $HTML5_CONFIG 'public.kurento.cameraProfiles.(id==medium).bitrate' 100
yq w -i $HTML5_CONFIG 'public.kurento.cameraProfiles.(id""<span id="TOC_5_5" class="yeswiki-title-anchor"></span>""==high).bitrate' 200
yq w -i $HTML5_CONFIG 'public.kurento.cameraProfiles.(id==hd).bitrate' 300

yq w -i $HTML5_CONFIG 'public.kurento.cameraProfiles.(id""<span id="TOC_5_9" class="yeswiki-title-anchor"></span>""==low).default' true
yq w -i $HTML5_CONFIG 'public.kurento.cameraProfiles.(id==medium).default' false
yq w -i $HTML5_CONFIG 'public.kurento.cameraProfiles.(id""<span id="TOC_5_13" class="yeswiki-title-anchor"></span>""==high).default' false
yq w -i $HTML5_CONFIG 'public.kurento.cameraProfiles.(id==hd).default' false
chown meteor:meteor $HTML5_CONFIG


Monitoring Grafana/Prometheus


basée sur https://bigbluebutton-exporter.greenstatic.dev/installation/all_in_one_monitoring_stack/

  • Update de Docker vers une version plus moderne


sudo apt-get remove docker docker-engine docker.io containerd runc


Pas de paquet debian pour docker d'installé, fausse alerte ?

mkdir /opt/bbb-monitoring
cd /opt/
git clone https://github.com/greenstatic/bigbluebutton-exporter.git
cp -R bigbluebutton-exporter/extras/all-in-on-monitoring/* bbb-monitoring


Changer les url en https://example.com pour l'adresse de notre serveur BBB : https://visio.colibris-lemouvement.org (dans les fichiers du dossier
  • + icon -> import
  • 100) / count(count(node_cpu_seconds_total{job=\"$job_node_exporter\", instance=~\"$instance\"}) by (cpu))",
    • "interval": , "legendFormat": "CPU Utlization", "refId": "A" }, { "expr": "bbb_meetings_participants{job=\"$job\", instance=\"$instance\"}", "interval": ,
    • "legendFormat": "Participants",
    • "refId": "B"
    • }
    • ],
    • "thresholds": [],
    • "timeFrom": null,
    • "timeRegions": [],
    • "timeShift": null,
    • "title": "CPU Utilization vs. Participants",
    • "tooltip": {
      • "shared": true,
      • "sort": 0,
      • "value_type": "individual"
    • },
    • "type": "graph",
    • "xaxis": {
      • "buckets": null,
      • "mode": "time",
      • "name": null,
      • "show": true,
      • "values": []
    • },
    • "yaxes": [
      • {
        • "format": "percent",
        • "label": "CPU Utlization [%]",
        • "logBase": 1,
        • "max": "100",
        • "min": null,
        • "show": true
      • },
      • {
        • "format": "short",
        • "label": "Participants",
        • "logBase": 1,
        • "max": null,
        • "min": "0",
        • "show": true
      • }
    • ],
    • "yaxis": {
      • "align": false,
      • "alignLevel": null
    • }
    • },
    • {
      • "aliasColors": {
        • "Participants": "blue"
      • },
      • "bars": false,
      • "dashLength": 10,
      • "dashes": false,
      • "datasource": "$datasource",
      • "fieldConfig": {
        • "defaults": {
          • "custom": {}
        • },
        • "overrides": []
      • },
      • "fill": 1,
      • "fillGradient": 0,
      • "gridPos": {
        • "h": 8,
        • "w": 9,
        • "x": 15,
        • "y": 11
      • },
      • "hiddenSeries": false,
      • "id": 32,
      • "legend": {
        • "alignAsTable": true,
        • "avg": true,
        • "current": true,
        • "max": true,
        • "min": true,
        • "show": true,
        • "total": false,
        • "values": true
      • },
      • "lines": true,
      • "linewidth": 1,
      • "nullPointMode": "null",
      • "percentage": false,
      • "pluginVersion": "7.1.1",
      • "pointradius": 2,
      • "points": false,
      • "renderer": "flot",
      • "seriesOverrides": [
        • {
          • "$$hashKey": "object:3017",
          • "alias": "Participants",
          • "yaxis": 2
        • },
        • {
          • "$$hashKey": "object:3018",
          • "alias": "CPU total utilization",
          • "yaxis": 2
        • }
      • ],
      • "spaceLength": 10,
      • "stack": false,
      • "steppedLine": false,
      • "targets": [
        • {
          • "expr": "irate(node_network_receive_bytes_total{job=\"$job_node_exporter\", instance=\"$instance\", device=\"$interface\"}[1m])*8",
          • "hide": false,
          • "interval": , "intervalFactor": 1, "legendFormat": "Bandwidth {{device}} (receive)", "refId": "A" }, { "expr": "irate(node_network_transmit_bytes_total{job=\"$job_node_exporter\", instance=\"$instance\", device=\"$interface\"}[1m])*8", "interval": ,
          • "intervalFactor": 1,
          • "legendFormat": "Bandiwidth
            Action device : N'existe pas
            (transmit)",
          • "refId": "C"
        • },
        • {
          • "expr": "bbb_meetings_participants{job=\"$job\", instance=\"$instance\"}",
          • "format": "time_series",
          • "instant": false,
          • "interval": , "intervalFactor": 1, "legendFormat": "Participants", "refId": "B" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Bandwidth vs. Participants", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "bps", "label": "Bandwidth", "logBase": 1, "max": null, "min": null, "show": true }, { "format": "short", "label": "Participants", "logBase": 1, "max": null, "min": "0", "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "datasource": "$datasource", "fieldConfig": { "defaults": { "custom": {}, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null } ] } }, "overrides": [] }, "gridPos": { "h": 5, "w": 4, "x": 0, "y": 14 }, "id": 30, "options": { "colorMode": "value", "graphMode": "none", "justifyMode": "auto", "orientation": "horizontal", "reduceOptions": { "calcs": [ "max" ], "fields": ,
          • "values": false
        • },
        • "textMode": "auto"
      • },
      • "pluginVersion": "7.1.1",
      • "targets": [
        • {
          • "expr": "bbb_meetings_participants{job=\"$job\", instance=\"$instance\"}",
          • "interval": , "legendFormat": "Selected timeframe", "refId": "A" }, { "expr": "max_over_time(bbb_meetings_participants{job=\"$job\", instance=\"$instance\"}[1w])", "interval": ,
          • "legendFormat": "Since 1 week",
          • "refId": "C"
        • },
        • {
          • "expr": "max_over_time(bbb_meetings_participants{job=\"$job\", instance=\"$instance\"}[100y])",
          • "interval": , "legendFormat": "All time", "refId": "B" } ], "timeFrom": null, "timeShift": null, "title": "Max Participants", "type": "stat" }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": null, "description": ,
      • "fieldConfig": {
        • "defaults": {
          • "custom": {
            • "align": null
          • },
          • "mappings": [],
          • "thresholds": {
            • "mode": "absolute",
            • "steps": [
              • {
                • "color": "green",
                • "value": null
              • }
            • ]
          • },
          • "unit": "short"
        • },
        • "overrides": []
      • },
      • "fill": 1,
      • "fillGradient": 0,
      • "gridPos": {
        • "h": 8,
        • "w": 6,
        • "x": 0,
        • "y": 19
      • },
      • "hiddenSeries": false,
      • "id": 59,
      • "legend": {
        • "avg": false,
        • "current": false,
        • "max": false,
        • "min": false,
        • "show": true,
        • "total": false,
        • "values": false
      • },
      • "lines": true,
      • "linewidth": 1,
      • "nullPointMode": "null",
      • "percentage": false,
      • "pluginVersion": "7.1.1",
      • "pointradius": 2,
      • "points": false,
      • "renderer": "flot",
      • "seriesOverrides": [],
      • "spaceLength": 10,
      • "stack": false,
      • "steppedLine": false,
      • "targets": [
        • {
          • "expr": "bbb_meetings_participants_origin{job=\"$job\", instance=\"$instance\"}",
          • "interval": , "legendFormat": "{{name}}", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Participants Origin", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:633", "format": "short", "label": "Participants", "logBase": 1, "max": null, "min": null, "show": true }, { "$$hashKey": "object:634", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "$datasource", "fieldConfig": { "defaults": { "custom": {} }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 6, "x": 6, "y": 19 }, "hiddenSeries": false, "id": 53, "legend": { "avg": false, "current": false, "max": false, "min": false, "show": false, "total": false, "values": false }, "lines": true, "linewidth": 1, "nullPointMode": "null", "percentage": false, "pluginVersion": "7.1.1", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "bbb_room_participants_gcount{job=\"$job\", instance=\"$instance\"}", "interval": ,
          • "legendFormat": "Rooms",
          • "refId": "A"
        • }
      • ],
      • "thresholds": [],
      • "timeFrom": null,
      • "timeRegions": [],
      • "timeShift": null,
      • "title": "Number of Rooms",
      • "tooltip": {
        • "shared": true,
        • "sort": 0,
        • "value_type": "individual"
      • },
      • "type": "graph",
      • "xaxis": {
        • "buckets": null,
        • "mode": "time",
        • "name": null,
        • "show": true,
        • "values": []
      • },
      • "yaxes": [
        • {
          • "decimals": null,
          • "format": "short",
          • "label": "Rooms",
          • "logBase": 1,
          • "max": null,
          • "min": "0",
          • "show": true
        • },
        • {
          • "format": "short",
          • "label": null,
          • "logBase": 1,
          • "max": null,
          • "min": null,
          • "show": true
        • }
      • ],
      • "yaxis": {
        • "align": false,
        • "alignLevel": null
      • }
    • },
    • {
      • "aliasColors": {
        • "Voice participants": "orange"
      • },
      • "bars": false,
      • "dashLength": 10,
      • "dashes": false,
      • "datasource": "$datasource",
      • "fieldConfig": {
        • "defaults": {
          • "custom": {}
        • },
        • "overrides": []
      • },
      • "fill": 1,
      • "fillGradient": 0,
      • "gridPos": {
        • "h": 8,
        • "w": 6,
        • "x": 12,
        • "y": 19
      • },
      • "hiddenSeries": false,
      • "id": 6,
      • "legend": {
        • "alignAsTable": true,
        • "avg": true,
        • "current": true,
        • "max": true,
        • "min": true,
        • "rightSide": false,
        • "show": false,
        • "total": false,
        • "values": true
      • },
      • "lines": true,
      • "linewidth": 1,
      • "nullPointMode": "null",
      • "percentage": false,
      • "pluginVersion": "7.1.1",
      • "pointradius": 2,
      • "points": false,
      • "renderer": "flot",
      • "seriesOverrides": [],
      • "spaceLength": 10,
      • "stack": false,
      • "steppedLine": false,
      • "targets": [
        • {
          • "expr": "bbb_meetings_voice_participants{job=\"$job\", instance=\"$instance\"}",
          • "interval": , "legendFormat": "Voice participants", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Voice Participants", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": "Participants", "logBase": 1, "max": null, "min": "0", "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": false } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": { "Voice participants": "orange" }, "bars": false, "dashLength": 10, "dashes": false, "datasource": "$datasource", "fieldConfig": { "defaults": { "custom": {} }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 8, "w": 6, "x": 18, "y": 19 }, "hiddenSeries": false, "id": 8, "legend": { "alignAsTable": true, "avg": true, "current": true, "max": true, "min": true, "show": false, "total": false, "values": true }, "lines": true, "linewidth": 1, "nullPointMode": "null", "percentage": false, "pluginVersion": "7.1.1", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "bbb_meetings_video_participants{job=\"$job\", instance=\"$instance\"}", "interval": ,
          • "legendFormat": "Video participants",
          • "refId": "A"
        • }
      • ],
      • "thresholds": [],
      • "timeFrom": null,
      • "timeRegions": [],
      • "timeShift": null,
      • "title": "Video Participants",
      • "tooltip": {
        • "shared": true,
        • "sort": 0,
        • "value_type": "individual"
      • },
      • "type": "graph",
      • "xaxis": {
        • "buckets": null,
        • "mode": "time",
        • "name": null,
        • "show": true,
        • "values": []
      • },
      • "yaxes": [
        • {
          • "$$hashKey": "object:608",
          • "format": "short",
          • "label": "Video Participants",
          • "logBase": 1,
          • "max": null,
          • "min": "0",
          • "show": true
        • },
        • {
          • "$$hashKey": "object:609",
          • "format": "short",
          • "label": null,
          • "logBase": 1,
          • "max": null,
          • "min": null,
          • "show": false
        • }
      • ],
      • "yaxis": {
        • "align": false,
        • "alignLevel": null
      • }
    • },
    • {
      • "datasource": "$datasource",
      • "fieldConfig": {
        • "defaults": {
          • "custom": {},
          • "mappings": [],
          • "thresholds": {
            • "mode": "absolute",
            • "steps": [
              • {
                • "color": "green",
                • "value": null
              • }
            • ]
          • }
        • },
        • "overrides": []
      • },
      • "gridPos": {
        • "h": 4,
        • "w": 9,
        • "x": 0,
        • "y": 27
      • },
      • "id": 16,
      • "options": {
        • "colorMode": "value",
        • "graphMode": "none",
        • "justifyMode": "auto",
        • "orientation": "auto",
        • "reduceOptions": {
          • "calcs": [
            • "last"
          • ],
          • "fields": , "values": false }, "textMode": "auto" }, "pluginVersion": "7.1.1", "targets": [ { "expr": "bbb_recordings_processing{job=\"$job\", instance=\"$instance\"}", "instant": true, "interval": ,
          • "legendFormat": "Processing",
          • "refId": "B"
        • },
        • {
          • "expr": "bbb_recordings_unprocessed{job=\"$job\", instance=\"$instance\"}",
          • "instant": true,
          • "interval": , "legendFormat": "Unprocessed", "refId": "F" }, { "expr": "bbb_recordings_published{job=\"$job\", instance=\"$instance\"}", "instant": true, "interval": ,
          • "legendFormat": "Published",
          • "refId": "E"
        • },
        • {
          • "expr": "bbb_recordings_unpublished{job=\"$job\", instance=\"$instance\"}",
          • "instant": true,
          • "interval": , "legendFormat": "Unpublished", "refId": "C" }, { "expr": "bbb_recordings_deleted{job=\"$job\", instance=\"$instance\"}", "instant": true, "interval": ,
          • "legendFormat": "Deleted",
          • "refId": "D"
        • }
      • ],
      • "timeFrom": null,
      • "timeShift": null,
      • "title": "Recordings",
      • "type": "stat"
    • },
    • {
      • "datasource": "$datasource",
      • "fieldConfig": {
        • "defaults": {
          • "custom": {},
          • "decimals": 1,
          • "mappings": [],
          • "thresholds": {
            • "mode": "percentage",
            • "steps": [
              • {
                • "color": "green",
                • "value": null
              • },
              • {
                • "color": "red",
                • "value": 80
              • }
            • ]
          • },
          • "unit": "percentunit"
        • },
        • "overrides": []
      • },
      • "gridPos": {
        • "h": 4,
        • "w": 15,
        • "x": 9,
        • "y": 27
      • },
      • "id": 57,
      • "options": {
        • "orientation": "auto",
        • "reduceOptions": {
          • "calcs": [
            • "lastNotNull"
          • ],
          • "fields": , "values": false }, "showThresholdLabels": false, "showThresholdMarkers": true }, "pluginVersion": "7.1.1", "targets": [ { "expr": "(node_filesystem_size_bytes{job=\"$job_node_exporter\", instance=\"$instance\"} - node_filesystem_avail_bytes{job=\"$job_node_exporter\", instance=\"$instance\"}) / node_filesystem_size_bytes{job=\"$job_node_exporter\", instance=\"$instance\"}", "interval": ,
          • "legendFormat": "
            Action mountpoint : N'existe pas
            ",
          • "refId": "A"
        • }
      • ],
      • "timeFrom": null,
      • "timeShift": null,
      • "title": "Storage Utilization",
      • "type": "gauge"
    • },
    • {
      • "aliasColors": {},
      • "bars": false,
      • "dashLength": 10,
      • "dashes": false,
      • "datasource": "$datasource",
      • "description": "Requires RECORDINGS_METRICS_READ_FROM_DISK to be enabled on the BigBlueButton Exporter",
      • "fieldConfig": {
        • "defaults": {
          • "custom": {}
        • },
        • "overrides": []
      • },
      • "fill": 1,
      • "fillGradient": 0,
      • "gridPos": {
        • "h": 7,
        • "w": 12,
        • "x": 0,
        • "y": 31
      • },
      • "hiddenSeries": false,
      • "id": 55,
      • "legend": {
        • "avg": false,
        • "current": false,
        • "max": false,
        • "min": false,
        • "show": true,
        • "total": false,
        • "values": false
      • },
      • "lines": true,
      • "linewidth": 1,
      • "nullPointMode": "null",
      • "percentage": false,
      • "pluginVersion": "7.1.1",
      • "pointradius": 2,
      • "points": false,
      • "renderer": "flot",
      • "seriesOverrides": [],
      • "spaceLength": 10,
      • "stack": false,
      • "steppedLine": false,
      • "targets": [
        • {
          • "expr": "bbb_recordings_unprocessed{job=\"$job\", instance=\"$instance\"}",
          • "interval": , "legendFormat": "Recordings Unprocessed ", "refId": "A" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Recordings Unprocessed", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "format": "short", "label": "Recordings ", "logBase": 1, "max": null, "min": "0", "show": true }, { "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": {}, "bars": false, "dashLength": 10, "dashes": false, "datasource": "$datasource", "fieldConfig": { "defaults": { "custom": {} }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 7, "w": 12, "x": 12, "y": 31 }, "hiddenSeries": false, "id": 42, "legend": { "alignAsTable": true, "avg": false, "current": true, "max": true, "min": true, "rightSide": true, "show": true, "total": false, "values": true }, "lines": true, "linewidth": 1, "nullPointMode": "null", "percentage": false, "pluginVersion": "7.1.1", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "bbb_meetings_participant_clients{job=\"$job\", instance=\"$instance\"}", "interval": ,
          • "legendFormat": "
            Action type : N'existe pas
            ",
          • "refId": "A"
        • }
      • ],
      • "thresholds": [],
      • "timeFrom": null,
      • "timeRegions": [],
      • "timeShift": null,
      • "title": "Participants by Client Type",
      • "tooltip": {
        • "shared": true,
        • "sort": 0,
        • "value_type": "individual"
      • },
      • "type": "graph",
      • "xaxis": {
        • "buckets": null,
        • "mode": "time",
        • "name": null,
        • "show": true,
        • "values": []
      • },
      • "yaxes": [
        • {
          • "format": "short",
          • "label": "Participants",
          • "logBase": 1,
          • "max": null,
          • "min": "0",
          • "show": true
        • },
        • {
          • "format": "short",
          • "label": null,
          • "logBase": 1,
          • "max": null,
          • "min": null,
          • "show": true
        • }
      • ],
      • "yaxis": {
        • "align": false,
        • "alignLevel": null
      • }
    • },
    • {
      • "collapsed": false,
      • "datasource": null,
      • "gridPos": {
        • "h": 1,
        • "w": 24,
        • "x": 0,
        • "y": 38
      • },
      • "id": 51,
      • "panels": [],
      • "title": "Histograms",
      • "type": "row"
    • },
    • {
      • "cacheTimeout": null,
      • "cards": {
        • "cardPadding": null,
        • "cardRound": null
      • },
      • "color": {
        • "cardColor": "#b4ff00",
        • "colorScale": "linear",
        • "colorScheme": "interpolateGnBu",
        • "exponent": 0.5,
        • "mode": "spectrum"
      • },
      • "dataFormat": "tsbuckets",
      • "datasource": "$datasource",
      • "description": "Buckets (Y axis) represents the number of participants while the count in each bucket represents the number of rooms with that particular bucket's value. ",
      • "fieldConfig": {
        • "defaults": {
          • "custom": {}
        • },
        • "overrides": []
      • },
      • "gridPos": {
        • "h": 10,
        • "w": 12,
        • "x": 0,
        • "y": 39
      • },
      • "heatmap": {},
      • "hideZeroBuckets": true,
      • "highlightCards": true,
      • "id": 44,
      • "legend": {
        • "show": true
      • },
      • "links": [],
      • "pluginVersion": "6.7.2",
      • "reverseYBuckets": false,
      • "targets": [
        • {
          • "expr": "bbb_room_participants_bucket{job=\"$job\", instance=\"$instance\"}",
          • "format": "heatmap",
          • "instant": false,
          • "interval": , "legendFormat": "{{le}}", "refId": "A" } ], "timeFrom": null, "timeShift": null, "title": "Heatmap of Room Participants", "tooltip": { "show": true, "showHistogram": false }, "type": "heatmap", "xAxis": { "show": true }, "xBucketNumber": null, "xBucketSize": null, "yAxis": { "decimals": null, "format": "short", "logBase": 1, "max": null, "min": null, "show": true, "splitFactor": null }, "yBucketBound": "auto", "yBucketNumber": null, "yBucketSize": null }, { "cacheTimeout": null, "cards": { "cardPadding": null, "cardRound": null }, "color": { "cardColor": "#b4ff00", "colorScale": "linear", "colorScheme": "interpolateGnBu", "exponent": 0.5, "mode": "spectrum" }, "dataFormat": "tsbuckets", "datasource": "$datasource", "description": "Buckets (Y axis) represents the number of listeners while the count in each bucket represents the number of rooms with that particular bucket's value. ", "fieldConfig": { "defaults": { "custom": {} }, "overrides": [] }, "gridPos": { "h": 10, "w": 12, "x": 12, "y": 39 }, "heatmap": {}, "hideZeroBuckets": true, "highlightCards": true, "id": 47, "legend": { "show": true }, "links": [], "pluginVersion": "6.7.2", "reverseYBuckets": false, "targets": [ { "expr": "bbb_room_listeners_bucket{job=\"$job\", instance=\"$instance\"}", "format": "heatmap", "instant": false, "interval": ,
          • "legendFormat": "
            Action le : N'existe pas
            ",
          • "refId": "A"
        • }
      • ],
      • "timeFrom": null,
      • "timeShift": null,
      • "title": "Heatmap of Listeners Participants",
      • "tooltip": {
        • "show": true,
        • "showHistogram": false
      • },
      • "type": "heatmap",
      • "xAxis": {
        • "show": true
      • },
      • "xBucketNumber": null,
      • "xBucketSize": null,
      • "yAxis": {
        • "decimals": null,
        • "format": "short",
        • "logBase": 1,
        • "max": null,
        • "min": null,
        • "show": true,
        • "splitFactor": null
      • },
      • "yBucketBound": "auto",
      • "yBucketNumber": null,
      • "yBucketSize": null
    • },
    • {
      • "cacheTimeout": null,
      • "cards": {
        • "cardPadding": null,
        • "cardRound": null
      • },
      • "color": {
        • "cardColor": "#b4ff00",
        • "colorScale": "linear",
        • "colorScheme": "interpolateGnBu",
        • "exponent": 0.5,
        • "mode": "spectrum"
      • },
      • "dataFormat": "tsbuckets",
      • "datasource": "$datasource",
      • "description": "Buckets (Y axis) represents the number of voice participants while the count in each bucket represents the number of rooms with that particular bucket's value. ",
      • "fieldConfig": {
        • "defaults": {
          • "custom": {}
        • },
        • "overrides": []
      • },
      • "gridPos": {
        • "h": 10,
        • "w": 12,
        • "x": 0,
        • "y": 49
      • },
      • "heatmap": {},
      • "hideZeroBuckets": true,
      • "highlightCards": true,
      • "id": 48,
      • "legend": {
        • "show": true
      • },
      • "links": [],
      • "pluginVersion": "6.7.2",
      • "reverseYBuckets": false,
      • "targets": [
        • {
          • "expr": "bbb_room_voice_participants_bucket{job=\"$job\", instance=\"$instance\"}",
          • "format": "heatmap",
          • "instant": false,
          • "interval": , "legendFormat": "{{le}}", "refId": "A" } ], "timeFrom": null, "timeShift": null, "title": "Heatmap of Voice Participants", "tooltip": { "show": true, "showHistogram": false }, "type": "heatmap", "xAxis": { "show": true }, "xBucketNumber": null, "xBucketSize": null, "yAxis": { "decimals": null, "format": "short", "logBase": 1, "max": null, "min": null, "show": true, "splitFactor": null }, "yBucketBound": "auto", "yBucketNumber": null, "yBucketSize": null }, { "cacheTimeout": null, "cards": { "cardPadding": null, "cardRound": null }, "color": { "cardColor": "#b4ff00", "colorScale": "linear", "colorScheme": "interpolateGnBu", "exponent": 0.5, "mode": "spectrum" }, "dataFormat": "tsbuckets", "datasource": "$datasource", "description": "Buckets (Y axis) represents the number of video participants while the count in each bucket represents the number of rooms with that particular bucket's value. ", "fieldConfig": { "defaults": { "custom": {} }, "overrides": [] }, "gridPos": { "h": 10, "w": 12, "x": 12, "y": 49 }, "heatmap": {}, "hideZeroBuckets": true, "highlightCards": true, "id": 49, "legend": { "show": true }, "links": [], "pluginVersion": "6.7.2", "reverseYBuckets": false, "targets": [ { "expr": "bbb_room_video_participants_bucket{job=\"$job\", instance=\"$instance\"}", "format": "heatmap", "instant": false, "interval": ,
          • "legendFormat": "
            Action le : N'existe pas
            ",
          • "refId": "A"
        • }
      • ],
      • "timeFrom": null,
      • "timeShift": null,
      • "title": "Heatmap of Video Participants",
      • "tooltip": {
        • "show": true,
        • "showHistogram": false
      • },
      • "type": "heatmap",
      • "xAxis": {
        • "show": true
      • },
      • "xBucketNumber": null,
      • "xBucketSize": null,
      • "yAxis": {
        • "decimals": null,
        • "format": "short",
        • "logBase": 1,
        • "max": null,
        • "min": null,
        • "show": true,
        • "splitFactor": null
      • },
      • "yBucketBound": "auto",
      • "yBucketNumber": null,
      • "yBucketSize": null
    • },
    • {
      • "collapsed": false,
      • "datasource": null,
      • "gridPos": {
        • "h": 1,
        • "w": 24,
        • "x": 0,
        • "y": 59
      • },
      • "id": 38,
      • "panels": [],
      • "title": "API",
      • "type": "row"
    • },
    • {
      • "aliasColors": {},
      • "bars": false,
      • "dashLength": 10,
      • "dashes": false,
      • "datasource": "$datasource",
      • "fieldConfig": {
        • "defaults": {
          • "custom": {}
        • },
        • "overrides": []
      • },
      • "fill": 1,
      • "fillGradient": 0,
      • "gridPos": {
        • "h": 9,
        • "w": 12,
        • "x": 0,
        • "y": 60
      • },
      • "hiddenSeries": false,
      • "id": 40,
      • "legend": {
        • "alignAsTable": true,
        • "avg": true,
        • "current": true,
        • "max": true,
        • "min": true,
        • "rightSide": false,
        • "show": true,
        • "total": false,
        • "values": true
      • },
      • "lines": true,
      • "linewidth": 1,
      • "nullPointMode": "null",
      • "percentage": false,
      • "pluginVersion": "7.1.1",
      • "pointradius": 2,
      • "points": false,
      • "renderer": "flot",
      • "seriesOverrides": [],
      • "spaceLength": 10,
      • "stack": false,
      • "steppedLine": false,
      • "targets": [
        • {
          • "expr": "sum(histogram_quantile(0.95, sum(rate(bbb_api_latency_bucket{job=\"$job\", instance=\"$instance\"}[5m])) by (le, instance, endpoint, parameters))) by (instance)",
          • "interval": , "legendFormat": "{{instance}}", "refId": "A" } ], "thresholds": [ { "colorMode": "warning", "fill": true, "line": true, "op": "gt", "value": 8, "yaxis": "left" }, { "colorMode": "critical", "fill": true, "line": true, "op": "gt", "value": 9, "yaxis": "left" } ], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "Metrics Response Time (95th Percentile)", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:3437", "format": "s", "label": "Response Time", "logBase": 1, "max": null, "min": "0", "show": true }, { "$$hashKey": "object:3438", "format": "short", "label": null, "logBase": 1, "max": null, "min": null, "show": true } ], "yaxis": { "align": false, "alignLevel": null } }, { "aliasColors": { "getRecordings deleted": "purple" }, "bars": false, "cacheTimeout": null, "dashLength": 10, "dashes": false, "datasource": "$datasource", "fieldConfig": { "defaults": { "custom": {} }, "overrides": [] }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 9, "w": 12, "x": 12, "y": 60 }, "hiddenSeries": false, "id": 22, "legend": { "alignAsTable": true, "avg": true, "current": true, "max": true, "min": true, "rightSide": true, "show": true, "total": false, "values": true }, "lines": true, "linewidth": 1, "links": [], "nullPointMode": "null", "percentage": false, "pluginVersion": "7.1.1", "pointradius": 2, "points": false, "renderer": "flot", "seriesOverrides": [], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "expr": "histogram_quantile(0.95, sum(rate(bbb_api_latency_bucket{job=\"$job\", endpoint=\"getMeetings\", instance=\"$instance\"}[5m])) by (le, instance))", "instant": false, "interval": ,
          • "intervalFactor": 1,
          • "legendFormat": "getMeetings",
          • "refId": "A"
        • },
        • {
          • "expr": "histogram_quantile(0.95, sum(rate(bbb_api_latency_bucket{job=\"$job\", endpoint=\"getRecordings\", parameters=\"state=processing\", instance=\"$instance\"}[5m])) by (le, instance))",
          • "hide": false,
          • "interval": , "legendFormat": "getRecordings processing", "refId": "B" }, { "expr": "histogram_quantile(0.95, sum(rate(bbb_api_latency_bucket{job=\"$job\", endpoint=\"getRecordings\", parameters=\"state=processed\", instance=\"$instance\"}[5m])) by (le, instance))", "interval": ,
          • "legendFormat": "getRecordings processed",
          • "refId": "C"
        • },
        • {
          • "expr": "histogram_quantile(0.95, sum(rate(bbb_api_latency_bucket{job=\"$job\", endpoint=\"getRecordings\", parameters=\"state=published\", instance=\"$instance\"}[5m])) by (le, instance))",
          • "interval": , "legendFormat": "getRecordings published", "refId": "D" }, { "expr": "histogram_quantile(0.95, sum(rate(bbb_api_latency_bucket{job=\"$job\", endpoint=\"getRecordings\", parameters=\"state=unpublished\", instance=\"$instance\"}[5m])) by (le, instance))", "interval": ,
          • "legendFormat": "getRecordings unpublished",
          • "refId": "E"
        • },
        • {
          • "expr": "histogram_quantile(0.95, sum(rate(bbb_api_latency_bucket{job=\"$job\", endpoint=\"getRecordings\", parameters=\"state=deleted\", instance=\"$instance\"}[5m])) by (le, instance))",
          • "interval": , "legendFormat": "getRecordings deleted", "refId": "F" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, "title": "BigBlueButton API Response Time (95th Percentile)", "tooltip": { "shared": true, "sort": 0, "value_type": "individual" }, "type": "graph", "xaxis": { "buckets": null, "mode": "time", "name": null, "show": true, "values": [] }, "yaxes": [ { "$$hashKey": "object:3468", "decimals": null, "format": "s", "label": "Response Time", "logBase": 1, "max": null, "min": null, "show": true }, { "$$hashKey": "object:3469", "format": "short", "label": ,
          • "logBase": 1,
          • "max": null,
          • "min": null,
          • "show": false
        • }
      • ],
      • "yaxis": {
        • "align": false,
        • "alignLevel": null
      • }
    • }
  • ],
  • "refresh": "10s",
  • "schemaVersion": 26,
  • "style": "dark",
  • "tags": [
  • ],
  • "templating": {
    • "list": [
      • {
        • "hide": 0,
        • "includeAll": false,
        • "label": "Datasource",
        • "multi": false,
        • "name": "datasource",
        • "options": [],
        • "query": "prometheus",
        • "queryValue": , "refresh": 1, "regex": ,
        • "skipUrlSync": false,
        • "type": "datasource"
      • },
      • {
        • "allValue": null,
        • "datasource": "$datasource",
        • "definition": "label_values(bbb_exporter, job)",
        • "hide": 0,
        • "includeAll": false,
        • "label": "Job",
        • "multi": false,
        • "name": "job",
        • "options": [
          • {
            • "selected": true,
            • "text": "bbb",
            • "value": "bbb"
          • }
        • ],
        • "query": "label_values(bbb_exporter, job)",
        • "refresh": 0,
        • "regex": , "skipUrlSync": false, "sort": 0, "tagValuesQuery": ,
        • "tags": [],
        • "tagsQuery": , "type": "query", "useTags": false }, { "allValue": null, "datasource": "$datasource", "definition": "label_values(node_cpu_seconds_total, job)", "hide": 0, "includeAll": false, "label": "Job node_exporter", "multi": false, "name": "job_node_exporter", "options": [ { "selected": true, "text": "bbb_node_exporter", "value": "bbb_node_exporter" }, { "selected": false, "text": "cloud_maas", "value": "cloud_maas" } ], "query": "label_values(node_cpu_seconds_total, job)", "refresh": 0, "regex": ,
        • "skipUrlSync": false,
        • "sort": 0,
        • "tagValuesQuery": , "tags": [], "tagsQuery": ,
        • "type": "query",
        • "useTags": false
      • },
      • {
        • "allValue": null,
        • "datasource": "$datasource",
        • "definition": "label_values(bbb_api_up, instance)",
        • "hide": 0,
        • "includeAll": false,
        • "label": "Instance",
        • "multi": false,
        • "name": "instance",
        • "options": [],
        • "query": "label_values(bbb_api_up, instance)",
        • "refresh": 1,
        • "regex": , "skipUrlSync": false, "sort": 0, "tagValuesQuery": ,
        • "tags": [],
        • "tagsQuery": , "type": "query", "useTags": false }, { "allValue": null, "datasource": "$datasource", "definition": "label_values(node_network_transmit_bytes_total, device)", "hide": 0, "includeAll": false, "label": "Network Interface", "multi": false, "name": "interface", "options": [], "query": "label_values(node_network_transmit_bytes_total, device)", "refresh": 1, "regex": ,
        • "skipUrlSync": false,
        • "sort": 0,
        • "tagValuesQuery": , "tags": [], "tagsQuery": ,
        • "type": "query",
        • "useTags": false
      • }
    • ]
  • },
  • "time": {
    • "from": "now-6h",
    • "to": "now"
  • },
  • "timepicker": {
    • "refresh_intervals": [
      • "10s",
      • "30s",
      • "1m",
      • "5m",
      • "15m",
      • "30m",
      • "1h",
      • "2h",
      • "1d"
    • ]
  • },
  • "timezone": , "title": "BigBlueButton Server Instance (node_exporter)", "uid": "HIbd_CXZz3", "version": 6 } %% You are done 👏👏! <span id="TOC_2_17" class="yeswiki-title-anchor"></span>""

    TODOLIST ?


  • Prévoir streaming Peertube en plan A et non en plan B

  • Vérifier format sortie enregistrement vidéo



Installer Glances https://nicolargo.github.io/glances/
curl -L https://bit.ly/glances | /bin/bash

Installer BBB-recorder
https://github.com/jibon57/bbb-recorder

cd opt
git clone https://github.com/jibon57/bbb-recorder.git
cd bbb-recorder
./dependencies_check.sh # donne les lib a rajouter
sudo apt install gconf-service libgconf-2-4 libappindicator1 xvfb -y
curl -sS -o - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add
echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google-chrome.list
apt-get -y update
apt-get -y install google-chrome-stable
npm install --ignore-scripts