Skip to content

Installation de Webconf (avec authentification OAuth2 de la PLM)

Cette installation permet à toute structure participant au réseau Mathrice de déployer une instance de Greenlight authentifiée via le service OAuth2 de la PLM et de bénéficier d'une authentification dans la Fédération RENATER.

L'accès à cette fonctionnalité est limitée aux structures possédant un correspondant Mathrice.

Prérequis

BigBlueButton a besoin de :

  • une installation minimale Ubuntu 16.04 Xenial
  • Soit un certificat X509 ou bien suivez les indications ci-dessous avec LetsEncrypt
  • Une IP publique et routée avec un enregistrement DNS correct
  • Veillez à ce que votre serveur ait un filtrage ouvert en entrée et sortie sur votre campus pour les ports suivants :
- TCP/IP port 22 (pour SSH) (uniquement pour votre accès SSH, pas pour un usage normal)
- TCP/IP ports 80/443 (pour HTTP/HTTPS)
- UDP ports entre 16384 et 32768 (pour les flux FreeSWITCH/HTML5 RTP)

Les étapes ci-dessous vont installer BigBlueButton sur votre serveur ainsi que l'interface Web (front-end) Greenlight.

Greenlight est une application front-end pour le serveur BigBlueButton. Cette application fournit une interface simple pour permettre aux utilisateurs de créer des salles de webconférence, et de s'y connecter.

Installation de BigBlueButton

Selon la documentation de référence

vérifier la résolution DNS

Vous devez avoir une adresse IP routée et un enregistrement DNS public :

dig `hostname -f` @8.8.8.8

; <<>> DiG 9.10.3-P4-Ubuntu <<>> webconf.mon_labo.math.cnrs.fr @8.8.8.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36754
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;webconf.mon_labo.math.cnrs.fr.    IN    A

;; ANSWER SECTION:
webconf.mon_labo.math.cnrs.fr.    3599 IN    A    157.XXX.XXX.XXX

;; Query time: 26 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Fri Mar 20 12:34:00 UTC 2020
;; MSG SIZE  rcvd: 75

Déployer BigBlueButton

Avec un certificat TERENA

wget -qO- https://ubuntu.bigbluebutton.org/bbb-install.sh | sudo bash -s -- -v xenial-220 -s `hostname -f` -g -d

