# Runbook — Visio de classe (Jitsi, étape 15) Décisions : [ADR 0005](../adr/0005-visio-jitsi.md). ## 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.