2025-11-29 18:18:51 +00:00
|
|
|
#!/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.
|
2025-11-29 18:20:24 +00:00
|
|
|
BACKUP_DIR="/home/Dejan/Docker/FileRun/backup" # <--- ADJUST THIS PATH
|
2025-11-29 18:18:51 +00:00
|
|
|
# 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 "--------------------------"
|