thing
1#!/bin/bash
2set -e
3
4# Configuration
5BACKUP_TIMESTAMP=$(date +%Y%m%d-%H%M%S)
6BACKUP_DIR="/tmp/pds-backup-$BACKUP_TIMESTAMP"
7BACKUP_TARBALL="/tmp/pds-backup-$BACKUP_TIMESTAMP.tar.gz"
8R2_BUCKET="mbdpds-backup"
9R2_ENDPOINT="https://fe6870e7e305737ba53a51bed8a8e775.r2.cloudflarestorage.com"
10PDS_DIR="/pds"
11
12echo "🔄 Starting PDS backup..."
13
14# Create backup directory
15mkdir -p "$BACKUP_DIR"
16
17# Backup SQLite databases
18echo "📦 Backing up databases..."
19cp "$PDS_DIR/account.sqlite" "$BACKUP_DIR/"
20cp -r "$PDS_DIR/actors" "$BACKUP_DIR/"
21
22# Backup blocks (blob storage)
23echo "📦 Backing up blocks..."
24tar -czf "$BACKUP_DIR/blocks.tar.gz" -C "$PDS_DIR" blocks
25
26# Backup configuration
27echo "📦 Backing up config..."
28cp "$PDS_DIR/pds.env" "$BACKUP_DIR/"
29cp "$PDS_DIR/compose.yaml" "$BACKUP_DIR/"
30
31# Backup Caddy config
32echo "📦 Backing up Caddy..."
33cp -r "$PDS_DIR/caddy/etc" "$BACKUP_DIR/caddy-config"
34
35# Create tarball
36echo "📦 Creating archive..."
37cd /tmp
38tar -czf "$BACKUP_TARBALL" "$(basename $BACKUP_DIR)"
39
40# Upload to R2
41echo "☁️ Uploading to R2..."
42if /snap/bin/aws s3 cp "$BACKUP_TARBALL" "s3://$R2_BUCKET/" \
43 --endpoint-url="$R2_ENDPOINT" 2>&1; then
44 echo "✅ Upload successful"
45 # Delete immediately after successful upload
46 rm -f "$BACKUP_TARBALL"
47else
48 echo "❌ Upload failed"
49 # Still clean up on failure
50 rm -f "$BACKUP_TARBALL"
51 exit 1
52fi
53
54# Cleanup backup directory
55echo "🧹 Cleaning up..."
56rm -rf "$BACKUP_DIR"
57
58# Delete backups older than 7 days from R2
59echo "🧹 Removing old backups (>7 days)..."
60/snap/bin/aws s3 ls "s3://$R2_BUCKET/" --endpoint-url="$R2_ENDPOINT" | \
61 while read -r line; do
62 createDate=$(echo $line | awk '{print $1" "$2}')
63 createDate=$(date -d "$createDate" +%s)
64 olderThan=$(date -d "7 days ago" +%s)
65 if [[ $createDate -lt $olderThan ]]; then
66 fileName=$(echo $line | awk '{print $4}')
67 if [[ $fileName != "" ]]; then
68 /snap/bin/aws s3 rm "s3://$R2_BUCKET/$fileName" --endpoint-url="$R2_ENDPOINT"
69 echo "Deleted: $fileName"
70 fi
71 fi
72 done
73
74echo "✅ Backup complete!"