# Sauvegarde afonso (DB + uploads) vers le mutualisé OVH

Le site tourne sur le Kimsufi ; le mutualisé OVH (mykapsulml) n'accepte pas le SFTP serveur-à-serveur.
On passe donc par **HTTPS** : le Kimsufi POSTe les sauvegardes à un endpoint sur le mutualisé.

## Pièces

| Fichier | Où il tourne | Rôle |
|---|---|---|
| `receive.php` | **mutualisé** (`<web>/afonso-backup/`) | reçoit un POST, vérifie le token, écrit hors web, rotation (garde 12) |
| `.user.ini` | **mutualisé** (même dossier) | lève les limites PHP pour l'upload ~172 Mo |
| `backup.sh` | **Kimsufi** (`/var/www/afonso/scripts/`) | dump DB + tar uploads + push HTTPS vers l'endpoint |

## Déploiement mutualisé (via SFTP depuis le Mac)

Arborescence attendue (home = `/home/mykapsulml`) :

```
/home/mykapsulml/
├── <web>/afonso-backup/receive.php      ← servi par le web
├── <web>/afonso-backup/.user.ini
└── backup-store/                         ← HORS web (jamais téléchargeable)
    ├── token.txt                         ← 1 ligne : un token aléatoire (openssl rand -hex 32)
    └── afonso-*.{sql.gz,tar.gz}          ← les sauvegardes
```

1. Déposer `receive.php` et `.user.ini` dans `<web>/afonso-backup/`.
2. Créer `backup-store/` au niveau du home (hors du dossier web).
3. Générer un token sur le Mac (`openssl rand -hex 32`) et l'écrire dans `backup-store/token.txt`.
   Le MÊME token ira dans la config du Kimsufi — il ne transite jamais en clair ailleurs.

## Côté Kimsufi

`backup.sh` lit `DATABASE_URL` (jamais en dur), fait le dump + l'archive, puis pour chaque fichier :

```sh
curl -sS -X POST --data-binary @"$f" \
  -H "X-Token: $(cat /etc/afonso-backup.token)" \
  -H "X-Filename: $(basename "$f")" \
  "$BACKUP_URL"
```

Le token et l'URL vivent dans une config serveur (`chmod 600`), pas dans le dépôt.
Cron mensuel (user debian) appelle `backup.sh`.

## Restauration

- DB : `gunzip -c afonso-db-*.sql.gz | mysql -u<user> -p <base>`
- uploads : `tar xzf afonso-uploads-*.tar.gz -C public/`
