Backups & 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 BackupsBackup 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)

Stockage

Nextcloud WebDAV, chemin :

Iridflow-Backups/<site-slug>/<timestamp>.tar.gz

Rétention : 30 jours par défaut (config IRIDFLOW_BACKUPS_RETENTION_DAYS).

Backups auto

Il n'y a pas encore de cron backup daily automatique en V1 (backlog). Solution actuelle :

// cron sur ta machine ou dans un site iridflow custom
# Backup daily 2h du matin via curl 0 2 * * * curl -X POST https://mcp.iridflow.com/api/v1/sites/SITE_ID/backups \ -H "x-api-key: iridflow_live_..." \ -H "Content-Type: application/json" \ -d '{"kind":"scheduled"}'

List / Delete

list_backups({ site_id: "site_xxx" })      // par site
list_backups({})                             // tous (admin only)
delete_backup({ backup_id: "bak_xxx" })
Attention
delete_backup supprime l'entrée DB mais laisse le fichier sur Nextcloud (V1). Purge manuelle nécessaire côté Nextcloud pour libérer l'espace.

Restore

Pas encore de tool restore_backup automatique. Procédure manuelle :

  1. Télécharge le tarball depuis Nextcloud
  2. tar xzf backup.tar.gz localement
  3. Créer un nouveau site avec le compose extrait, importer les volumes via docker helper, restore SQL via psql/mysql

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échargeableGé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)