# Panel Mises à jour — `mathieu.u` uniquement

## Premier déploiement (manuel — 1 fois)

Pour que le panel puisse extraire le ZIP et redémarrer les containers, le
container `cariste-backend` a besoin de 2 nouveaux volumes :

```yaml
cariste-backend:
  volumes:
    - /volume1/Web/cariste-api/backend:/app
    - /var/run/docker.sock:/var/run/docker.sock:rw  # restart containers
    - /volume1/Web/cariste-api:/host-deploy:rw       # écrit les fichiers MAJ
```

Ces 2 lignes sont déjà dans le `docker-compose.yml` de ce ZIP. Donc pour le
premier passage :

1. Upload `docker-compose.yml` manuellement (FileZilla)
2. SSH ou Portainer : `docker compose up -d`
3. Connecte-toi à MyTruck en `mathieu.u`
4. Va dans **Paramètres → Mises à jour MyTruck**
5. Désormais, tu glisses le ZIP suivant et tout se déploie tout seul ✅

## Sécurité

- L'endpoint est strictement réservé à `mathieu.u` (super-admin)
- Whitelist des fichiers extraits : `backend/server.py`, `backend/requirements.txt`,
  `frontend/build/*`, `nginx/default.conf` — aucun autre chemin n'est touché
- Protection contre les `..` (path traversal)
- Backup auto avant chaque MAJ dans `/volume1/Web/cariste-api/backups/`
- Rollback en 1 clic

## Historique stocké
Table `update_history` (créée auto au boot) — id, filename, status, qui a
déployé, quand, log d'erreur.
