From ec8aeb70483b0fdaee39515a20c0ec27f65d3abc Mon Sep 17 00:00:00 2001 From: "sebastien.roy" Date: Thu, 5 Mar 2026 15:31:00 +0100 Subject: [PATCH] cron + modif script + webhook --- backup-vaultwarden.sh | 25 -------- backup_vaultwarden/.env | 8 +++ backup_vaultwarden/.env.exemple | 6 ++ backup_vaultwarden/backup-vaultwarden.sh | 82 ++++++++++++++++++++++++ backup_vaultwarden/backup.log | 5 ++ 5 files changed, 101 insertions(+), 25 deletions(-) delete mode 100755 backup-vaultwarden.sh create mode 100644 backup_vaultwarden/.env create mode 100644 backup_vaultwarden/.env.exemple create mode 100755 backup_vaultwarden/backup-vaultwarden.sh create mode 100644 backup_vaultwarden/backup.log diff --git a/backup-vaultwarden.sh b/backup-vaultwarden.sh deleted file mode 100755 index 668fe69..0000000 --- a/backup-vaultwarden.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -DATE=$(date +%F) -BACKUP_NAME="vaultwarden-backup-$DATE.tar.gz" - -# dossier source à sauvegarder -DATA_DIR="/home/matt/vaultwarden/data" - -# chemin pour le fichier backup local temporaire -LOCAL_BACKUP="/home/matt/vaultwarden/$BACKUP_NAME" - -# serveur de backup -REMOTE_USER="malio-b" -REMOTE_HOST="chat.malio-dev.fr" -REMOTE_DIR="/home/malio-b/backups/bitwarden" - -# --- Compression du dossier data --- -tar -czf "$LOCAL_BACKUP" -C "$(dirname $DATA_DIR)" "$(basename $DATA_DIR)" - -# --- Envoi vers le serveur de backup --- -scp "$LOCAL_BACKUP" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR" - -# --- Nettoyage du backup local --- -rm -f "$LOCAL_BACKUP" - diff --git a/backup_vaultwarden/.env b/backup_vaultwarden/.env new file mode 100644 index 0000000..658d115 --- /dev/null +++ b/backup_vaultwarden/.env @@ -0,0 +1,8 @@ +WEBHOOK_URL="https://discord.com/api/webhooks/1478503102888935506/YCtJM09QZiKNMiCe5u7vCQb52VcLjHAd9wwEsKNltlJVcy7sKvoMTOJkvEKOOrk-Wpkh" +REMOTE_USER="malio-b" +REMOTE_HOST="chat.malio-dev.fr" +REMOTE_DIR="/home/malio-b/backups/bitwarden" +SSH_KEY="/home/matt/.ssh/id_ed25519_bitwarden" +SSH_OPTS=(-i "$SSH_KEY" -o IdentitiesOnly=yes -o BatchMode=yes -o ConnectTimeout=10) +DATA_DIR="/home/matt/vaultwarden/data" +LOCAL_BACKUP="/home/matt/vaultwarden/$BACKUP_NAME" diff --git a/backup_vaultwarden/.env.exemple b/backup_vaultwarden/.env.exemple new file mode 100644 index 0000000..8a1e463 --- /dev/null +++ b/backup_vaultwarden/.env.exemple @@ -0,0 +1,6 @@ +DATA_DIR= +LOCAL_BACKUP= +REMOTE_USER= +REMOTE_HOST= +REMOTE_DIR= +SSH_KEY= diff --git a/backup_vaultwarden/backup-vaultwarden.sh b/backup_vaultwarden/backup-vaultwarden.sh new file mode 100755 index 0000000..3382a22 --- /dev/null +++ b/backup_vaultwarden/backup-vaultwarden.sh @@ -0,0 +1,82 @@ +#!/bin/bash + +####################################### +# Config Discord Webhook +####################################### +DISCORD_WEBHOOK_URL=$(grep -E '^WEBHOOK_URL=' .env | cut -d '=' -f2-) + +discord_ping() { + local success="$1" + local details="$2" + + [[ -z "$DISCORD_WEBHOOK_URL" ]] && return 0 + + local color dumps_display + dumps_display=$([[ "$success" == "true" ]] && echo "✅" || echo "❌") + color=$([[ "$success" == "true" ]] && echo "🟢" || echo "🔴") + + local msg="**@here Backup Vaultwarden $color**\n" + msg+="Backup: ${BACKUP_NAME}\n" + msg+="Data transfer: $dumps_display\n" + [[ -n "$details" ]] && msg+="Details: $details" + + curl -fsS -H "Content-Type: application/json" \ + -d "{\"content\":\"$msg\"}" \ + "$DISCORD_WEBHOOK_URL" >/dev/null || true +} + +####################################### +# Variables backup +####################################### +DATE=$(date +%F) +BACKUP_NAME="vaultwarden-backup-$DATE.tar.gz" + +DATA_DIR=$(grep -E '^DATA_DIR=' .env | cut -d '=' -f2-) +LOCAL_BACKUP=$(grep -E '^LOCAL_BACKUP=' .env | cut -d '=' -f2-) + +REMOTE_USER=$(grep -E '^REMOTE_USER=' .env | cut -d '=' -f2-) +REMOTE_HOST=$(grep -E '^REMOTE_HOST=' .env | cut -d '=' -f2-) +REMOTE_DIR=$(grep -E '^REMOTE_DIR=' .env | cut -d '=' -f2-) + +SSH_KEY=$(grep -E '^SSH_KEY=' .env | cut -d '=' -f2-) +SSH_OPTS=SSH_OPTS=(-i "$SSH_KEY" -o IdentitiesOnly=yes -o BatchMode=yes -o ConnectTimeout=10) + +LOG_FILE="/var/log/vaultwarden_backup.log" +mkdir -p "$(dirname "$LOG_FILE")" + +####################################### +# Fonction pour gérer les erreurs +####################################### +fail() { + local detail="$1" + echo "ERROR: $detail" >&2 + discord_ping "false" "$detail" + exit 1 +} + +####################################### +# Création du backup +####################################### +tar -czf "$LOCAL_BACKUP" -C "$(dirname "$DATA_DIR")" "$(basename "$DATA_DIR")" || fail "Erreur lors de la compression du dossier $DATA_DIR" + +####################################### +# Création dossier distant si nécessaire +####################################### +ssh "${SSH_OPTS[@]}" "$REMOTE_USER@$REMOTE_HOST" "mkdir -p $REMOTE_DIR" || fail "Impossible de créer le dossier distant $REMOTE_DIR" + +####################################### +# Envoi du backup +####################################### +scp "${SSH_OPTS[@]}" "$LOCAL_BACKUP" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/" || fail "Erreur lors de l'envoi du backup vers $REMOTE_HOST" + +####################################### +# Nettoyage local +####################################### +rm -f "$LOCAL_BACKUP" + +####################################### +# Notification Discord +####################################### +discord_ping "true" "Backup envoyé avec succès vers $REMOTE_HOST" + +echo "Backup $BACKUP_NAME terminé et envoyé sur $REMOTE_HOST:$REMOTE_DIR" diff --git a/backup_vaultwarden/backup.log b/backup_vaultwarden/backup.log new file mode 100644 index 0000000..f7bb504 --- /dev/null +++ b/backup_vaultwarden/backup.log @@ -0,0 +1,5 @@ +Permission denied, please try again. +Permission denied, please try again. +malio-b@chat.malio-dev.fr: Permission denied (publickey,password). +scp: Connection closed +Backup vaultwarden-backup-2026-03-05.tar.gz envoyé sur chat.malio-dev.fr:/home/malio-b/backups/bitwarden