68 lines
2.9 KiB
Markdown
68 lines
2.9 KiB
Markdown
|
|
# 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.
|