📍 Article principal de la série : Vaultwarden self-hosted 2026 : guide complet. Lisez le guide général pour la vue d’ensemble.
Une équipe qui ne teste jamais la restauration de ses sauvegardes ne possède pas de sauvegardes : elle possède des illusions. Ce tutoriel détaille la procédure complète pour sauvegarder Vaultwarden de façon automatisée et chiffrée vers MinIO auto-hébergé ou Backblaze B2 (S3-compatible) à 6 USD le téraoctet par mois, avec rétention 30 jours, alerte en cas d’échec, et test de restauration mensuel obligatoire.
Prérequis
- Vaultwarden de production en SQLite (par défaut) ou PostgreSQL.
- Accès SSH root au VPS hébergeant Vaultwarden.
- Un bucket MinIO ou Backblaze B2 configuré avec une clé d’accès et une clé secrète.
- Une clé GPG ou une passphrase forte pour chiffrer les sauvegardes.
- Niveau attendu : intermédiaire (cron, bash, GPG).
- Temps estimé : 1 heure pour la mise en place, 30 minutes pour le test de restauration mensuel.
Étape 1 — Choisir entre MinIO et Backblaze B2
Deux options solides en 2026.
MinIO auto-hébergé sur un second VPS Hetzner Storage Box (3,20 €/mois pour 1 To) : contrôle total, pas de dépendance externe, idéal pour une stratégie de souveraineté. Inconvénient : c’est un service de plus à maintenir, et il faut sauvegarder MinIO lui-même.
Backblaze B2 en mode S3-compatible : 6 USD par téraoctet stocké et égress gratuit via le partenariat Cloudflare Bandwidth Alliance. Pour une équipe de 30 personnes générant 5 Mo de coffre par utilisateur, vous stockez moins de 1 Go, soit moins de 0,01 USD par mois. Inconvénient mineur : Backblaze est un acteur américain, mais les coffres étant chiffrés AES-256, leur contenu reste illisible même en cas de réquisition légale.
Recommandation : les deux en parallèle. MinIO chez OVH pour la sauvegarde primaire, Backblaze B2 pour la sauvegarde secondaire offsite.
Étape 2 — Préparer le bucket et les credentials
Sur Backblaze B2 :
- Créer un bucket privé nommé
vaultwarden-backup-prod. - Activer le versioning (rétention 30 jours).
- Générer une clé d’application avec accès uniquement à ce bucket, en lecture/écriture.
- Noter
keyID,applicationKey,endpoint(par exemples3.eu-central-003.backblazeb2.com).
Stockez ces credentials dans Vaultwarden lui-même, dans la collection « Infrastructure ». C’est l’un des rares cas où c’est sain : si vous perdez Vaultwarden, vous restaurez depuis la sauvegarde, dont la clé d’accès est dans… la sauvegarde. Sortez donc une copie hors-ligne dans un coffre physique.
Étape 3 — Installer rclone et restic
Deux outils complémentaires :
- rclone pour la copie simple chiffrée vers S3.
- restic pour les sauvegardes incrémentales avec déduplication et chiffrement intégré.
Installation sur Debian/Ubuntu :
curl https://rclone.org/install.sh | sudo bash
apt install -y restic
Étape 4 — Configurer rclone pour Backblaze B2
rclone config
# n (nouveau remote)
# nom : b2-vaultwarden
# type : 5 (S3 compatible)
# provider : Other
# access_key_id : votre keyID
# secret_access_key : votre applicationKey
# region : eu-central-003
# endpoint : s3.eu-central-003.backblazeb2.com
# acl : private
Test : rclone ls b2-vaultwarden:vaultwarden-backup-prod doit retourner sans erreur (et liste vide si bucket neuf).
Étape 5 — Configurer restic
export RESTIC_REPOSITORY="s3:s3.eu-central-003.backblazeb2.com/vaultwarden-backup-prod"
export AWS_ACCESS_KEY_ID="votre-keyID"
export AWS_SECRET_ACCESS_KEY="votre-applicationKey"
export RESTIC_PASSWORD="passphrase-très-très-forte-et-unique"
restic init
La passphrase RESTIC_PASSWORD est la clé qui protège vos sauvegardes. Si vous la perdez, vos sauvegardes sont irrécupérables. Stockez-la dans 3 endroits indépendants : Vaultwarden (collection Infrastructure), papier en coffre physique, et une YubiKey de l’administrateur principal.
Étape 6 — Écrire le script de sauvegarde
Créez /srv/scripts/vw-backup.sh :
#!/bin/bash
set -euo pipefail
VW_DATA="/var/lib/coolify/services/vaultwarden-prod/data"
TMP_DIR="/tmp/vw-backup-$$"
LOG="/var/log/vw-backup.log"
trap "rm -rf \$TMP_DIR" EXIT
mkdir -p "\$TMP_DIR"
cd "\$TMP_DIR"
# 1. Snapshot SQLite chaud (verrou court)
docker exec vaultwarden-prod sqlite3 /data/db.sqlite3 \
".backup '/data/db-snapshot.sqlite3'"
cp "\$VW_DATA/db-snapshot.sqlite3" db.sqlite3
# 2. Copier attachements et icônes
cp -r "\$VW_DATA/attachments" attachments 2>/dev/null || true
cp -r "\$VW_DATA/sends" sends 2>/dev/null || true
cp -r "\$VW_DATA/icon_cache" icon_cache 2>/dev/null || true
# 3. Métadonnées
docker exec vaultwarden-prod /vaultwarden --version > vw-version.txt
date -Iseconds > backup-date.txt
# 4. Restic (chiffrement + déduplication)
export RESTIC_REPOSITORY="s3:s3.eu-central-003.backblazeb2.com/vaultwarden-backup-prod"
export AWS_ACCESS_KEY_ID="votre-keyID"
export AWS_SECRET_ACCESS_KEY="votre-applicationKey"
export RESTIC_PASSWORD_FILE="/root/.restic-password"
restic backup . --tag "vw-prod-$(date +%Y-%m-%d-%H%M)" >> "\$LOG" 2>&1
# 5. Forget : conserver 7 derniers jours quotidiens, 4 hebdo, 12 mensuels
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --prune >> "\$LOG" 2>&1
# 6. Notification de succès
curl -s -X POST "https://ntfy.sh/votre-topic-prive" \
-H "Title: Vaultwarden backup OK" \
-d "Backup terminé $(date -Iseconds)"
Rendez exécutable : chmod +x /srv/scripts/vw-backup.sh. Stockez le mot de passe restic dans /root/.restic-password en mode 600.
Étape 7 — Planifier avec cron
Sauvegarde toutes les 6 heures :
crontab -e
0 */6 * * * /srv/scripts/vw-backup.sh >> /var/log/vw-backup.log 2>&1
Pour une équipe sensible (cabinet juridique, fintech), passez à toutes les 2 heures. Le surcoût en stockage est négligeable grâce à la déduplication restic.
Étape 8 — Test de restauration mensuel
Le test de restauration n’est pas optionnel. Sans test, vous ne savez pas si vos sauvegardes fonctionnent. Procédure mensuelle, sur un VPS staging dédié :
# Lister les snapshots
restic snapshots
# Restaurer le dernier dans /tmp/restore
restic restore latest --target /tmp/restore
# Vérifier l'intégrité de la base
sqlite3 /tmp/restore/db.sqlite3 "PRAGMA integrity_check;"
# Doit retourner "ok"
# Compter les entrées
sqlite3 /tmp/restore/db.sqlite3 "SELECT COUNT(*) FROM ciphers;"
# Doit correspondre à votre Vaultwarden de prod ± quelques entrées
Notez la date du dernier test dans votre wiki interne. Si plus de 45 jours sans test, c’est une alerte rouge.
Erreurs fréquentes
| Erreur | Cause | Solution |
|---|---|---|
Sauvegarde corrompue après cp direct |
SQLite est en cours d’écriture | Toujours passer par sqlite3 .backup jamais cp |
| Bucket plein | Forget non lancé | Vérifier que restic forget --prune est exécuté |
| Restic password perdu | Stockage unique dans Vaultwarden | Stocker en 3 endroits indépendants dont un offline |
| Sauvegardes lentes | Bande passante saturée | Activer --limit-upload 5M et planifier la nuit |
| Pas d’alerte en cas d’échec | Cron silencieux | Wrapper le script avec ntfy.sh ou healthchecks.io |
| Attachements absents | Volume non monté correctement | Vérifier docker inspect du container |
| Restauration échoue | Version Vaultwarden différente | Restaurer sur la même version, puis migrer |
Adaptation au contexte ouest-africain
Trois éléments concrets pour une PME africaine. Choix du datacenter : Backblaze B2 EU Central (Amsterdam) offre une latence sous 90 ms vers Dakar, Abidjan et Casablanca. La région US-West-001 ajoute 200 ms ; à éviter pour les uploads automatisés. Coût en monnaie locale : 1 Go stocké = 0,006 USD soit moins de 4 FCFA par mois. Une équipe de 50 personnes avec 10 Go cumulés paie 0,06 USD par mois pour ses sauvegardes complètes, soit l’équivalent d’un sachet de cacahuètes à Kayes ou un café à Ouagadougou. Bande passante limitée : Backblaze offre l’égress gratuit via Cloudflare en plus de l’ingress. Les sauvegardes nocturnes ne mangent donc rien sur votre forfait Hetzner ; les restaurations non plus.
Articles connexes
- Déployer Vaultwarden sur Coolify avec HTTPS — le pré-requis : avoir un Vaultwarden à sauvegarder.
- Vaultwarden + Authelia : SSO unifié pour PME — sauvegarder Authelia aussi (mêmes principes appliqués à
/srv/authelia).
FAQ
Pourquoi pas borgbackup à la place de restic ? Borg n’a pas de support S3 natif. Il faut un container intermédiaire (rclone-mount). Restic parle directement S3 et Backblaze. À fonctionnalités équivalentes, restic est plus simple pour ce cas.
Combien de temps prend une restauration complète ? Pour 50 utilisateurs et 5 000 entrées, 30 secondes via Backblaze EU. Pour une organisation de 500 utilisateurs avec attachements (50 Go), comptez 10 à 20 minutes.
Faut-il sauvegarder le fichier config.json ? Oui. Il contient les flags d’admin et configuration spécifique. Inclus dans le snapshot du dossier /data.
Comment vérifier qu’une sauvegarde n’a pas été altérée ? Restic vérifie automatiquement l’intégrité via SHA-256 à chaque restauration. Pour un audit explicite : restic check --read-data-subset=10% mensuellement.
Quelle stratégie 3-2-1 appliquer ? 3 copies (production + MinIO + Backblaze), 2 supports différents (NVMe local + S3), 1 hors-site (Backblaze). C’est la règle d’or pour Vaultwarden.
Pour aller plus loin
- 🔝 Retour au guide général : Guide complet Vaultwarden 2026
- Documentation Restic : restic.readthedocs.io
- Documentation Backblaze B2 : backblaze.com/b2/docs