Paillasse/docs/runbooks/visio.md

55 lines
2.7 KiB
Markdown
Raw Normal View History

# 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.