FileRun/restore.sh

97 lines
3.2 KiB
Bash
Raw Permalink Normal View History

2025-11-29 18:21:29 +00:00
#!/bin/bash
# --- Configuration ---
# Directory containing your docker-compose.yml
COMPOSE_DIR=$(pwd)
# The directory where your compressed backup file is located (MUST match backup.sh)
BACKUP_DIR="/home/Dejan/backups/filerun" # <--- ADJUST THIS PATH
# A temporary directory to extract the backup files
TEMP_DIR="/tmp/filerun_restore_stage"
# Define the local directories (volumes)
DB_DIR="db_data"
HTML_DIR="filerun_html"
USER_DATA_DIR="user_data"
# --- Script Start ---
echo "--- Starting FileRun Restore Process ---"
# 1. Ask the user for the backup file name
echo "Available backups in $BACKUP_DIR:"
ls -1 "$BACKUP_DIR"/*.tar.gz
echo "-----------------------------------"
read -p "Enter the FULL name of the backup file (e.g., filerun_backup_20251129_174239.tar.gz): " BACKUP_FILE
FULL_BACKUP_PATH="$BACKUP_DIR/$BACKUP_FILE"
# 2. Validate the backup file
if [ ! -f "$FULL_BACKUP_PATH" ]; then
echo "ERROR: Backup file not found at $FULL_BACKUP_PATH. Exiting."
exit 1
fi
# 3. Stop the FileRun and MariaDB services
echo "Stopping FileRun services..."
docker compose down
if [ $? -ne 0 ]; then
echo "ERROR: Docker Compose down failed. Cannot continue restoration. Exiting."
exit 1
fi
# 4. Clean up current volume data (IMPORTANT: irreversible step)
read -p "WARNING: This will DELETE all current data in your $DB_DIR, $HTML_DIR, and $USER_DATA_DIR directories. Continue? (y/N): " CONFIRM_DELETE
if [[ "$CONFIRM_DELETE" != "y" ]]; then
echo "Restore cancelled by user. Restarting services..."
docker compose up -d
exit 0
fi
echo "Deleting current data..."
rm -rf "$COMPOSE_DIR/$DB_DIR"
rm -rf "$COMPOSE_DIR/$HTML_DIR"/*
rm -rf "$COMPOSE_DIR/$USER_DATA_DIR"/*
# Recreate essential directories (in case they were fully deleted)
mkdir -p "$COMPOSE_DIR/$DB_DIR"
mkdir -p "$COMPOSE_DIR/$HTML_DIR"
mkdir -p "$COMPOSE_DIR/$USER_DATA_DIR"
# 5. Extract the backup archive
echo "Extracting backup from $BACKUP_FILE..."
rm -rf "$TEMP_DIR"
mkdir -p "$TEMP_DIR"
# Extract the tar.gz file into the temporary directory
tar -xzf "$FULL_BACKUP_PATH" -C "$TEMP_DIR"
if [ $? -ne 0 ]; then
echo "ERROR: Extraction failed. Exiting."
exit 1
fi
# Determine the extracted folder name (it's usually the backup name without .tar.gz)
EXTRACTED_FOLDER=$(basename "$BACKUP_FILE" .tar.gz)
# 6. Copy extracted data back to the persistent volumes
echo "Copying extracted data back to live volumes..."
# Use rsync or cp -a to copy contents, excluding the root folder itself
cp -a "$TEMP_DIR/$EXTRACTED_FOLDER/$DB_DIR/." "$COMPOSE_DIR/$DB_DIR/"
cp -a "$TEMP_DIR/$EXTRACTED_FOLDER/$HTML_DIR/." "$COMPOSE_DIR/$HTML_DIR/"
cp -a "$TEMP_DIR/$EXTRACTED_FOLDER/$USER_DATA_DIR/." "$COMPOSE_DIR/$USER_DATA_DIR/"
# 7. Set correct permissions for the restored data
echo "Setting permissions for UID/GID 33 (www-data)..."
chown -R 33:33 "$COMPOSE_DIR/$HTML_DIR"
chown -R 33:33 "$COMPOSE_DIR/$DB_DIR"
chown -R 33:33 "$COMPOSE_DIR/$USER_DATA_DIR"
# 8. Cleanup and Restart
echo "Cleaning up temporary files..."
rm -rf "$TEMP_DIR"
echo "Starting FileRun services back up..."
docker compose up -d
echo "--- Restore Complete! ---"
echo "FileRun should now be accessible and restored to the state of $BACKUP_FILE."
echo "-------------------------"