Paillasse/docs/runbooks/visio.md
Adam Belkacemi ec4eae3744 ajoute la visio de classe : Jitsi auto-hébergé, jetons du portail, prof seul modérateur
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>
2026-10-12 12:35:35 +02:00

2.7 KiB

Runbook — Visio de classe (Jitsi, étape 15)

Décisions : ADR 0005.

Où sont les choses

Élément Emplacement
Conteneurs (web, prosody, jicofo, jvb) /opt/visio/docker-compose.yml, projet Docker visio (rôle visio)
Configuration (sans secret) /etc/visio/visio.env (modèle ansible/roles/visio/templates/visio.env.j2)
Secrets (mots de passe internes, secret des jetons) /etc/visio/secrets.env, 600 root:root, générés une fois ; VISIO_JWT_SECRET copié dans le .env du portail
Site public https://meet.syllabuslab.fr (vhost du rôle portail, activé quand le DNS répond)
Pare-feu UDP 10000 ouvert ; pont br-visio autorisé en forward (rôle durcissement)
Portail VisioController, JetonVisio, vues seances/visio-prof et seances/visio-eleve
Test réel portail/tests/Reels/preparer-visio.php + visio-e2e.mjs (Playwright)

Déployer

cd ansible && ansible-playbook visio.yml -i inventory.ini

Le rôle vérifie que Jitsi web répond, que JVB écoute l'UDP 10000, et que Jicofo voit un JVB opérationnel (preuve que les services se parlent).

Vérifier

D="sudo docker compose -p visio -f /opt/visio/docker-compose.yml"
$D ps
$D exec -T jicofo curl -s http://127.0.0.1:8888/stats | python3 -m json.tool | grep -E "operational_bridge_count|conferences"
$D logs --since 10m jicofo | grep -E "Member joined|Setting whitelist|Moderation for"

Attendu dans les journaux de Jicofo : le prof role=OWNER, les élèves role=PARTICIPANT ; la liste des autorisés à parler ne contient que le prof, puis chaque élève au moment où il reçoit la parole. Si un élève y apparaît dès son arrivée, Jicofo a repris l'authentification : vérifier JICOFO_ENABLE_AUTH=0.

Test de bout en bout (navigateurs)

  1. Sur le serveur : sudo -u www-data HOME=/tmp php8.3 artisan tinker /var/www/portail/tests/Reels/preparer-visio.php < /dev/null (le < /dev/null évite que Tinker reste ouvert en attente d'une saisie).
  2. Sur le Mac : récupérer /tmp/visio-identifiants.json (fichier 600), puis node visio-e2e.mjs identifiants.json (Playwright, Chromium).
  3. Supprimer les données et fichiers de test.

Pièges rencontrés

  • Conteneurs refusant de démarrer : leurs volumes doivent appartenir à l'uid 1000.
  • Conteneurs qui ne se joignent pas : br_netfilter + politique forward drop (règle br-visio).
  • Jicofo ne se reconnecte pas tout seul après une longue indisponibilité de Prosody : $D restart jicofo.
  • Élèves modérateurs malgré token_affiliation : JICOFO_ENABLE_AUTH=0 obligatoire.
  • Permissions-Policy trop stricte (caméra interdite) ou X-Frame-Options DENY : la visio ne s'affiche pas sans erreur visible.