README — Mise en place du script de sauvegarde Vaultwarden
Ce script permet d’automatiser la sauvegarde de Vaultwarden afin de conserver une copie du dossier data, de la transférer vers un serveur distant et d’envoyer une notification Discord en cas de succès ou d’échec.
1. Objectif du script
Le script de sauvegarde Vaultwarden permet de :
- sauvegarder les données de Vaultwarden ;
- compresser l’archive avec un nom daté ;
- transférer la sauvegarde vers un serveur distant ;
- envoyer une notification Discord ;
- automatiser l’exécution via
cron.
Ce mécanisme permet de sécuriser les mots de passe, les utilisateurs et la configuration stockés dans le dossier data de Vaultwarden.
2. Pré-requis
Avant de mettre en place le script, vérifier que les éléments suivants sont disponibles sur la machine Vaultwarden :
bashtarscpsshcurlcron
Installation sur Debian / Ubuntu :
sudo apt update
sudo apt install -y tar openssh-client curl cron
3. Emplacement du script
Le script est situé dans :
/home/matt/vaultwarden/Malio-ops/BackupVaultWarden/
Structure recommandée :
/home/matt/vaultwarden/Malio-ops/BackupVaultWarden/
├── backup-vaultwarden.sh
├── .env
└── README.md
4. Configuration sécurisée avec le fichier .env
Les informations sensibles ne doivent pas être stockées directement dans le script.
Elles doivent être placées dans un fichier .env.
Exemple de fichier .env
WEBHOOK_URL=https://discord.com/api/webhooks/...
REMOTE_USER=<USER>
REMOTE_HOST=<IP_SERVEUR>
SSH_KEY=/home/matt/.ssh/id_ed25519_vaultwarden_backup
DATA_DIR=/opt/vaultwarden/data
REMOTE_DIR=/home/backup/backups/vaultwarden
Description des variables
| Variable | Description |
|---|---|
| WEBHOOK_URL | Webhook Discord pour les notifications |
| REMOTE_USER | Utilisateur du serveur distant |
| REMOTE_HOST | Adresse IP ou DNS du serveur de sauvegarde |
| SSH_KEY | Chemin vers la clé SSH utilisée pour le transfert |
| DATA_DIR | Dossier data de Vaultwarden |
| REMOTE_DIR | Dossier de stockage des backups sur le serveur distant |
5. Chargement des variables dans le script
Le script charge directement le fichier .env avec source et exporte automatiquement les variables pendant le chargement.
Mécanisme utilisé :
set -a
source "$ENV_FILE"
set +a
Explication :
set -aexporte automatiquement les variables définies ensuitesource "$ENV_FILE"lit et exécute le contenu du fichier.envdans le shell courantset +adésactive ensuite l'export automatique
Cela permet :
- de charger toutes les variables du fichier
.enven une seule fois - de conserver la configuration en dehors du script
- de rester aligné avec le comportement réel du script
6. Connexion au serveur de sauvegarde (Machine IA)
Le transfert des sauvegardes utilise une clé SSH afin de permettre une connexion automatique au serveur distant sans mot de passe.
1. Génération de la clé
Sur la machine exécutant les scripts :
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_bitwarden
2. Copie de la clé vers le serveur distant
ssh-copy-id -i ~/.ssh/id_ed25519_bitwarden.pub <USER>@<IP_SERVEUR>
Cette commande ajoute la clé dans :
~/.ssh/authorized_keys
sur la machine IA.
3. Vérification de la connexion
ssh -i ~/.ssh/id_ed25519_bitwarden backup@192.168.0.179
4. Vérification des fichiers de clé
ls ~/.ssh/id_ed25519_bitwarden*
Fichiers attendus :
~/.ssh/id_ed25519_bitwarden
~/.ssh/id_ed25519_bitwarden.pub
5. Permissions SSH
Machine locale :
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519_bitwarden
chmod 644 ~/.ssh/id_ed25519_bitwarden.pub
Machine distante :
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
6. Déclaration dans .env
SSH_KEY=/home/matt/.ssh/id_ed25519_bitwarden
Cette clé sera utilisée automatiquement par les scripts (scp / ssh) pour transférer les sauvegardes.
7. Sauvegarde des données Vaultwarden
Le script crée une archive compressée du dossier data :
tar -czf "$LOCAL_BACKUP" -C "$(dirname "$DATA_DIR")" "$(basename "$DATA_DIR")"
Cela permet d’obtenir une sauvegarde portable et compressée.
8. Transfert vers le serveur distant
Une fois l’archive créée :
scp "${SSH_OPTS[@]}" "$LOCAL_BACKUP" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/"
Le fichier est envoyé vers le serveur de sauvegarde via SCP.
9. Notification Discord
Le script envoie une notification Discord pour informer de l’état de la sauvegarde.
Construction du message :
local msg="**@here Backup Vaultwarden $color**\n"
msg+="Backup: ${BACKUP_NAME}\n"
msg+="Data transfer: $dumps_display\n"
[[ -n "$details" ]] && msg+="Details: $details"
Envoi du message :
curl -fsS -H "Content-Type: application/json" \
-d "{\"content\":\"$msg\"}" \
"$WEBHOOK_URL"
Le message indique :
- si la sauvegarde a réussi
- si elle a échoué
- le nom du backup
- les détails de l’erreur
10. Planification avec cron
Le script est exécuté automatiquement tous les jours à 19h.
Ouvrir le crontab :
crontab -e
Ajouter :
0 19 * * * /home/matt/vaultwarden/Malio-ops/BackupVaultWarden/backup-vaultwarden.sh >> /var/log/vaultwarden_backup.log 2>&1
Signification :
| Champ | Valeur |
|---|---|
| minute | 0 |
| heure | 19 |
| jour du mois | * |
| mois | * |
| jour semaine | * |
Le script s’exécute donc tous les jours à 19h00.
11. Nettoyage
Une fois la sauvegarde transférée :
rm -f "$LOCAL_BACKUP"
Cela évite de remplir le disque de la machine Vaultwarden.
12. Test manuel
Avant de mettre le script en cron, tester :
bash /home/matt/vaultwarden/Malio-ops/BackupVaultWarden/backup-vaultwarden.sh
13. Vérification des logs
Logs :
cat /var/log/vaultwarden_backup.log
14. Résumé
Le script automatise :
- la sauvegarde du dossier
data - la compression et la datation du backup
- le transfert sécurisé via SSH
- la notification Discord
- l’exécution automatique via cron
- la configuration sécurisée via
.env
Ce système permet d’obtenir une sauvegarde fiable, centralisée et surveillée de Vaultwarden.