Update backup main logic

main
Anthony 2025-01-07 00:19:53 +08:00
parent 398076b656
commit bca47a3616
1 changed files with 69 additions and 10 deletions

View File

@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
set -e # Exit on error set -e # Exit on error
trap 'echo "ERROR: An error occurred. Exiting."' ERR trap 'echo "ERROR: An error occurred while executing $COMMAND for $ENV_NAME. Exiting."' ERR
# Validate arguments # Validate arguments
if [ $# -lt 2 ]; then if [ $# -lt 2 ]; then
@ -28,6 +28,11 @@ fi
mkdir -p "$BACKUP_REPO_PATH" mkdir -p "$BACKUP_REPO_PATH"
# Set environment variables # Set environment variables
if [ ! -f "$PASSWORD_FILE" ]; then
echo "Error: Password file not found at $PASSWORD_FILE."
exit 1
fi
export RESTIC_REPOSITORY="$BACKUP_REPO_PATH" export RESTIC_REPOSITORY="$BACKUP_REPO_PATH"
export RESTIC_PASSWORD=$(cat "$PASSWORD_FILE") export RESTIC_PASSWORD=$(cat "$PASSWORD_FILE")
@ -36,35 +41,89 @@ log_message() {
echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE" echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
} }
# Commands # Ensure Restic is installed
install_restic() {
if ! which restic &>/dev/null; then
log_message "Restic not found. Installing..."
if which dnf &>/dev/null; then
dnf install -y epel-release && dnf install -y restic
elif which yum &>/dev/null; then
yum install -y restic
else
log_message "ERROR: Unsupported package manager."
exit 1
fi
fi
log_message "Restic is installed."
}
# Initialize or validate repository
check_backup_repo() {
if ! restic -r "$BACKUP_REPO_PATH" snapshots &>/dev/null; then
log_message "Initializing new Restic repository..."
restic -r "$BACKUP_REPO_PATH" init
else
log_message "Restic repository validated."
fi
}
# Perform backup operations
perform_backup() {
local path="$1"
local tag="$2"
local exclude="$3"
log_message "Backing up $path with tag $tag..."
restic -r "$BACKUP_REPO_PATH" backup "$path" --tag "$tag" $exclude
log_message "Backup for $path completed."
}
# Backup database
backup_database() {
log_message "Starting database backup for $ENV_NAME..."
local db_dump
db_dump=$(mktemp)
mysqldump -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" > "$db_dump"
perform_backup "$db_dump" "database-backup"
rm -f "$db_dump"
log_message "Database backup completed."
}
# Handle commands
case "$COMMAND" in case "$COMMAND" in
backup) backup)
log_message "Starting full backup for environment: $ENV_NAME" log_message "Starting full backup for environment: $ENV_NAME"
# Add logic to perform the full backup install_restic
check_backup_repo
perform_backup "/var/www/webroot/ROOT/wp-content" "wp-core" "--exclude /var/www/webroot/ROOT/wp-content/uploads"
perform_backup "/var/www/webroot/ROOT/wp-content/uploads" "wp-uploads"
backup_database
;; ;;
backup_wp_core) backup_wp_core)
log_message "Backing up WordPress core files for environment: $ENV_NAME" log_message "Backing up WordPress core files for environment: $ENV_NAME"
# Add logic for WordPress core backup perform_backup "/var/www/webroot/ROOT/wp-content" "wp-core" "--exclude /var/www/webroot/ROOT/wp-content/uploads"
;; ;;
backup_uploads) backup_uploads)
log_message "Backing up WordPress uploads for environment: $ENV_NAME" log_message "Backing up WordPress uploads for environment: $ENV_NAME"
# Add logic for uploads backup perform_backup "/var/www/webroot/ROOT/wp-content/uploads" "wp-uploads"
;; ;;
backup_database) backup_database)
log_message "Backing up WordPress database for environment: $ENV_NAME" backup_database
# Add logic for database backup
;; ;;
check_backup_repo) check_backup_repo)
log_message "Checking backup repository for environment: $ENV_NAME" log_message "Checking backup repository for environment: $ENV_NAME"
# Add repository check logic check_backup_repo
;; ;;
rotate_snapshots) rotate_snapshots)
log_message "Rotating snapshots for environment: $ENV_NAME" log_message "Rotating snapshots for environment: $ENV_NAME"
# Add snapshot rotation logic restic -r "$BACKUP_REPO_PATH" forget --keep-last 5 --prune
log_message "Snapshot rotation completed."
;; ;;
create_snapshot) create_snapshot)
log_message "Creating snapshot for environment: $ENV_NAME" log_message "Creating snapshot for environment: $ENV_NAME"
# Add snapshot creation logic restic -r "$BACKUP_REPO_PATH" backup --tag "manual-snapshot"
log_message "Snapshot creation completed."
;; ;;
update_restic) update_restic)
log_message "Updating Restic for environment: $ENV_NAME" log_message "Updating Restic for environment: $ENV_NAME"