Retour d’expérience sur Jitsi Meet

Comme certains de vous le savent, on se « rencontre » chaque semaine via écrans interposés pour papoter, écouter, ou simplement voir les tronches de cakes de nos proches parce que, même si on est des sociopathes geekophiles à tendance nerdique, on a quand même besoin de visages humains pour se souvenir qu’on reste des humains.

Tradition à Triple A, on n’aime pas les solutions qui nous rendent dépendants et surveillés. Donc pas de Zoom, ni de Skype. On a choisi Jitsi Meet, d’abord sur des serveurs « libres » comme l’instance de Framasoft, puis en autonome sur nos propres serveurs.

Certains nous ont demandé comment on a fait. Explications plus ou moins vaporeuses donc dans ce billet. Premier élément de réponse : allez lire les tutoriels, Gogole et Qwant sont vos zamis.

En machine virtuelle

Choix d’un Ubuntu 20 LTS (serveur seulement), la version 18 fait très bien l’affaire aussi. Tourne sous VirtualBox ou équivalent. Nous avons deux machines virtuelles (VM) : la principale chez K-L nommée visio pour les réunions hebdomadaires (salons AmigaBouffe, MorphOS, AmigaOS, salons familiaux) avec 7 coeurs et 4 Go de RAM (hôte : Mac Pro 2008), la seconde chez Rajah nommée visio2 en complément pour les réunions exceptionnelles (microAlchimie VIrtuelle, AmigaBouffe de Noël, avec les salons LeBar, Atari, Oric, etc) avec 6 coeurs et 5 Go RAM (hôte : mac mini 2018, i5 hexacoeur). Pas besoin d’un gros disque dur, mais la taille des logs jitsi est à surveiller.

Attention si vous utilisez la version 20 d’Ubuntu : ce dernier intègre quand même une interface graphique, avec le mode économie activé par défaut. Nous avions des coupures de flux vidéos à cause de la mise en veille écran/réseau : il faut aller dans le mode graphique et désactiver la veille dans les préférences d’Ubuntu 20. Pas de souci avec la version 18.

Autre aspect important : de gros flux vont transiter. Il faut donc que le serveur soit sur Ethernet et non wifi local, branché directement sur la box internet, elle-même sur une connexion qui dépote : fibre FTTH plus que conseillée, à la limite du VDSL très rapide…

Installation de Jitsi Meet

Cf les tutoriels, j’ai bien aimé celui de Framasoft, qui indique en plus une petite personnalisation de l’interface web (au niveau du logo), qui restera rémanente par rapport aux mises à jour.

Vu que nos ports 443 sont occupés par des serveurs web personnels chez nous, nous avons donc choisi le port 4433 pour les accès web. Il y a de la retouche à faire donc au niveau des fichiers :
sudo nano /etc/nginx/sites-available/visio.triplea.fr.conf
-> remplacer listen 443 par 4433 puis nginx -s reload
sudo nano /etc/jitsi/meet/visio.triplea.fr-config.js
-> bosh: '//visio.triplea.fr:4433/http-bind',
[EDIT 05/02/2023] sudo nano /etc/jitsi/videobridge/jvb.conf
-> remplacer le port 443 par 4433 au niveau de 'domain' si présent

A noter que nous avons préféré la version unstable, d’abord pour tenter de résoudre le problème de coupures causées par la mise en veille de Ubuntu 20, puis pour bénéficier des avantages des nouveautés (par exemple, le focus automatique sur la vidéo gars qui cause). Mais par pitié, ne faites pas comme moi, n’oubliez pas de faire un backup de votre VM avant chaque mise à jour. Car certaines peuvent flinguer votre configuration.

Au niveau des ports à ouvrir sur la box internet pour le diriger vers votre VM via son IP intranet (et éventuellement dans le firewall ufw d’Ubuntu, si vous l’utilisez) :
– 443/tcp (4433/tcp chez nous)
– 80/tcp (fermé chez nous, peut-être utile si méthode d’obtention du certificat letsEncrypt en http-01)
– 10000/udp (pour les flux vidéo)
– 4443/tcp (pour le videobridge)
– 3478/udp (turn, stun ?) et 5349/tcp (turns)

[EDIT 29/01/2023] Lors d’une migration vers Debian 11 moins gourmande en place disque, avec un Jitsi neuf+stable :
+ 5222/tcp (pour le videobridge)

D’autres ports sont ouverts et translatés par la box pour le ssh (22/tcp en intranet, mais autre numéro en internet), pareil pour Cockpit (9090/tcp en intranet, autre numéro de port pour l’accès depuis l’extérieur). Oui, on a installé Cockpit, on est de grosses feignasses pas assez rootz pour n’utiliser que la ligne de commande.

Pour éviter les alertes de certificat, cerbot de LetsEncrypt a été installé, en relation avec nginx, mais vu qu’on est derrière la box et qu’on utilise déjà le port 80 pour d’autres serveurs web, le système de vérification se fait avec la méthode dns-01. On est donc allé chez notre fournisseur de nom de domaines gandi.net éditer notre zone DNS pour y inscrire un jeton de vérification. Je ne me souviens plus si le renew fonctionne, apparemment oui, via une ligne dans le /etc/cron.d, sinon le faire à la main de temps en temps…

