d890ded30a
fix remove files in cleanup stage than near to be removed
137 lines
3.3 KiB
Bash
Executable File
137 lines
3.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
### CONFIG ###
|
|
DATE=$(date +%F)
|
|
|
|
# for deleting older files
|
|
DRY_RUN=false
|
|
KEEP_COUNT=1
|
|
#BASE_BACKUP_DIR="$HOME/backups/synapse"
|
|
BASE_BACKUP_DIR="/mnt/disk/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"
|
|
|
|
|
|
### Startup Info ###
|
|
echo "📦 Synapse backup started"
|
|
echo "📅 Date: $DATE"
|
|
echo "📁 Base Backups dir: $BASE_BACKUP_DIR"
|
|
echo "📁 Backup dir: $BACKUP_DIR"
|
|
echo
|
|
|
|
### remove old files ###
|
|
cd $BASE_BACKUP_DIR
|
|
echo "▶ cleanup older backup files ..."
|
|
|
|
cd $BASE_BACKUP_DIR
|
|
|
|
# Count the number of existing backups
|
|
TOTAL_BACKUPS=$(find . -name 'full-backup-*.tar.gz' | wc -l)
|
|
echo "Existing backup files ($TOTAL_BACKUPS) :"
|
|
# Find all full-backup-*.tar.gz files and list them
|
|
find . -name 'full-backup-*.tar.gz'| sort -k2,2 -t. -n -r | while IFS= read -r file; do
|
|
echo "- $file"
|
|
done
|
|
echo
|
|
|
|
# Find and list files that should be removed
|
|
echo "Files that will be deleted:"
|
|
files_to_delete=()
|
|
while IFS= read -r -d $'\0' dir; do
|
|
files_to_delete+=("$dir")
|
|
echo "- $dir"
|
|
done < <(find . -name 'full-backup-*.tar.gz' -newermt "$(( $KEEP_COUNT+1 )) days ago" ! -newermt "$KEEP_COUNT days ago" -print0)
|
|
echo
|
|
|
|
# Delete the files in dry-run mode or actually delete them
|
|
for file in "${files_to_delete[@]}"; do
|
|
if [ "$DRY_RUN" = true ]; then
|
|
echo "Will be deleted (Dry-Run): $file"
|
|
else
|
|
rm "$file"
|
|
echo "Deleted $file"
|
|
fi
|
|
done
|
|
echo
|
|
|
|
echo "Cleanup completed."
|
|
|
|
### PREP ###
|
|
mkdir -p "$BACKUP_DIR"
|
|
|
|
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
|
|
|
|
### 7️⃣ Start Synapse again
|
|
echo "▶ Starting Synapse service..."
|
|
docker compose up -d synapse
|
|
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
|
|
|
|
### 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
|
|
|
|
echo "📦 Removing the Backup directory: $DATE"
|
|
sudo rm -r $BACKUP_DIR
|
|
echo "Backup directory removed."
|
|
echo
|
|
|
|
echo "✅✅ Backup completed successfully"
|
|
echo
|