diff --git a/BackupVaultWarden/backup-vaultwarden.sh b/BackupVaultWarden/backup-vaultwarden.sh index 5f92a05..21e8de5 100644 --- a/BackupVaultWarden/backup-vaultwarden.sh +++ b/BackupVaultWarden/backup-vaultwarden.sh @@ -45,9 +45,11 @@ set +a # Variables backup ####################################### DATE="$(date +'%Y-%m-%d_%H-%M-%S')" -BACKUP_NAME="vaultwarden-backup-${DATE}.tar.gz" +BACKUP_PREFIX="vaultwarden-backup" +BACKUP_NAME="${BACKUP_PREFIX}-${DATE}.tar.gz" LOCAL_BACKUP_DIR="$LOCAL_BACKUP" LOCAL_BACKUP_FILE="${LOCAL_BACKUP_DIR}/${BACKUP_NAME}" +RETENTION_DAYS=10 SSH_OPTS=(-i "$SSH_KEY" -o IdentitiesOnly=yes -o BatchMode=yes -o ConnectTimeout=10) @@ -110,6 +112,8 @@ log "Destination distante : ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}" tar -czf "$LOCAL_BACKUP_FILE" -C "$(dirname "$DATA_DIR")" "$(basename "$DATA_DIR")" \ || fail "Erreur lors de la compression du dossier $DATA_DIR" +log "Backup local créé : $LOCAL_BACKUP_FILE" + ####################################### # Création dossier distant ####################################### @@ -122,6 +126,17 @@ ssh "${SSH_OPTS[@]}" "$REMOTE_USER@$REMOTE_HOST" "mkdir -p '$REMOTE_DIR'" \ scp "${SSH_OPTS[@]}" "$LOCAL_BACKUP_FILE" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/" \ || fail "Erreur lors de l'envoi du backup vers $REMOTE_HOST" +log "Backup envoyé sur $REMOTE_HOST:$REMOTE_DIR" + +####################################### +# Rotation distante - suppression > 10 jours +####################################### +ssh "${SSH_OPTS[@]}" "$REMOTE_USER@$REMOTE_HOST" \ + "find '$REMOTE_DIR' -type f -name '${BACKUP_PREFIX}-*.tar.gz' -mtime +$RETENTION_DAYS -delete" \ + || fail "Erreur lors de la rotation distante des sauvegardes" + +log "Rotation distante OK" + ####################################### # Nettoyage local ####################################### diff --git a/RecetteScripts/backup-bdd-recette.sh b/RecetteScripts/backup-bdd-recette.sh index 7e31bd0..c242f05 100644 --- a/RecetteScripts/backup-bdd-recette.sh +++ b/RecetteScripts/backup-bdd-recette.sh @@ -16,7 +16,8 @@ set -euo pipefail # 5. exporte les rôles PostgreSQL ; # 6. dump chaque base au format personnalisé PostgreSQL ; # 7. transfère chaque fichier vers le serveur distant ; -# 8. envoie un bilan sur Discord : +# 8. applique une rotation distante sur 10 jours ; +# 9. envoie un bilan sur Discord : # - 1 message global si tout est OK ; # - en cas d’erreur partielle : # * USERS OK -> message simple ; @@ -67,6 +68,7 @@ read -r -a DBS_ARRAY <<< "$DBS" IA_SSH="${BACKUP_REMOTE_USER}@${BACKUP_REMOTE_HOST}" IA_BASE_DIR="${BACKUP_REMOTE_DIR}" +RETENTION_DAYS=10 SSH_OPTS=( -i "$SSH_KEY" @@ -299,6 +301,36 @@ done set -e +####################################### +# Rotation distante +####################################### + +log "Starting remote rotation: delete backups older than ${RETENTION_DAYS} days" + +set +e + +ssh "${SSH_OPTS[@]}" "$IA_SSH" "find '${REMOTE_DIR}/user' -type f -name 'user_*.dump' -mtime +${RETENTION_DAYS} -delete" +RET=$? + +if [[ $RET -ne 0 ]]; then + log "ERROR: remote rotation failed for users" +fi + +for DB in "${DBS_ARRAY[@]}"; do + ssh "${SSH_OPTS[@]}" "$IA_SSH" "find '${REMOTE_DIR}/${DB}' -type f -name '${DB}_*.dump' -mtime +${RETENTION_DAYS} -delete" + RET=$? + + if [[ $RET -ne 0 ]]; then + log "ERROR: remote rotation failed for ${DB}" + else + log "Remote rotation OK for ${DB}" + fi +done + +set -e + +log "Remote rotation finished" + ####################################### # Nettoyage local #######################################