117 lines
3.2 KiB
Markdown
117 lines
3.2 KiB
Markdown
# FONCTIONNEMENT DU SCRIPT VAULTWARDEN
|
||
Le script de backup de vaultwarden permet une sauvegarde périodique des mots de passe et utilisateurs de celui-ci.
|
||
|
||
## INITIALISATION DES VARIABLES DE MANIÈRE SÉCURISÉ
|
||
|
||
1. Les informations sensibles ne sont pas stockées directement dans le script. Elles sont placées dans un fichier .env
|
||
|
||
```bash
|
||
WEBHOOK_URL=...
|
||
REMOTE_USER=...
|
||
REMOTE_HOST=...
|
||
SSH_KEY=...
|
||
DATA_DIR=...
|
||
```
|
||
|
||
2. on récupère les variables dans le script
|
||
```bash
|
||
REMOTE_USER=$(grep -E '^REMOTE_USER=' .env | cut -d '=' -f2-)
|
||
```
|
||
|
||
Explication:
|
||
|
||
- grep recherche la variable dans le fichier .env
|
||
- cut récupère uniquement la valeur après =
|
||
- REMOTE_USER="user" Le script récupère >> "user"
|
||
|
||
Cela permet:
|
||
|
||
- d’améliorer la sécurité
|
||
- d’éviter de modifier le script si un paramètre change
|
||
|
||
## RÉCUPÉRATION DES DONNÉES
|
||
|
||
1. Le dossier data de Vaultwarden est dupliqué puis compressé afin de créer une archive :
|
||
```bash
|
||
tar -czf "$LOCAL_BACKUP" -C "$(dirname "$DATA_DIR")" "$(basename "$DATA_DIR")"
|
||
```
|
||
|
||
2. Transfer vers le serveur de backup
|
||
```bash
|
||
scp "${SSH_OPTS[@]}" "$LOCAL_BACKUP" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/"
|
||
```
|
||
La sauvegarde est envoyée vers une machine dédiée grâce à SCP. Pour éviter de saisir un mot de passe à chaque fois, une clé SSH est utilisée.
|
||
|
||
Cette clé SSH est générée sur la machine de backup et autorisée sur la machine Vaultwarden.
|
||
|
||
## NOTIFICATION DISCORD
|
||
|
||
Le script envoie une notification sur un salon Discord pour informer de l’état de la sauvegarde. Cela se fait grâce à un webhook Discord.
|
||
|
||
1. on défini le message
|
||
```bash
|
||
local msg="**@here Backup Vaultwarden $color**\n"
|
||
msg+="Backup: ${BACKUP_NAME}\n"
|
||
msg+="Data transfer: $dumps_display\n"
|
||
[[ -n "$details" ]] && msg+="Details: $details"
|
||
```
|
||
|
||
2. on envoie le message sur discord avec le message et le webhook
|
||
```bash
|
||
curl -fsS -H "Content-Type: application/json" \
|
||
-d "{\"content\":\"$msg\"}" \
|
||
"$DISCORD_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 si nécessaire
|
||
|
||
## PLANIFICATION AVEC CRON
|
||
|
||
Le script est exécuté automatiquement chaque jour grâce à cron.
|
||
|
||
1. Ouvrez le crontab pour l'édition :
|
||
```bash
|
||
crontab -e
|
||
```
|
||
2. Ajoutez la ligne suivante pour exécuter le script tous les jours à 19h :
|
||
```bash
|
||
0 19 * * * /chemin/vers/le/script/check_storage.sh
|
||
```
|
||
|
||
Signification:
|
||
|
||
- 0 minute 0
|
||
- 19 19h
|
||
- * tous les jours du mois
|
||
- * tous les mois
|
||
- * tous les jours de la semaine
|
||
|
||
Tous les jours à 19h, le script est exécuté et les logs sont enregistrés dans backup.log ce qui permet d’analyser les erreurs si un problème survient.
|
||
|
||
## NETTOYAGE
|
||
|
||
Une fois la sauvegarde envoyée sur la machine distante, le fichier temporaire est supprimé :
|
||
|
||
```bash
|
||
rm -f "$LOCAL_BACKUP"
|
||
```
|
||
|
||
Cela permet de garder le serveur propre et éviter de remplir le disque.
|
||
|
||
## RÉSUMÉ
|
||
|
||
Le script automatise complètement les sauvegardes Vaultwarden :
|
||
|
||
- sauvegarde du dossier data
|
||
- compression et datation
|
||
- transfert sécurisé via SSH
|
||
- notification Discord
|
||
- exécution automatique avec cron
|
||
- sécurisation des paramètres via .env
|
||
|
||
Cela permet d’avoir une sauvegarde quotidienne fiable et surveillée.
|