From 5deec8533e3e0f3a09637e436a4fa07a55f25144 Mon Sep 17 00:00:00 2001 From: Derek Lugowski Date: Sun, 23 Aug 2026 07:59:59 +0000 Subject: [PATCH] Add backup script --- .gitignore | 2 ++ nextcloud_backup.sh | 59 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100755 nextcloud_backup.sh diff --git a/.gitignore b/.gitignore index afdaa6b..7d3966d 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ .discord +.database +*.swp diff --git a/nextcloud_backup.sh b/nextcloud_backup.sh new file mode 100755 index 0000000..e61c9b8 --- /dev/null +++ b/nextcloud_backup.sh @@ -0,0 +1,59 @@ +#!/bin/bash + +start=$(date +%s) + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +WEBHOOK_URL=$(cat "${SCRIPT_DIR}/.discord") +DATABASE_PASSWORD=$(cat "${SCRIPT_DIR}/.database") + +send_discord_message() { + local message="$1" + local content="`date +\"%Y/%m/%d-%H:%M:%S\"` - $message" + curl -H "Content-Type: application/json" -X POST -d "{\"content\": \"$content\"}" "$WEBHOOK_URL" +} + +#Enable maintenance mode +php8.3 /var/www/nextcloud/occ maintenance:mode --on +if [ $? -ne 0 ]; then + send_discord_message "Failed to enable maintenance mode." + exit 1 +fi + +#Backup nextcloud directory +echo "Backing up nextcloud directory" +rsync -Aax /var/www/nextcloud/ /mnt/backup/nextcloud/ +if [ $? -ne 0 ]; then + send_discord_message "Failed to backup nextcloud directory." + exit 1 +fi + + +#Backup database +TEMP_FILE="/mnt/backup/db_backups/nextcloud-sqlbackup.bak.tmp" +FINAL_FILE="/mnt/backup/db_backups/nextcloud-sqlbackup.bak" +echo "Backing up database" +export MYSQL_PWD="$DATABASE_PASSWORD" +mysqldump --single-transaction --no-tablespaces -h localhost -u cloud_db nextcloud > "$TEMP_FILE" +if [ $? -ne 0 ]; then + send_discord_message "Failed to backup database." + exit 1 +fi +mv "$TEMP_FILE" "$FINAL_FILE" + +#Backup data directory +echo "Backing up data directory" +rsync -Aax /mnt/cloud/ /mnt/backup/data/ +if [ $? -ne 0 ]; then + send_discord_message "Failed to backup data directory." + exit 1 +fi + +#Disable maintenance mode +php8.3 /var/www/nextcloud/occ maintenance:mode --off +if [ $? -ne 0 ]; then + send_discord_message "Failed to disable maintenance mode." +fi + +end=$(date +%s) +elapsed=$((end - start)) +send_discord_message "SUCCESS! Finished Nextcloud backup in $elapsed seconds."