Problème résolu
La plupart des sauvegardes MongoDB reposent sur un script shell artisanal qui envoie la sortie de mongodump quelque part et annonce un succès quoi qu'il arrive. Les pannes sont silencieuses : un dump qui meurt en cours de route téléverse quand même une archive tronquée, une base vide (nom mal orthographié, mauvais hôte) produit une archive minuscule mais valide qui « réussit » chaque nuit, et un script de rétention naïf finit par supprimer la dernière sauvegarde survivante quand le cron qui en crée de nouvelles casse sans bruit. Tu le découvres le jour où tu dois restaurer.
Proposition de valeur
Une petite image Docker avec cinq commandes : backup, restore, list, prune, thin. Chaque panne connue est soit neutralisée (les téléversements tronqués sont détectés et supprimés, une archive trop petite fait échouer l'exécution, la sauvegarde la plus récente n'est jamais supprimée, une valeur de rétention mal saisie interrompt tout au lieu de supprimer en masse), soit documentée honnêtement dans le README comme une limite à lire. La rétention est au choix un simple seuil d'âge ou un amincissement grand-père-père-fils : avec des paliers à 24 horaires, 7 quotidiens, 4 hebdomadaires et 12 mensuels, un an de sauvegardes horaires se réduit à environ 47 copies au lieu de 8 760. Compatible avec n'importe quel stockage S3, sans planificateur intégré : ton cron, ton timer systemd ou ton CronJob Kubernetes s'en charge.
Public cible
Auto-hébergeurs, freelances et petites équipes qui font tourner MongoDB en Docker et veulent des sauvegardes hors site sans adopter une plateforme de backup lourde, et qui tiennent à un outil qui échoue bruyamment plutôt que de faire semblant.
Stack technique
- Un seul script shell POSIX (environ 400 lignes), aucune dépendance au-delà d'aws-cli et de mongodb-tools
- Image Docker basée sur Alpine, multi-architecture (
linux/amd64 et linux/arm64), publiée sur GHCR
- Suite de tests d'acceptation contre de vrais conteneurs mongo et MinIO, avec injection de panne pour les dumps interrompus en cours de flux
- GitHub Actions pour l'intégration continue ; releases déclenchées par tag, le tag fait office de version
Statut
En ligne, sous licence GPL-3.0. Code généré par Claude Code, puis testé et revu manuellement. Chaque garde-fou du script existe à cause d'une vraie panne et possède un test qui peut réellement échouer. Ouvert aux issues et aux pull requests.