Table des matières

Videoconférence avec Jitsi meet

On utilise ici comme exemple le DNS meet.kideba.com

Prérequis

Prérequis:

apt install nginx docker-compose
add-apt-repository ppa:certbot/certbot
apt install python-certbot-nginx

Configurez votre site web (ici nginx): créez /etc/nginx/sites-available/meet.kideba.com. Notez qu'on y a mis déjà le proxy de redirection vers le futur service jitsi:

server {
    server_name meet.kideba.com;
    root /var/www/html;
    location / {
        proxy_set_header   X-Forwarded-For $remote_addr;
        proxy_set_header   Host $http_host;
        proxy_pass         "http://127.0.0.1:9800";
    }
    listen 443 ssl;
}

server {
    listen 80 ;
    listen [::]:80 ;
    server_name meet.kideba.com;
    root /var/www/html;
}

Puis activez le site et son certificat:

cd /etc/nginx/sites-enabled; ln -s ../sites-available/meet.example.com
nginx -t  # pour tester
service nginx reload
certbot  --nginx $(grep server_name /etc/nginx/sites-enabled/*|sed 's/.*server_name \(.*\)\s*;\s*#*.*/\1/'| tr ' ' '\n'|sort -u|grep .|xargs -L 1 echo -n " -d")

Installation de jitsi

cd /opt
git clone https://github.com/jitsi/docker-jitsi-meet
cd docker-jitsi-meet
mkdir -p ~/.jitsi-meet-cfg/{web/letsencrypt,transcripts,prosody,jicofo,jvb}
cp env.example .env

Changez dans .env ces entrées:

Testez déjà le docker en premier plan. Notez qu'il faut attendre pas mal avant que le service ne soit lancé (le journal vous indiquera web_1 | [services.d] done. quand il sera prêt).

docker-compose up     # <Control>-C pour finir

Note: s'il y a une erreur de type "ERROR: Version in "./docker-compose.yml" is unsupported.", plutôt que de chercher à mettre à jour docker, vous pouvez aussi changer la version dans docker-compose.yml de 3 à 2, ca semble marcher.

Dans une autre session SSH sur votre serveur, vérifiez que "ça tourne":

netstat -tanp | grep docker

Ainsi qu'en allant sur votre site, s'il est accessible:

http://meet.example.com:9800

Pour le relancer en tache de fond:

docker-compose up -d

Sécurisation HTTPS

Vous pouvez maintenant bloquer le service HTTP direct de jitsi pour l'extérieur, en ajoutant le préfixe 127.0.0.1 aux ports dans le fichier /opt/docker-jitsi-meet/docker-compose.yml

ports:
  - '127.0.0.1:${HTTP_PORT}:80'
  - '127.0.0.1:${HTTPS_PORT}:443'

Et relancez tout le monde: service nginx reload; docker-compose down; docker-compose up -d

Contrôle d'accès

Ref.

:!: bizarrement, le contrôle est effectué APRES la demande d'accès à une conférence

Pour ajouter un contrôle d'accès (utilisateur / mot de passe):

Reconfigurez votre /opt/docker-jitsi-meet/.env:

ENABLE_AUTH=1      # seuls les utilisateurs identifiés peuvent créer des sessions
#ENABLE_GUESTS=1   # si vous autorisez les invités sans compte (ils ne peuvent créer des salles)
AUTH_TYPE=internal

Relancez le service:

docker-compose down
rm -r ~/.jitsi-meet-cfg/   # c'est important!
docker-compose up -d

Pour gérer les comptes vous devez vous logguer dans le docker:

docker-compose exec prosody /bin/bash

Puis pour ajouter un compte, on passe par le serveur XMPP (c'est celui qui assure le "chat" dans jitsi):

prosodyctl --config /config/prosody.cfg.lua register USERNAME meet.jitsi PASSWORD

Ou pour supprimer un compte:

prosodyctl --config /config/prosody.cfg.lua deluser jeremie@meet.jitsi

Voyez aussi ces scripts avancés.

Bug? Avec le ENABLE_GUESTS ? =⇒ https://github.com/jitsi/docker-jitsi-meet/issues/27

OPTIMISATIONS

Vous pouvez apporter quelques modifications dans ~/docker-jitsi-meet/web/rootfs/defaults/config.js, notamment pour brider la résolution et donc l'usage de la bande passante:

    (...)
    
    // Sets the preferred resolution (height) for local video. Defaults to 720.
    resolution: 240,

    // w3c spec-compliant video constraints to use for video capture. Currently
    // used by browsers that return true from lib-jitsi-meet's
    // util#browser#usesNewGumFlow. The constraints are independency from
    // this config's resolution value. Defaults to requesting an ideal aspect
    // ratio of 16:9 with an ideal resolution of 720.
    constraints: {
        video: {
            aspectRatio: 16 / 9,
            height: {
                ideal: 240,
                max: 480,
                min: 240
            }
        }
    },

    (...)

Voyez aussi le champ

defaultLanguage: 'fr',

Bigbluebutton

(:!: section minimaliste)

C'est une solution qui va plus loin que la visio mais qui offre un peu de e-learning, ainsi que des options intéressantes comme la possibilité de gribouiller par dessus l'écran.

Installation:

git clone https://github.com/bigbluebutton/docker.git
mv docker bigbluebutton-docker
cd bigbluebutton-docker
git checkout v2.2.x   # la dernière version pose des problèmes avec la commande suivante!
docker build -t bigbluebutton .
HOSTIP="127.0.0.1"  # pour limiter l'accès externe
docker run --rm -p $HOSTIP:41080:80/tcp -p $HOSTIP:411935:1935 -p $HOSTIP:413478:3478 -p $HOSTIP:413478:3478/udp bigbluebutton -h $HOSTIP

Puis mappez les ports via nginx comme indiqué ci-dessus.

Pour un proxying UDP:

    server {
        listen 2555 udp;
        proxy_pass receiving_servers;
        proxy_responses: 0;
        proxy_bind 5.0.0.0;
        #... 
    }