Sauvegardes et export

2 mécanismes complémentaires : backups automatisés stockés sur Nextcloud (long-terme), et exports téléchargeables à la demande (migration / récupération rapide).

Backups Nextcloud

Backup complet d'un site : compose + volumes Docker + dumps SQL des DBs attachées, uploadé sur Nextcloud WebDAV.

Créer un backup manuel

  1. DĂ©tail site → section Backups → Backup now
  2. Ou via API : POST /api/v1/sites/<id>/backups

Ce qui est backupé

  • docker-compose.yml du site
  • MANIFEST.json avec mĂ©tadonnĂ©es (site_id, slug, runtime, timestamp)
  • Contenu du dossier /opt/iridflow/<projet>/<site>/ (sans node_modules, .next, vendor, .git)
  • Volumes Docker du site (tarĂ©s depuis un container helper alpine, pas de sudo)
  • Dumps SQL des DBs attachĂ©es (mariadb-dump, pg_dump)

Combien de temps elles sont gardées

Trente jours par dĂ©faut. Chaque ligne de la section Backups affiche sa date d'expiration : passĂ©e cette date, la sauvegarde est effacĂ©e et n'est plus restaurable. Ce qui doit ĂȘtre gardĂ© plus longtemps doit sortir par un export tĂ©lĂ©chargeable.

Backup automatique quotidien

Toggle par site : cron interne 03:00 UTC chaque nuit qui :

  • Boucle sur les sites auto_backup=true (skip si dernier backup < 20h)
  • CrĂ©e un backup scheduled
  • Purge les backups expirĂ©s (row DB + fichier Nextcloud) selon IRIDFLOW_BACKUPS_RETENTION_DAYS (30j default)

Activation : dĂ©tail site → Backups → checkbox Backup automatique quotidien. Ou :

set_backup_schedule({ site_id: "site_xxx", enabled: true })
// ou
PATCH /api/v1/sites/site_xxx/backup-schedule
Body: {"enabled": true}

List / Delete

list_backups({ site_id: "site_xxx" })      // par site
list_backups({})                             // tous (admin only)
delete_backup({ backup_id: "bak_xxx" })      // row DB + fichier Nextcloud

delete_backup supprime aussi le fichier Nextcloud en best-effort (WebDAV DELETE). Un delete_site cascade tous ses backups (Nextcloud + DB) automatiquement.

Restaurer

Restaurer remet le site dans l'Ă©tat de la sauvegarde choisie : le site est arrĂȘtĂ©, ses donnĂ©es sont remplacĂ©es par celles de la sauvegarde, puis il redĂ©marre. Tout ce qui a Ă©tĂ© Ă©crit depuis est perdu, sans retour arriĂšre possible.

Le chemin dans l'interface, la confirmation demandée et le détail de ce que tu perds sont sur la page Restaurer une sauvegarde.

Export téléchargeable (V1)

Alternative au backup Nextcloud : génÚre un tarball local avec URL signée valide 24h. Idéal pour migration rapide, dev local, audit code.

Générer un export

  1. DĂ©tail site → section Export tĂ©lĂ©chargeable → GĂ©nĂ©rer un export
  2. Ou via API : POST /api/v1/sites/<id>/export

Retour :

{
  "token": "a8e9006e9bd406a7b7eefca27274f2e8f73f98ceb78741ae",
  "download_url": "https://mcp.iridflow.com/api/v1/exports/<token>/download",
  "size_bytes": 9269,
  "size_mb": "0.01",
  "has_sql_dump": false,
  "sql_dbs": [],
  "expires_at": "2026-08-30T22:10:45.591Z",
  "ttl_hours": 24
}

Contenu du tarball

  • MANIFEST.json : mĂ©tadonnĂ©es site
  • code.tar.gz : sources du site (sans node_modules/.next/vendor/.git/__pycache__)
  • sql/<db-slug>.sql : dumps SQL des DBs attachĂ©es (best-effort)

URL de download

  • Route publique authentifiĂ©e par le token dans l'URL (32 hex bytes = auth crypto)
  • TTL 24h, purge auto via systemd timer iridflow-exports-cleanup.timer
  • Peut ĂȘtre tĂ©lĂ©chargĂ©e depuis n'importe quel navigateur / curl / wget
Attention
Le token dans l'URL vaut authentification. Ne partage pas ce lien avec des tiers, il donne accĂšs Ă  tout le code + dumps SQL du site.

Backups vs Export : lequel utiliser

CasUtilise
Sauvegarde réguliÚre long-termeBackups Nextcloud
Récupérer une copie locale rapideExport téléchargeable
Migration vers autre hébergeurExport
Debug production, code diffExport
Reprise aprÚs incidentBackup Nextcloud (rétention 30j)
Sauvegardes et export · Docs Iridflow · Iridflow