summaryrefslogtreecommitdiff
path: root/backup.sh
diff options
context:
space:
mode:
Diffstat (limited to 'backup.sh')
-rwxr-xr-xbackup.sh59
1 files changed, 59 insertions, 0 deletions
diff --git a/backup.sh b/backup.sh
new file mode 100755
index 0000000..03d70e6
--- /dev/null
+++ b/backup.sh
@@ -0,0 +1,59 @@
+#!/bin/bash
+#blargh
+# Configuration
+SRC_DIR="/home/mastodon/live"
+DEST_DIR="/home/mastodon/backup"
+PG_DB_NAME="mastodon_production"
+PG_USER="mastodon"
+PG_HOST="" # Leave empty for local socket connection
+PG_PORT="5432"
+TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S")
+BACKUP_DIR="${DEST_DIR}/mastodon_backup_${TIMESTAMP}"
+LOG_FILE="${DEST_DIR}/backup_${TIMESTAMP}.log"
+
+# Ensure the destination directory exists
+mkdir -p "$BACKUP_DIR" || { echo "Failed to create backup directory"; exit 1; }
+
+# Backup Mastodon files
+echo "Starting rsync backup of Mastodon files..."
+rsync -av --delete "$SRC_DIR" "$BACKUP_DIR/mastodon_files" >> "$LOG_FILE" 2>&1 || { echo "rsync failed"; exit 1; }
+
+# Backup Nginx configuration files
+echo "Starting backup of Nginx configuration files..."
+rsync -av /etc/nginx "$BACKUP_DIR/nginx_configs" >> "$LOG_FILE" 2>&1 || { echo "rsync failed to backup Nginx configs"; exit 1; }
+
+# Backup PostgreSQL database
+echo "Starting PostgreSQL database backup..."
+pg_dump -U "$PG_USER" -d "$PG_DB_NAME" > "$BACKUP_DIR/mastodon_db_${TIMESTAMP}.sql" >> "$LOG_FILE" 2>&1 || { echo "pg_dump failed"; exit 1; }
+
+# Compress the backup
+echo "Compressing backup..."
+tar -czf "${BACKUP_DIR}.tar.gz" -C "$DEST_DIR" "mastodon_backup_${TIMESTAMP}" >> "$LOG_FILE" 2>&1 || { echo "Compression failed"; exit 1; }
+
+# Remove the uncompressed backup directory
+echo "Removing uncompressed backup directory..."
+ls -l "$BACKUP_DIR" >> "$LOG_FILE" 2>&1 # Debugging output
+rm -rf "$BACKUP_DIR" >> "$LOG_FILE" 2>&1 || { echo "Failed to remove uncompressed backup directory"; exit 1; }
+
+# Transfer backup to remote server
+REMOTE_USER="root"
+REMOTE_HOST="209.209.9.128"
+REMOTE_DIR="/mnt/e"
+
+echo "Transferring backup to remote server..." >> "$LOG_FILE" 2>&1
+rsync -av "${DEST_DIR}/mastodon_backup_${TIMESTAMP}.tar.gz" "${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}" >> "$LOG_FILE" 2>&1 || { echo "Remote rsync failed"; exit 1; }
+
+# Remove local compressed backup file
+echo "Removing local compressed backup file..." >> "$LOG_FILE" 2>&1
+rm "${DEST_DIR}/mastodon_backup_${TIMESTAMP}.tar.gz" >> "$LOG_FILE" 2>&1 || { echo "Failed to remove local backup file"; exit 1; }
+
+# Move log files to /home/mastodon/logs
+LOG_DEST_DIR="/home/mastodon/logs"
+mkdir -p "$LOG_DEST_DIR" >> "$LOG_FILE" 2>&1 || { echo "Failed to create log destination directory"; exit 1; }
+mv "$LOG_FILE" "${LOG_DEST_DIR}/backup_${TIMESTAMP}.log" >> "$LOG_FILE" 2>&1 || { echo "Failed to move log file"; exit 1; }
+
+# Clean up backup directory
+echo "Cleaning up backup directory..." >> "$LOG_FILE" 2>&1
+rm -rf "${DEST_DIR}"/* >> "$LOG_FILE" 2>&1 || { echo "Failed to clean up backup directory"; exit 1; }
+
+echo "Backup completed: ${BACKUP_DIR}.tar.gz"