83 lines
2.8 KiB
Bash
Executable File
83 lines
2.8 KiB
Bash
Executable File
#!/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"
|