116 lines
8.2 KiB
Bash
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"
|