commit e7a40aa725dde56037b540a8383ee5e617356352 Author: Amir Aref Date: Sun Mar 8 14:20:00 2026 +0330 initial commit diff --git a/backup-synapse.sh b/backup-synapse.sh new file mode 100755 index 0000000..3aa52d5 --- /dev/null +++ b/backup-synapse.sh @@ -0,0 +1,83 @@ +#!/usr/bin/env bash +set -euo pipefail + +### CONFIG ### +DATE=$(date +%F) +BASE_BACKUP_DIR="$HOME/backups/synapse" +BACKUP_DIR="$BASE_BACKUP_DIR/$DATE" + +SYNAPSE_DIR="/opt/synapse" +SYNAPSE_DATA_DIR="/opt/synapse/synapse-data/_data" + +POSTGRES_SERVICE="pg" +POSTGRES_DB="synapse" +POSTGRES_USER="matrix" + +NGINX_DIR="/etc/nginx" +LETSENCRYPT_DIR="/etc/letsencrypt" + +### PREP ### +mkdir -p "$BACKUP_DIR" + +echo "📦 Synapse backup started" +echo "📅 Date: $DATE" +echo "📁 Backup dir: $BACKUP_DIR" +echo + +cd "$SYNAPSE_DIR" + +### 1️⃣ Stop ONLY Synapse +echo "⏸ Stopping ONLY Synapse service (Postgres stays running)..." +docker compose stop synapse +echo + +### 2️⃣ PostgreSQL backup +echo "🗄 Backing up PostgreSQL database..." +docker compose exec -T "$POSTGRES_SERVICE" \ + pg_dump -U "$POSTGRES_USER" -Fc "$POSTGRES_DB" \ + > "$BACKUP_DIR/synapse-postgres.dump" +echo "✅ PostgreSQL backup done" +echo + +### 3️⃣ Synapse data backup +echo "📁 Backing up Synapse data directory..." +tar -cJvf "$BACKUP_DIR/synapse-data.tar.xz" \ + -C "$SYNAPSE_DATA_DIR" . +echo "✅ Synapse data backup done" +echo + +### 4️⃣ Docker Compose config (ONLY docker-compose.yml) +echo "🐳 Backing up docker-compose.yml..." +cp "$SYNAPSE_DIR/docker-compose.yml" \ + "$BACKUP_DIR/docker-compose.yml" +echo "✅ Docker Compose config backed up" +echo + +### 5️⃣ Nginx backup +echo "🌐 Backing up Nginx config..." +tar -czvf "$BACKUP_DIR/nginx.tar.gz" \ + "$NGINX_DIR" +echo "✅ Nginx backup done" +echo + +### 6️⃣ Let's Encrypt backup +#echo "🔐 Backing up Let's Encrypt certificates..." +#tar -czvf "$BACKUP_DIR/letsencrypt.tar.gz" \ +# "$LETSENCRYPT_DIR" +#echo "✅ Let's Encrypt backup done" +#echo + +### 7️⃣ Start Synapse again +echo "▶ Starting Synapse service..." +docker compose up -d synapse +echo + +### 8️⃣ Optional: Full combined archiveve (run with sudo) +echo "📦 Creating full backup archive..." +sudo tar -czvf "$BASE_BACKUP_DIR/full-backup-$DATE.tar.gz" \ + -C "$BASE_BACKUP_DIR" "$DATE" +echo "✅ Full archive created" +echo + +echo "✅✅ Backup completed successfully" +