ITSkillsCenter
Cybersécurité

Backups automatiques Vaultwarden vers MinIO et S3 : guide complet 2026

7 min de lecture

📍 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 :

  1. Créer un bucket privé nommé vaultwarden-backup-prod.
  2. Activer le versioning (rétention 30 jours).
  3. Générer une clé d’application avec accès uniquement à ce bucket, en lecture/écriture.
  4. Noter keyID, applicationKey, endpoint (par exemple s3.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

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

Besoin d'un site web ?

Confiez-nous la Création de Votre Site Web

Site vitrine, e-commerce ou application web — nous transformons votre vision en réalité digitale. Accompagnement personnalisé de A à Z.

À partir de 250.000 FCFA
Parlons de Votre Projet
Publicité