#!/bin/bash ### AUTO-UPDATER ### # Variables SERVER_FILE="https://git.ivanch.me/ivanch/server-scripts/raw/branch/main/backup.sh" SERVER_OK=1 HOSTNAME=$(cat /etc/hostname) # Check if the server file exists curl -s --head $SERVER_FILE | head -n 1 | grep -E "HTTP/[12] [23].." > /dev/null if [ $? -ne 0 ]; then NOTIFY_URL="http://notify.haven" # Function to send notification send_notify() { local title="$1" local message="$2" curl -s -X POST "$NOTIFY_URL" \ -H "Content-Type: application/json" \ -d "{\"title\": \"$title\", \"message\": \"$message\"}" } echo "Error: $SERVER_FILE not found." >&2 send_notify "[Docker Backup][$HOSTNAME] Error" "❌ Server file not found: $SERVER_FILE" SERVER_OK=0 fi if [ $SERVER_OK -eq 1 ]; then echo "Running auto-update..." # Compare the local and server files sha256sum to check if an update is needed LOCAL_SHA256=$(sha256sum backup.sh | awk '{print $1}') SERVER_SHA256=$(curl -s $SERVER_FILE | sha256sum | awk '{print $1}') if [ "$LOCAL_SHA256" != "$SERVER_SHA256" ]; then echo "Updating backup.sh..." curl -s -o backup.sh $SERVER_FILE echo "backup.sh updated." chmod +x backup.sh echo "Permissions set up." echo "Running updated backup.sh..." ./backup.sh exit 0 else echo "backup.sh is up to date.." fi fi #################### # Variables SOURCE_DIR="/root/docker" BACKUP_FILE="/tmp/docker_backup_$(date +%Y%m%d%H%M%S).tar.gz" REMOTE_USER="ivanch" REMOTE_HOST="nas.haven" REMOTE_DIR="/export/Backup/Docker/$(cat /etc/hostname)" # Create a compressed backup file zip -r $BACKUP_FILE $SOURCE_DIR # Create a compressed backup file if ! zip -r $BACKUP_FILE $SOURCE_DIR; then send_notify "Backup Error" "❌ Failed to create backup archive for: $SOURCE_DIR" exit 1 fi # Check if remote path exists if ! ssh $REMOTE_USER@$REMOTE_HOST "mkdir -p $REMOTE_DIR"; then send_notify "[Docker Backup][$HOSTNAME] Error" "❌ Failed to create remote directory: $REMOTE_DIR on $REMOTE_HOST" exit 1 fi # Transfer the backup file to the remote server if ! scp $BACKUP_FILE $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR; then send_notify "[Docker Backup][$HOSTNAME] Error" "❌ Failed to transfer backup file to remote server: $REMOTE_HOST:$REMOTE_DIR" exit 1 fi # Remove the backup file rm $BACKUP_FILE # Erase last 7 days backups from remote server if ! ssh $REMOTE_USER@$REMOTE_HOST "find $REMOTE_DIR -type f -name 'docker_backup_*' -mtime +7 -exec rm {} \;"; then send_notify "[Docker Backup][$HOSTNAME] Warning" "⚠️ Failed to clean old backups on remote server: $REMOTE_HOST:$REMOTE_DIR" fi # Success notification send_notify "[Docker Backup][$HOSTNAME] Success" "✅ Backup completed successfully for: $SOURCE_DIR to $REMOTE_HOST:$REMOTE_DIR" echo "Backup completed successfully" exit 0