sudo apt-get purge bbb-demo
  • Déposez les fichiers certificat et clé privée et positionnez les bon chemins dans /etc/nginx/sites-available/bigbluebutton

  • Concaténez à la fin du fichier Certificat (webconf.mon_labo.math.cnrs.fr.crt) le contenu du fichier DigiCert_CA.crt (indispensable pour nginx produise un certificat avec toute la chaîne de certification) `

Avec la génération d'un certificat LetsEncrypt

wget -qO- https://ubuntu.bigbluebutton.org/bbb-install.sh | sudo bash -s -- -v xenial-220 -s `hostname -f` -e info@example.com -g

sudo apt-get purge bbb-demo

Finalisation de l'installation

Fixer la configuration afin de traverser les réseaux fortement filtrés

Des réseaux de campus de type WIFI peuvent filtrer les connexions UDP entrantes/sortantes ce qui génère des erreur de type 1007 ou 1020 lorsque vous tentez de configurer soit l'appel audio, soit l'appel vidéo.

Une solution est de forcer l'ensemble du trafic en TCP sur le port standard HTTPS (443) :

  • sur votre serveur coturn modifiez le fichier /etc/turnserver.conf ainsi :
listening-port=443
tls-listening-port=443
no-udp
  • sur votre serveur BBB, n'annoncez plus de serveur STUN (pour cela, votre serveur BBB doit être configuré avec une adresse IP routée et non pas derrière un NAT).

Dans le fichier usr/share/bbb-web/WEB-INF/classes/spring/turn-stun-servers.xml :

<--! remplacer mon_coturn.example.com par le nom de votre serveur coturn />
<constructor-arg index="1" value="turn:mon_coturn.example.com:443?transport=tcp"/>
...
<property name="stunServers">
            <set>
                <!--ref bean="stun1" /-->
                <!--ref bean="stun2" /-->
            </set>
</property>

Forcer HTTPS

Pour rediriger tout le trafic HTTP vers HTTPS éditez /etc/nginx/sites-enabled/bigbluebutton

remplacez en début de fichier :

server {
     listen   80;
     listen [::]:80;
     listen 443 ssl;
     listen [::]:443 ssl;
...

Par

server {
     listen   80;
     listen [::]:80;
     server_name  webconf.math.cnrs.fr;
     return 301 https://$server_name$request_uri; #redirect HTTP to HTTPS
}
server {
     listen 443 ssl;
     listen [::]:443 ssl;
...

Relancez nginx : sudo systemctl restart nginx

Démarrage de Greenlight au boot

Configurez le démarrage de Greenlight avec systemctl :

Vous pouvez utiliser les scripts fournis par Greenlight

ou bien :

sudo bash
mkdir -p /etc/docker/compose/ && ln -s /home/ubuntu/greenlight /etc/docker/compose/
cat > /etc/systemd/system/docker-compose@.service <<EOF
[Unit]
Description=%i service with docker compose
Requires=docker.service
After=docker.service

[Service]
Restart=always

WorkingDirectory=/etc/docker/compose/%i

# Remove old containers, images and volumes
ExecStartPre=/usr/local/bin/docker-compose down -v
ExecStartPre=/usr/local/bin/docker-compose rm -fv

# Compose up
ExecStart=/usr/local/bin/docker-compose up

# Compose down, remove containers and volumes
ExecStop=/usr/local/bin/docker-compose down -v

[Install]
WantedBy=multi-user.target
EOF
systemctl enable docker-compose@greenlight

Authentification Mathrice (authentification OAuth+RENATER)

  • Ecrire au suppport de la PLM en fournissant l'URL de votre serveur afin d'obtenir un CLIENT_ID et un SECRET_KEY

  • Ajoutez les champs PLM_CLIENT_ID=<...> PLM_SECRET_KEY=<...> URL_HOST=https://(hostname -f) au fichier .env

  • Editez les champs dans le fichier .env

OPENID_CONNECT_CLIENT_ID=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
OPENID_CONNECT_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
OPENID_CONNECT_ISSUER=https://plm.math.cnrs.fr/sp
OPENID_CONNECT_HD=
OPENID_CONNECT_UID_FIELD=sub

; OAUTH2_REDIRECT allows you to specify the redirect_url passed to oauth on sign in.
; It is useful for cases when Greenlight is deployed behind a Network Load Balancer or proxy
OAUTH2_REDIRECT=https://greenlight.mon_labo.fr/b

ALLOW_GREENLIGHT_ACCOUNTS=false

Redémarrez Greenlight : systemctl restart docker-compose@greenlight

Passer un premier utilisateur en tant qu'administrateur

Si vous n'utilisez pas de comptes locaux, vous avez besoin de vous connecter une première fois et donner les droits admin à cet utilisateur :

  • Connectez-vous sur l'image de l'application Rails :
sudo docker exec -it greenlight-v2 bundle exec rails console -e production
Loading production environment (Rails 5.2.3)
irb(main):001:0>
  • A partir de maintenant vous pouvez manipuler le modèle utilisateur et ajouter un role :
irb(main):001:0> User.all
=> #<ActiveRecord::Relation [#<User id: 2, room_id: 3, provider: "plm", uid: "gl-jarlrsfcdcqx", name: "John Doe", username: nil, email: "John.Doe@example.com", social_uid: "James", image: nil, password_digest: nil, accepted_terms: false, created_at: "2020-03-14 18:59:21", updated_at: "2020-03-14 18:59:21", email_verified: true, language: "default", rese0t....
irb(main):002:0> user = User.find_by(email: "John.Doe@example.com")
=> #<User id: 1, room_id: 1, provider: "plm", uid: "gl-jarlrsfcdcqx", name: "John Doe"...
irb(main):003:0> user.add_role :admin
=> true
irb(main):004:0> exit

Migration de l'Authentification OAuth2 custom (précédente version de cette page) vers OpenIDConnect

Depuis la version 2.3, greenlight propose une authentification OpenIDConnect. Si vous avez utilisé une image greenlight proposée ici précédemment, il vous faut migrer votre base utilisateurs.

Connectez-vous au conteneur greenlight

sudo docker exec -it greenlight-v2 bundle exec rails console -e production
Loading production environment (Rails 5.2.3)
irb(main):001:0>

Il faut convertir deux attributs dans les entrées existantes (sub et provider)

User.where(provider: 'plm').each{|u| u.social_uid=u.email; u.provider='openid_connect'; u.save}