diff --git a/backup.sh b/backup.sh new file mode 100644 index 0000000..12081dc --- /dev/null +++ b/backup.sh @@ -0,0 +1,87 @@ +#!/bin/bash + +# --- Configuration --- +# The name of the directory where your docker-compose.yml resides. +# Used to name the final backup file. +BACKUP_NAME="filerun_backup_$(date +%Y%m%d_%H%M%S)" +# The directory where the compressed backup file will be saved. +BACKUP_DIR="/home/Dejan/backups/filerun" # <--- ADJUST THIS PATH +# Directory containing your docker-compose.yml (usually the current directory) +COMPOSE_DIR=$(pwd) + +# Define the local directories (volumes) to be backed up +# These MUST match the host directories in your docker-compose.yml +DB_DIR="db_data" +HTML_DIR="filerun_html" +USER_DATA_DIR="user_data" + +# A temporary directory to stage the files before compression +TEMP_DIR="/tmp/filerun_backup_stage" + +# --- Script Start --- + +echo "--- Starting FileRun Backup Process ---" + +# 1. Ensure the destination backup directory exists +mkdir -p "$BACKUP_DIR" +if [ $? -ne 0 ]; then + echo "ERROR: Could not create backup directory $BACKUP_DIR. Exiting." + exit 1 +fi + +# 2. Stop the FileRun and MariaDB services +echo "Stopping FileRun services to ensure data integrity..." +docker compose down +if [ $? -ne 0 ]; then + echo "WARNING: Docker Compose down failed. Trying to proceed, but data integrity might be compromised." +fi + +# 3. Create the staging directory and copy essential data +echo "Creating staging area and copying data..." +rm -rf "$TEMP_DIR" +mkdir -p "$TEMP_DIR/$BACKUP_NAME" + +# Copy the core application files (mainly for system/data and system config) +cp -a "$COMPOSE_DIR/$HTML_DIR" "$TEMP_DIR/$BACKUP_NAME/" +echo "-> Copied Application HTML files." + +# Copy the user files (PDFs, images, documents) +cp -a "$COMPOSE_DIR/$USER_DATA_DIR" "$TEMP_DIR/$BACKUP_NAME/" +echo "-> Copied User Files (documents)." + +# Copy the database files (Metadata, users, shares, etc.) +cp -a "$COMPOSE_DIR/$DB_DIR" "$TEMP_DIR/$BACKUP_NAME/" +echo "-> Copied Database files." + +# 4. Exclude unnecessary large files/caches/logs from the backup +echo "Cleaning up staging area (excluding caches and logs)..." + +# Exclude unnecessary MariaDB files/logs within the copied DB_DIR +find "$TEMP_DIR/$BACKUP_NAME/$DB_DIR" -type f -name "*.log" -delete +find "$TEMP_DIR/$BACKUP_NAME/$DB_DIR" -type f -name "ib_logfile*" -delete +echo "-> Removed DB logs." + +# Exclude FileRun cache/logs within the copied HTML_DIR +rm -rf "$TEMP_DIR/$BACKUP_NAME/$HTML_DIR/system/cache" +rm -rf "$TEMP_DIR/$BACKUP_NAME/$HTML_DIR/system/logs" +echo "-> Removed FileRun caches and logs." + +# 5. Compress the staged data +echo "Compressing files into $BACKUP_NAME.tar.gz..." +tar -czf "$BACKUP_DIR/$BACKUP_NAME.tar.gz" -C "$TEMP_DIR" "$BACKUP_NAME" +if [ $? -ne 0 ]; then + echo "ERROR: Compression failed. Exiting." + docker compose up -d # Try to restart services on failure + exit 1 +fi + +# 6. Cleanup and Restart +echo "Cleaning up staging area and temporary files..." +rm -rf "$TEMP_DIR" + +echo "Starting FileRun services back up..." +docker compose up -d + +echo "--- Backup Complete! ---" +echo "Backup file saved to: $BACKUP_DIR/$BACKUP_NAME.tar.gz" +echo "--------------------------" \ No newline at end of file