Jitsi (docker-jitsi-meet, version figée) derrière Nginx sur meet.syllabuslab.fr, accès par jeton JWT signé par le portail, modération du micro, mains levées synchronisées avec l'application. Pare-feu : UDP 10000 et pont interne br-visio (accords d'Adam). Jicofo n'authentifie plus lui-même : il donnait le rôle de propriétaire aux élèves. Capacité ramenée à 20 VM. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
3 KiB
3 KiB
ADR 0005 — Visio de classe : Jitsi auto-hébergé, jetons du portail, prof seul modérateur
- Date : 2026-10-12
- Statut : accepté
Contexte
Étape 15 : une visio pour la classe, sur le même serveur, où seuls les élèves de la classe entrent (nom non modifiable), où tout le monde arrive en sourdine et où seul le prof donne la parole.
Décisions
- Jitsi Meet en Docker (docker-jitsi-meet, version figée
stable-11248), rôle Ansiblevisio, derrière le Nginx de l'hôte surmeet.syllabuslab.fr. - JVB sur le réseau de l'hôte : Docker tourne sans pont par défaut ni règles
iptables (étape 5), donc la publication de l'UDP 10000 par NAT Docker est
impossible. JVB écoute directement l'UDP 10000 (ouvert dans nftables, accord
d'Adam) et joint Prosody par
127.0.0.1:5222. - Pont interne
br-visioautorisé dans la chaîneforward(accord d'Adam) : avecbr_netfilter, le trafic entre conteneurs d'un même réseau Docker passe parforward, dont la politiquedropbloquait Jicofo et le conteneur web. Seul le trafic qui entre ET ressort parbr-visioest accepté. - Accès par jeton JWT (HS256) signé par le portail, un par personne, pour
une salle au nom imprévisible ; pas d'invités (
ENABLE_GUESTS=0). Le secret est généré sur le serveur et copié dans le.envdu portail par Ansible. - Rôle de modérateur lu dans le jeton (
context.user.moderator, module natiftoken_affiliation) ;ENABLE_AUTO_OWNER=0etJICOFO_ENABLE_AUTH=0: sinon Jicofo authentifie chaque participant et donne le rôle de propriétaire à tous (constaté : un élève pouvait ouvrir son micro sans la parole). - Modération du micro activée par la page du prof à son arrivée
(
toggleModeration), « Donner la parole » =askToUnmute(qui autorise le micro quand la modération est active, d'après la documentation de l'IFrame API). - État de la classe tenu par le portail (cache Redis, verrou) : mains levées
par ordre d'arrivée, correspondance élève ↔ participant Jitsi, salle d'attente.
La main levée suit toujours l'événement Jitsi (
raiseHandUpdated) : une seule source.
Alternatives écartées
- Publier l'UDP 10000 par Docker : demande de rendre à Docker la main sur iptables, ce qu'on a refusé dès l'étape 5.
- Mettre tous les conteneurs sur le réseau de l'hôte : conflits de ports avec Kolla (ex. 10.10.0.1:8000) et services internes exposés sur toutes les interfaces.
- Relais TURN sur 443 pour les réseaux qui bloquent l'UDP : impose de restructurer l'entrée HTTPS (aiguillage par nom) ; reporté (choix d'Adam).
Conséquences
- Réseaux scolaires qui bloquent l'UDP : pas de son ni d'image tant que le relais
TURN sur 443 n'existe pas (
docs/dette.md). - Capacité ramenée de 22 à 20 VM (
docs/capacite.md). Permissions-Policydu portail délègue caméra, micro et partage d'écran au seulmeet.syllabuslab.fr; le sitemeetn'est intégrable que dans le portail (frame-ancestors).