# Runbook — WebDAV de l'élève Dossier personnel de l'élève, monté comme lecteur réseau (bloc C du CLAUDE.md). Détail des choix et des bugs trouvés en vérifiant en réel : [ADR 0008](../adr/0008-webdav-eleve-auth-request.md). ## Où sont les choses | Élément | Emplacement | |---|---| | Fichiers des élèves | `/var/www/portail/storage/app/webdav//` (jamais versionné, jamais synchronisé par un déploiement) | | Service WebDAV | `rclone-webdav.service` (systemd), écoute en local seulement sur `127.0.0.1:8765` | | Authentification | `App\Http\Controllers\WebdavAuthController`, sous-requête Nginx `/interne/webdav-auth` (jamais appelable de l'extérieur) | | Config Nginx | bloc `/webdav/` dans `ansible/roles/portail/templates/nginx-portail.conf.j2` | Adresse pour l'élève : `https://syllabuslab.fr/webdav/` (voir « Mes fichiers » dans le menu du compte). Identifiants : les mêmes que la connexion. ## Vérifier que ça fonctionne ``` systemctl is-active rclone-webdav curl -s -o /dev/null -w "%{http_code}\n" https://syllabuslab.fr/webdav/ # 401 attendu sans identifiants ``` Avec un compte élève jetable (créé et supprimé ensuite via tinker, jamais un compte réel) : ``` curl -u IDENTIFIANT:CODE -X PROPFIND -H "Depth: 1" https://syllabuslab.fr/webdav/ curl -u IDENTIFIANT:CODE -T fichier.txt https://syllabuslab.fr/webdav/fichier.txt ``` ## Pourquoi RAM et disque sont serrés Comme pour Ceph (voir `docs/runbooks/ceph.md`) : ce serveur a réellement 31 Go de RAM et 230 Go en RAID 1, pas 64 Go / 2×500 Go comme écrit dans le CLAUDE.md. rclone utilise ~20 Mo, négligeable — mais chaque fichier déposé par un élève prend de l'espace disque réel, partagé avec OpenStack et le portail. Pas de quota par élève pour l'instant (voir `docs/dette.md`). ## Nettoyer entièrement (si besoin) ``` ssh paillasse sudo systemctl disable --now rclone-webdav.service sudo rm /etc/systemd/system/rclone-webdav.service sudo rm -rf /var/www/portail/storage/app/webdav sudo systemctl daemon-reload ``` Puis retirer le bloc `/webdav/` et `/interne/webdav-auth` du vhost (relancer `ansible-playbook portail.yml` après avoir enlevé `09-webdav.yml` du `main.yml` du rôle). ## Écueils rencontrés (pour ne pas les redécouvrir) - **Jamais `rewrite` pour injecter une variable posée par `auth_request_set`** dans le chemin proxié — `rewrite` s'exécute avant que la variable existe. Utiliser une `location` à regex nommée + `proxy_pass` avec la variable dans l'URL. - **`--vfs-cache-mode off` ne désactive pas le cache de répertoires de rclone** (`--dir-cache-time`, 5 min par défaut) : un dossier créé par Laravel reste invisible de rclone jusqu'à l'expiration du cache, sauf à mettre `--dir-cache-time` très bas (1 s ici, le volume est faible). - **`SCRIPT_NAME`/`REQUEST_URI` ne sont pas fiables** dans une sous-requête `auth_request` qui fait son propre appel FastCGI : les écrire en dur quand l'URI de la location est fixe.