forked from syntaxbullet/aurorabot
The backups directory may have been created by Docker/root, making it unwritable by the deploy user. The script now detects this and attempts to fix permissions automatically (chmod, then sudo chown as fallback). Also added shared/db/backups to .gitignore.
72 lines
2.3 KiB
Bash
Executable File
72 lines
2.3 KiB
Bash
Executable File
#!/bin/bash
|
|
# =============================================================================
|
|
# Aurora Database Backup Script
|
|
# =============================================================================
|
|
# Creates a timestamped PostgreSQL backup and retains the last 10 backups.
|
|
#
|
|
# Usage: ./db-backup.sh
|
|
# =============================================================================
|
|
|
|
set -e
|
|
|
|
# Load environment variables safely
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
source "$SCRIPT_DIR/lib/load-env.sh"
|
|
load_env
|
|
|
|
PROJECT_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
BACKUP_DIR="$PROJECT_DIR/shared/db/backups"
|
|
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
|
|
BACKUP_FILE="$BACKUP_DIR/backup_$TIMESTAMP.sql"
|
|
|
|
# Colors
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
RED='\033[0;31m'
|
|
NC='\033[0m'
|
|
|
|
echo -e "${YELLOW}💾 Starting database backup...${NC}"
|
|
|
|
mkdir -p "$BACKUP_DIR"
|
|
|
|
# Ensure the backup directory is writable (may have been created by Docker/root)
|
|
if [ ! -w "$BACKUP_DIR" ]; then
|
|
echo -e " ${YELLOW}⚠️ Fixing backup directory permissions...${NC}"
|
|
chmod u+w "$BACKUP_DIR" 2>/dev/null || sudo chown "$(whoami)" "$BACKUP_DIR" 2>/dev/null || {
|
|
echo -e " ${RED}✗${NC} Cannot write to $BACKUP_DIR"
|
|
echo " Run: sudo chown $(whoami) $BACKUP_DIR"
|
|
exit 1
|
|
}
|
|
fi
|
|
|
|
if docker ps | grep -q aurora_db; then
|
|
# Try to dump the database
|
|
if docker exec aurora_db pg_dump -U "${DB_USER:-auroradev}" "${DB_NAME:-auroradev}" > "$BACKUP_FILE"; then
|
|
# Check if backup file is not empty
|
|
if [ -s "$BACKUP_FILE" ]; then
|
|
echo -e " ${GREEN}✓${NC} Backup successful!"
|
|
echo -e " 📂 File: $BACKUP_FILE"
|
|
echo -e " 📏 Size: $(du -h "$BACKUP_FILE" | cut -f1)"
|
|
|
|
# Keep only last 10 backups (cross-platform: works on macOS and Linux)
|
|
cd "$BACKUP_DIR"
|
|
OLD_BACKUPS=$(ls -t backup_*.sql 2>/dev/null | tail -n +11)
|
|
if [ -n "$OLD_BACKUPS" ]; then
|
|
echo "$OLD_BACKUPS" | xargs rm --
|
|
echo -e " ${GREEN}✓${NC} Pruned old backups"
|
|
fi
|
|
else
|
|
echo -e " ${RED}✗${NC} Backup created but empty. Something went wrong."
|
|
rm -f "$BACKUP_FILE"
|
|
exit 1
|
|
fi
|
|
else
|
|
echo -e " ${RED}✗${NC} pg_dump failed."
|
|
rm -f "$BACKUP_FILE"
|
|
exit 1
|
|
fi
|
|
else
|
|
echo -e " ${RED}✗${NC} Database container (aurora_db) is not running!"
|
|
exit 1
|
|
fi
|