Paillasse/docs/runbooks/webdav.md

68 lines
2.9 KiB
Markdown
Raw Normal View History

# 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/<id élève>/` (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.