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),wait,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
tout le bloc config par :
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.
Les mots de passe des exemples¶
Les mots de passe écrits dans ces recettes (demo-ldap, restore,
demo-gitea…) sont ceux du conteneur bac à sable créé pour l'exécution,
détruit à la fin. Ce ne sont jamais les mots de passe de votre serveur
d'origine, et RestoreProof n'en 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 : env://MA_VARIABLE. Le runner la résout dans son propre
environnement, chez vous. RestoreProof ne stocke jamais la valeur.