Something went wrong. Try again.
Monorepo for Aesthetic.Computer aesthetic.computer
Something went wrong. Try again.
Shell
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119#!/usr/bin/env bash# PDS Backup Script# Backs up SQLite databases and configuration
set -euo pipefail
# ConfigurationPDS_DIR="${PDS_DIR:-/pds}"BACKUP_DIR="${BACKUP_DIR:-/backups/pds}"RETENTION_DAYS="${RETENTION_DAYS:-30}"TIMESTAMP=$(date +%Y%m%d-%H%M%S)
# ColorsGREEN='\033[0;32m'BLUE='\033[0;34m'YELLOW='\033[1;33m'NC='\033[0m'
echo "╔════════════════════════════════════════╗"echo "║ PDS Backup ║"echo "╚════════════════════════════════════════╝"echo ""
# Create backup directorymkdir -p "$BACKUP_DIR"
echo -e "${BLUE}ℹ${NC} Backup directory: $BACKUP_DIR"echo -e "${BLUE}ℹ${NC} Timestamp: $TIMESTAMP"echo ""
# Backup SQLite databasesbackup_database() { local DB_NAME=$1 local DB_PATH="$PDS_DIR/$DB_NAME" if [ ! -f "$DB_PATH" ]; then echo -e "${YELLOW}⊘${NC} $DB_NAME not found, skipping" return 0 fi echo -n "Backing up $DB_NAME... " # Use SQLite backup command for consistency sqlite3 "$DB_PATH" ".backup '$BACKUP_DIR/${DB_NAME%.sqlite}-$TIMESTAMP.sqlite'" 2>/dev/null if [ $? -eq 0 ]; then SIZE=$(du -h "$BACKUP_DIR/${DB_NAME%.sqlite}-$TIMESTAMP.sqlite" | cut -f1) echo -e "${GREEN}✓${NC} ($SIZE)" return 0 else echo -e "${RED}✗${NC} FAILED" return 1 fi}
# Backup configurationbackup_config() { echo -n "Backing up configuration... " if [ -f "$PDS_DIR/pds.env" ]; then cp "$PDS_DIR/pds.env" "$BACKUP_DIR/pds.env-$TIMESTAMP" echo -e "${GREEN}✓${NC}" else echo -e "${YELLOW}⊘${NC} pds.env not found" fi}
# Backup databasesbackup_database "accounts.sqlite"backup_database "blocks.sqlite"backup_database "pds.sqlite"
# Backup configbackup_config
# Create compressed archiveecho -n "Creating compressed archive... "ARCHIVE_NAME="pds-backup-$TIMESTAMP.tar.gz"tar czf "$BACKUP_DIR/$ARCHIVE_NAME" -C "$BACKUP_DIR" \ $(ls "$BACKUP_DIR" | grep "$TIMESTAMP") 2>/dev/null
if [ $? -eq 0 ]; then ARCHIVE_SIZE=$(du -h "$BACKUP_DIR/$ARCHIVE_NAME" | cut -f1) echo -e "${GREEN}✓${NC} ($ARCHIVE_SIZE)" # Remove individual files rm -f "$BACKUP_DIR"/*-$TIMESTAMP.sqlite "$BACKUP_DIR"/*-$TIMESTAMPelse echo -e "${YELLOW}⚠${NC} Archive creation failed, keeping individual files"fi
# Clean old backupsecho -n "Cleaning old backups (>$RETENTION_DAYS days)... "DELETED=$(find "$BACKUP_DIR" -name "pds-backup-*.tar.gz" -mtime +$RETENTION_DAYS -delete -print | wc -l)echo -e "${GREEN}✓${NC} (deleted $DELETED)"
# Summaryecho ""echo "Backup Summary:"echo " Location: $BACKUP_DIR/$ARCHIVE_NAME"echo " Size: ${ARCHIVE_SIZE:-unknown}"echo " Retention: $RETENTION_DAYS days"
# Optional: Upload to Spaces/S3if [ -n "${SPACES_BACKUP_BUCKET:-}" ]; then echo "" echo -n "Uploading to Spaces... " if command -v s3cmd &> /dev/null; then s3cmd put "$BACKUP_DIR/$ARCHIVE_NAME" "s3://$SPACES_BACKUP_BUCKET/backups/" &> /dev/null echo -e "${GREEN}✓${NC}" else echo -e "${YELLOW}⊘${NC} s3cmd not installed" fifi
echo ""echo -e "${GREEN}Backup complete!${NC}"