bashscripts/backups/backup_nextcloud.sh
2026-03-07 00:16:30 +01:00

116 lines
8.2 KiB
Bash

#!/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 <<EOF
- **nextcloud.log
- **nextcloud.log*
- **updater.log
EOF
# --- BACKUP BASE DE DADES ---
mysqldump --single-transaction --verbose -h $DB_HOST -u $DB_USER -p$DB_PASS $DB_NAME > $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"