#!/bin/bash ######################################################### # # # Script Backup Nextcloud + còpia remota + retenció # # dies + email + mida + temps + integritat # # # ######################################################### PATH=$PATH:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin # --- CONFIGURACIÓ EMAIL --- EMAIL="roger@estudiset.cat" # backup db variables readonly BACKUP_DB_FILE="nextcloud-sqlbkp-$(date +%Y-%m-%d_%H-%M-%S).sql" readonly DB_HOST="localhost" readonly DB_USER="nextcloud" readonly DB_PASS="3mZlNTeS" readonly DB_NAME="nextcloud" # backup data variables readonly NEXTCLOUD_DATA="/opt/nextcloud/data" readonly NEXTCLOUD_DIR="/var/www/html/nextcloud" readonly INCLUDE_LIST="include-list" # remote settings readonly REMOTE_SERVER="estudiset.backups" readonly REMOTE_PATH="/home/debian/backups/studi7/nextcloud" readonly REMOTE_NC_DATA_FOLDER="files" readonly REMOTE_NC_DB_FOLDER="db" readonly REMOTE_NC_DIR_FOLDER="dir" readonly BACKUP_PRESERVE_DAYS=7 # init notification message MESSAGE="Backup Nextcloud iniciat: $(date +"%d/%m/%Y %H:%M:%S")\n\n" # create include list file cat > $INCLUDE_LIST < $BACKUP_DB_FILE if [ $? -ne 0 ]; then echo -e "ERROR: Fallada al mysqldump\n" | mail -s "[Backup Nextcloud] ERROR" "$EMAIL" exit 1 fi gzip "$BACKUP_DB_FILE" # --- HASH LOCAL --- LOCAL_HASH=$(sha256sum "$BACKUP_DB_FILE.gz" | awk '{print $1}') # --- ENVIAR A SERVIDOR REMOT --- rsync -AaxzPh --remove-source-files "$BACKUP_DB_FILE.gz" "$REMOTE_SERVER:$REMOTE_PATH/$REMOTE_NC_DB_FOLDER" if [ $? -ne 0 ]; then echo -e "ERROR: Fallada enviant el backup SQL al servidor remot\n" | mail -s "[Backup Nextcloud] ERROR" "$EMAIL" exit 1 fi # --- HASH REMOT --- REMOTE_HASH=$(ssh "$REMOTE_SERVER" "sha256sum '$REMOTE_PATH/$REMOTE_NC_DB_FOLDER/$BACKUP_DB_FILE.gz' 2>/dev/null | awk '{print \$1}'") # --- COMPARACIÓ --- if [ "$LOCAL_HASH" = "$REMOTE_HASH" ]; then DB_INTEGRITY="OK — hash coincident" else DB_INTEGRITY="ERROR — hash NO coincideix!" fi MESSAGE+="Backup BD OK\n" MESSAGE+="Integritat BD:\n" MESSAGE+=" - Hash local: $LOCAL_HASH\n" MESSAGE+=" - Hash remot: $REMOTE_HASH\n" MESSAGE+=" - Estat: $DB_INTEGRITY\n\n" # --- NETEJA BACKUPS BD ANTICS --- ssh $REMOTE_SERVER "find '$REMOTE_PATH/$REMOTE_NC_DB_FOLDER' -maxdepth 1 -mtime +$BACKUP_PRESERVE_DAYS -delete" # --- BACKUP DIRECTORI NEXTCLOUD --- rdiff-backup backup "$NEXTCLOUD_DIR" "$REMOTE_SERVER::$REMOTE_PATH/$REMOTE_NC_DIR_FOLDER" if [ $? -ne 0 ]; then echo -e "ERROR: Fallada rdiff-backup del directori Nextcloud\n" | mail -s "[Backup Nextcloud] ERROR" "$EMAIL" exit 1 fi rdiff-backup remove increments --force --older-than "${BACKUP_PRESERVE_DAYS}D" "$REMOTE_SERVER::$REMOTE_PATH/$REMOTE_NC_DIR_FOLDER" MESSAGE+="Backup directori Nextcloud OK\n" # --- BACKUP DADES NEXTCLOUD --- OUT=$(rdiff-backup backup --print-statistics --include-globbing-filelist $INCLUDE_LIST \ "$NEXTCLOUD_DATA" "$REMOTE_SERVER::$REMOTE_PATH/$REMOTE_NC_DATA_FOLDER") if [ $? -ne 0 ]; then echo -e "ERROR: Fallada rdiff-backup de dades Nextcloud\n" | mail -s "[Backup Nextcloud] ERROR" "$EMAIL" exit 1 fi MESSAGE+="\nEstadístiques rdiff-backup dades:\n$OUT\n" rdiff-backup remove increments --force --older-than "${BACKUP_PRESERVE_DAYS}D" \ "$REMOTE_SERVER::$REMOTE_PATH/$REMOTE_NC_DATA_FOLDER" MESSAGE+="\nBackup finalitzat: $(date +"%d/%m/%Y %H:%M:%S")\n" rm $INCLUDE_LIST # --- ENVIAR EMAIL --- echo -e "$MESSAGE" | mail -s "[Backup Nextcloud] OK" "$EMAIL" echo -e "$MESSAGE"