Gestion de la modération

Jitsi est assez libre et permissif sur la création de salons. Le danger est la sur-utilisation anarchique par certains utilisateurs mal intentionnés. Le sytème de modération est encore embryonnaire. Deux solutions :

– déclarer les modérateurs dans prosody, qui a été installé avec Jitsi. Seul l’utilisateur ayant les droits de modération peut ouvrir/initier un salon. Consultez ce tutoriel.
pour ajouter :
sudo prosodyctl register pseudonyme visio.triplea.fr motdepasse
pour retirer :
sudo prosodyctl unregister pseudonyme visio.triplea.fr motdepasse
Les ajouts et retraits sont effectifs dès la commande, il n’y a pas besoin de redémarrer prosody pour que les changements soient pris en compte.
Nous avons utilisé certains pseudos et mot de passe de copains inscrits à la liste microAlchimie VIrtuelle.
Tout le monde peut aller sur un salon, comme par exemple https://visio.triplea.fr:4433/AmigaBouffe mais la visio-conférence ne peut débuter que lorsqu’un modérateur a indiqué son pseudonyme et mot de passe.

– autoriser que quelques salons, via des interdictions dans nginx. A noter que cette méthode peut être contournée sur iPad et autres clients non web, mais il faut être quand même modérateur pour utiliser un salon. Sur visio2,
sudo nano /etc/nginx/sites-available/visio2.triplea.fr.conf
#location ~ ^/([^/?&:'"]+)$ {
# try_files $uri @root_path;
#}

location ~ ^/(AmigaBouffe|LeBar|Oric|Amstrad|Atari)$ {
try_files $uri @root_path;
}

Si autre salon dans l’url web, l’utilisateur qui tente se prend une 404 dans la tronche.

Pour les paresseux, il y a bien sûr la solution de ne pas trop communiquer l’url du serveur et n’allumer la VM dédiée à la visio qu’aux moments voulus.

Personnalisations

Pour éviter de balancer des flux à 30 images par seconde, on a limité à 15 fps (paramètre maxFps). Les webcams étant très différentes, on a indiqué une plage de résolutions large, mais avec un idéal à 720p (min 240, max 1080).
Le mode vidéo H264 a été désactivé partout : trop de problèmes d’encodage, mal supporté dans la plupart des navigateurs. Le minHeightForQualityLvl est à 360 en standard et à 1080 en high. Pour ne pas alourdir les flux lors du partage d’écran, desktopSharingFrameRate est à 5 min et max. La résolution max à 1080 permet de ne pas dégrader la qualité d’image lors d’un partage d’écran.

Parce qu’on est trop choux et transparents, voilà notre /etc/jitsi/meet/visio.triplea.fr-config.js (attention, c’est du json, il faut faire attention aux virgules si vous commentez/décommentez une variable).
Vous noterez qu’on enregistre rien. Par contre, gardez en mémoire que n’importe quel utilisateur d’une visio peut capturer des vidéos sur son ordinateur (nous sommes tous les griveaux en puissance).

Un autre fichier de configuration permet de customiser l’interface web (cf l’installation de Framasoft, fin de page).

D’autres fichiers peuvent être édités sous nano si vous rencontrez des problèmes, cela commence à être ésotérique, et on se rend compte que le videobridge de Jitsi est codé en java.

sudo nano /etc/jitsi/videobridge/sip-communicator.properties
org.ice4j.ice.harvest.DISABLE_AWS_HARVESTER=true
#org.ice4j.ice.harvest.STUN_MAPPING_HARVESTER_ADDRESSES=meet-jit-si-turnrelay.jitsi.net:443
org.ice4j.ice.harvest.NAT_HARVESTER_LOCAL_ADDRESS=votre_ip_intranet
org.ice4j.ice.harvest.NAT_HARVESTER_PUBLIC_ADDRESS=votre_ip_internet
org.ice4j.ipv6.DISABLED=true
org.jitsi.videobridge.TCP_HARVESTER_PORT=4443
org.jitsi.videobridge.DISABLE_TCP_HARVESTER=true
org.jitsi.videobridge.ENABLE_STATISTICS=true
org.jitsi.videobridge.STATISTICS_TRANSPORT=muc
org.jitsi.videobridge.xmpp.user.shard.HOSTNAME=visio.triplea.fr
org.jitsi.videobridge.xmpp.user.shard.DOMAIN=auth.visio.triplea.fr
...

sudo nano /etc/jitsi/jicofo/sip-communicator.properties
org.jitsi.jicofo.BRIDGE_MUC=JvbBrewery@internal.auth.visio.triplea.fr
org.jitsi.jicofo.auth.URL=XMPP:visio.triplea.fr

Bon, voilà

C’est tout pour le moment. Il y aura peut-être des rectifications, des ajouts et des commentaires.

Pour rappel, conseillez aux utilisateurs les navigateurs Chromium et Chrome et maintenant Edge (donc Firefox à éviter, dommage), sur des machines puissantes (core i5 mini récents) sinon les ventilateurs vont souffler beaucoup de chaud. Si les apps clientes sur iPad, iPhone, Android sont utilisées, il faut impérativement mettre vos iBidules branchés sur secteur sinon les batteries seront vidées sec.