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}