Aller au contenu

Choisir sa recette

Une recette est un plan de test complet : les étapes qui restaurent votre sauvegarde dans un bac à sable jetable, et les sondes qui vérifient ce qui en est sorti. Chaque recette est donnée en JSON, prête à coller.

J'ai ceci → allez là

Ce que vous sauvegardez Recette
Un dump PostgreSQL (.sql, .sql.gz, .dump) PostgreSQL
Un dump MySQL ou MariaDB (mysqldump) MySQL
Une archive tar.gz / zip de fichiers Fichiers et archives
Une archive que vous ne voulez pas décompresser Vérifier l'archive sans l'ouvrir
Un site WordPress (base + wp-content) WordPress
Gitea, Docmost, Vaultwarden (base + fichiers) Applications auto-hébergées
Une sauvegarde PocketBase (ZIP de pb_data) PocketBase
Un annuaire LDAP (export LDIF) LDAP
Une base MongoDB (mongodump) MongoDB
Des certificats TLS (fichiers PEM) Certificats

Votre technologie n'est pas dans la liste : partez de la recette la plus proche. Une base relationnelle se restaure comme PostgreSQL, un dossier de données comme une archive de fichiers, une application qui redémarre sur son répertoire comme PocketBase.

Ce qu'une recette contient

Un plan est un document JSON avec deux clés, et rien d'autre :

  • steps — ce qu'il faut faire pour obtenir la donnée restaurée : fetch (récupérer), unpack (décompresser), start_sandbox (démarrer un conteneur), exec_in_sandbox (préparer le conteneur), restore_postgres, restore_mysql, restore_mongo, restore_ldap. Il n'y a pas d'autre type d'étape.
  • probes — ce qui est vérifié une fois la restauration faite. Chaque sonde tourne dans son propre conteneur, détruit après.

Pour l'utiliser : créez un plan, ouvrez l'écran d'édition, onglet JSON (expert), collez, enregistrez.

Adapter le bloc fetch

Dans les recettes qui suivent, l'étape fetch désigne un dossier local visible par le runner :

{
  "source": "local",
  "path": "/backups/mon-app",
  "file_pattern": "dump_*.sql.gz",
  "selection_strategy": "latest_modified",
  "max_age": "26h",
  "output": "dump.sql.gz"
}

Si vous avez déclaré une source (S3, MinIO, HTTP) dans RestoreProof, remplacez l'emplacement — source, path — par une référence à cette source. Le profil apporte le chemin (ou le bucket S3), le motif de fichier et la stratégie de sélection que vous y avez saisis :

{
  "source": "source_profile",
  "source_id": "<identifiant de votre source>",
  "max_age": "26h",
  "output": "dump.sql.gz"
}

Les clés que vous laissez dans l'étape l'emportent sur celles du profil. Gardez donc output — les étapes suivantes désignent le fichier par ce nom — et max_age, qui appartient au plan et non à la source.

max_age fait échouer l'exécution quand la sauvegarde trouvée à la source est plus vieille que ce délai. C'est la seule vérification qu'un test de restauration ne peut pas déduire du contenu : une sauvegarde qui a cessé d'être produite il y a trois mois se restaure parfaitement.

Les seuils ne se comptent pas à la main

Toutes les recettes contiennent des nombres : 100 articles, 6 comptes, 50 fichiers. Ne recopiez pas les nôtres et n'allez pas compter sur votre infrastructure.

Lancez un essai. Il restaure votre sauvegarde et compte ce qu'elle contient réellement. L'écran vous propose alors chaque seuil 5 % en dessous de la valeur mesurée, jamais en dessous de 1, avec l'opérateur gte (« au moins »). Vous corrigez si besoin, vous appliquez, vous enregistrez.

Les 5 % sont une marge volontaire : sans elle, la première sauvegarde qui contient un fichier de moins passe au rouge, et trois fausses alertes suffisent à ce que plus personne ne lise les alertes. L'opérateur n'est jamais eq : une sauvegarde qui grossit, c'est normal.

Pour MongoDB, l'essai propose en plus le nom de la base et celui de la collection : la sonde liste ce qu'elle a trouvé dans le bac à sable, et vous reprenez le nom exact d'un clic au lieu de le deviner. Et si l'archive ne contient pas la base nommée dans le plan, l'étape de restauration s'arrête tout de suite en listant ce qu'elle contient vraiment.

Le mot de passe du bac à sable

Les recettes ne montrent aucun mot de passe pour le conteneur bac à sable : il n'y en a pas dans le plan, nulle part. Le runner reconnaît le type de conteneur qu'il démarre et fabrique lui-même les identifiants dont il a besoin, à chaque exécution. Il n'y a rien à choisir ni à saisir. Cette valeur ne sort jamais du runner, elle est identique partout où le conteneur est visé dans une même exécution, et elle disparaît avec lui à la fin. Elle n'a aucun rapport avec les mots de passe de votre serveur d'origine, dont RestoreProof n'a pas besoin : la restauration recrée les comptes tels que la sauvegarde les contient.

Quand une sonde a besoin d'un vrai secret (le mot de passe d'un compte administrateur de l'application restaurée, par exemple), écrivez une référence plutôt que la valeur, sous l'une de ces trois formes :

Référence Ce que le runner lit
env://MA_VARIABLE La variable d'environnement MA_VARIABLE du runner
file://ma_cle Le fichier ma_cle dans le dossier des secrets du runner
static://ma_cle La clé ma_cle de la table de secrets statiques du runner

Le runner la résout chez vous, dans son propre environnement. RestoreProof ne stocke jamais la valeur.