diff options
author | doc <doc@filenotfound.org> | 2025-06-30 20:11:52 +0000 |
---|---|---|
committer | doc <doc@filenotfound.org> | 2025-06-30 20:11:52 +0000 |
commit | 41e897f4945aaf8fbcdf0b12ac2f08c5e6ae0458 (patch) | |
tree | db7c3520fd91abc3cf56b1a52095d23f3a80d059 /restore.sh |
Diffstat (limited to 'restore.sh')
-rwxr-xr-x | restore.sh | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/restore.sh b/restore.sh new file mode 100755 index 0000000..55efa02 --- /dev/null +++ b/restore.sh @@ -0,0 +1,68 @@ +#!/bin/bash + +# Configuration +REMOTE_SERVER="root@offsite.doctatortot.com" +REMOTE_BACKUP_DIR="/mnt/backup1/mastodon" +LOCAL_RESTORE_DIR="/home/mastodon/restore" +MASTODON_DIR="/home/mastodon/live" +PG_DB_NAME="mastodon_production" +PG_USER="mastodon" +PG_HOST="" # Leave empty for local socket connection +PG_PORT="5432" + +# Create the local restore directory if it doesn't exist +mkdir -p "$LOCAL_RESTORE_DIR" || { echo "Failed to create restore directory"; exit 1; } + +# Find the latest backup file on the remote server +echo "Finding the latest backup file on the remote server..." +LATEST_BACKUP=$(ssh $REMOTE_SERVER "ls -t $REMOTE_BACKUP_DIR/mastodon_backup_*.tar.gz | head -n 1") + +if [ -z "$LATEST_BACKUP" ]; then + echo "No backup files found on the remote server." + exit 1 +fi + +echo "Latest backup file found: $LATEST_BACKUP" + +# Transfer the latest backup file to the local server +echo "Transferring the latest backup file to the local server..." +scp "$REMOTE_SERVER:$LATEST_BACKUP" "$LOCAL_RESTORE_DIR" || { echo "Failed to transfer backup file"; exit 1; } + +# Extract the backup file +BACKUP_FILE=$(basename "$LATEST_BACKUP") +echo "Extracting the backup file..." +tar -xzf "$LOCAL_RESTORE_DIR/$BACKUP_FILE" -C "$LOCAL_RESTORE_DIR" || { echo "Failed to extract backup file"; exit 1; } + +# Stop Mastodon services +echo "Stopping Mastodon services..." +sudo systemctl stop mastodon-web mastodon-sidekiq mastodon-streaming || { echo "Failed to stop Mastodon services"; exit 1; } + +# Restore Mastodon files +echo "Restoring Mastodon files..." +rsync -av --delete "$LOCAL_RESTORE_DIR/mastodon_backup_*/mastodon_files/" "$MASTODON_DIR" || { echo "rsync failed"; exit 1; } + +# Restore PostgreSQL database +echo "Restoring PostgreSQL database..." +PG_DUMP_FILE=$(find "$LOCAL_RESTORE_DIR" -name "mastodon_db_*.sql") +if [ -z "$PG_DUMP_FILE" ]; then + echo "Database dump file not found." + exit 1 +fi + +psql -U "$PG_USER" -d "$PG_DB_NAME" -f "$PG_DUMP_FILE" || { echo "psql restore failed"; exit 1; } + +# Run database migrations +echo "Running database migrations..." +cd "$MASTODON_DIR" +RAILS_ENV=production bundle exec rails db:migrate || { echo "Database migrations failed"; exit 1; } + +# Start Mastodon services +echo "Starting Mastodon services..." +sudo systemctl start mastodon-web mastodon-sidekiq mastodon-streaming || { echo "Failed to start Mastodon services"; exit 1; } + +# Clean up +echo "Cleaning up..." +rm -rf "$LOCAL_RESTORE_DIR/mastodon_backup_*" || { echo "Failed to clean up restore files"; exit 1; } +rm "$LOCAL_RESTORE_DIR/$BACKUP_FILE" || { echo "Failed to remove backup file"; exit 1; } + +echo "Restore completed successfully." |