Files
scripts/backup-synapse.sh
T

96 lines
2.3 KiB
Bash
Executable File

#!/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)..."
sudo docker-compose stop synapse
echo
### 2️⃣ PostgreSQL backup
echo "🗄 Backing up PostgreSQL database..."
sudo 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 -cJf "$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..."
sudo tar -czvf "$BACKUP_DIR/letsencrypt.tar.gz" \
"$LETSENCRYPT_DIR"
echo "✅ Let's Encrypt backup done"
echo
### 7️⃣ Start Synapse again
echo "▶ Starting Synapse service..."
sudo docker-compose up -d synapse
echo
### 8️⃣ Optional: Full combined archiveve (run with sudo)
echo "📦 Creating full backup archive..."
tar -czvf "$BASE_BACKUP_DIR/full-backup-$DATE.tar.gz" \
-C "$BASE_BACKUP_DIR" "$DATE"
echo "✅ Full archive created"
echo
### Remove the backup dir after full archive
cd $BASE_BACKUP_DIR
echo "📦 Removing the Backup directory: $DATE"
sudo rm -r $BACKUP_DIR
echo "Backup directory removed."
echo
echo "✅✅ Backup completed successfully"
echo
echo "▶ Running cleanup script ..."
./cleanup-backups.sh --run