153 lines
4.4 KiB
Bash
153 lines
4.4 KiB
Bash
#!/bin/bash
|
|
|
|
# Calejo Control Adapter Backup Script
|
|
# This script creates backups of the database and configuration
|
|
|
|
set -e
|
|
|
|
# Configuration
|
|
BACKUP_DIR="/backups/calejo"
|
|
DATE=$(date +%Y%m%d_%H%M%S)
|
|
RETENTION_DAYS=7
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Logging function
|
|
log() {
|
|
echo -e "${GREEN}[$(date +'%Y-%m-%d %H:%M:%S')]${NC} $1"
|
|
}
|
|
|
|
warn() {
|
|
echo -e "${YELLOW}[$(date +'%Y-%m-%d %H:%M:%S')] WARNING:${NC} $1"
|
|
}
|
|
|
|
error() {
|
|
echo -e "${RED}[$(date +'%Y-%m-%d %H:%M:%S')] ERROR:${NC} $1"
|
|
exit 1
|
|
}
|
|
|
|
# Check if running as root
|
|
if [ "$EUID" -eq 0 ]; then
|
|
warn "Running as root. Consider running as a non-root user with appropriate permissions."
|
|
fi
|
|
|
|
# Create backup directory if it doesn't exist
|
|
mkdir -p "$BACKUP_DIR"
|
|
|
|
log "Starting Calejo Control Adapter backup..."
|
|
|
|
# Database backup
|
|
log "Creating database backup..."
|
|
DB_BACKUP_FILE="$BACKUP_DIR/calejo_db_backup_$DATE.sql"
|
|
|
|
if command -v docker-compose &> /dev/null; then
|
|
# Using Docker Compose
|
|
docker-compose exec -T postgres pg_dump -U calejo calejo > "$DB_BACKUP_FILE"
|
|
else
|
|
# Direct PostgreSQL connection
|
|
if [ -z "$DATABASE_URL" ]; then
|
|
error "DATABASE_URL environment variable not set"
|
|
fi
|
|
|
|
# Extract connection details from DATABASE_URL
|
|
DB_HOST=$(echo "$DATABASE_URL" | sed -n 's/.*@\\([^:]*\\):.*/\\1/p')
|
|
DB_PORT=$(echo "$DATABASE_URL" | sed -n 's/.*:\\\([0-9]*\\\)\\/.*/\\1/p')
|
|
DB_NAME=$(echo "$DATABASE_URL" | sed -n 's/.*\\/\\\([^?]*\\\)/\\1/p')
|
|
DB_USER=$(echo "$DATABASE_URL" | sed -n 's/.*:\\\([^:]*\\\):.*/\\1/p')
|
|
DB_PASS=$(echo "$DATABASE_URL" | sed -n 's/.*:\\\([^@]*\\\)@.*/\\1/p')
|
|
|
|
PGPASSWORD="$DB_PASS" pg_dump -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" "$DB_NAME" > "$DB_BACKUP_FILE"
|
|
fi
|
|
|
|
if [ $? -eq 0 ] && [ -s "$DB_BACKUP_FILE" ]; then
|
|
log "Database backup created: $DB_BACKUP_FILE"
|
|
else
|
|
error "Database backup failed or created empty file"
|
|
fi
|
|
|
|
# Configuration backup
|
|
log "Creating configuration backup..."
|
|
CONFIG_BACKUP_FILE="$BACKUP_DIR/calejo_config_backup_$DATE.tar.gz"
|
|
|
|
tar -czf "$CONFIG_BACKUP_FILE" config/ logs/ 2>/dev/null || warn "Some files might not have been backed up"
|
|
|
|
if [ -s "$CONFIG_BACKUP_FILE" ]; then
|
|
log "Configuration backup created: $CONFIG_BACKUP_FILE"
|
|
else
|
|
warn "Configuration backup might be empty"
|
|
fi
|
|
|
|
# Logs backup (optional)
|
|
log "Creating logs backup..."
|
|
LOGS_BACKUP_FILE="$BACKUP_DIR/calejo_logs_backup_$DATE.tar.gz"
|
|
|
|
if [ -d "logs" ]; then
|
|
tar -czf "$LOGS_BACKUP_FILE" logs/ 2>/dev/null
|
|
if [ -s "$LOGS_BACKUP_FILE" ]; then
|
|
log "Logs backup created: $LOGS_BACKUP_FILE"
|
|
else
|
|
warn "Logs backup might be empty"
|
|
fi
|
|
else
|
|
warn "Logs directory not found, skipping logs backup"
|
|
fi
|
|
|
|
# Compress database backup
|
|
log "Compressing database backup..."
|
|
gzip "$DB_BACKUP_FILE"
|
|
DB_BACKUP_FILE="$DB_BACKUP_FILE.gz"
|
|
|
|
# Verify backups
|
|
log "Verifying backups..."
|
|
for backup_file in "$DB_BACKUP_FILE" "$CONFIG_BACKUP_FILE"; do
|
|
if [ -f "$backup_file" ] && [ -s "$backup_file" ]; then
|
|
log "✓ Backup verified: $(basename "$backup_file") ($(du -h "$backup_file" | cut -f1))"
|
|
else
|
|
error "Backup verification failed for: $(basename "$backup_file")"
|
|
fi
|
|
|
|
done
|
|
|
|
# Clean up old backups
|
|
log "Cleaning up backups older than $RETENTION_DAYS days..."
|
|
find "$BACKUP_DIR" -name "calejo_*_backup_*" -type f -mtime +$RETENTION_DAYS -delete
|
|
|
|
# Create backup manifest
|
|
MANIFEST_FILE="$BACKUP_DIR/backup_manifest_$DATE.txt"
|
|
cat > "$MANIFEST_FILE" << EOF
|
|
Calejo Control Adapter Backup Manifest
|
|
======================================
|
|
Backup Date: $(date)
|
|
Backup ID: $DATE
|
|
|
|
Files Created:
|
|
- $(basename "$DB_BACKUP_FILE") - Database backup
|
|
- $(basename "$CONFIG_BACKUP_FILE") - Configuration backup
|
|
EOF
|
|
|
|
if [ -f "$LOGS_BACKUP_FILE" ]; then
|
|
echo "- $(basename "$LOGS_BACKUP_FILE") - Logs backup" >> "$MANIFEST_FILE"
|
|
fi
|
|
|
|
cat >> "$MANIFEST_FILE" << EOF
|
|
|
|
Backup Size Summary:
|
|
$(du -h "$BACKUP_DIR/calejo_*_backup_$DATE*" 2>/dev/null | while read size file; do echo " $size $(basename "$file")"; done)
|
|
|
|
Retention Policy: $RETENTION_DAYS days
|
|
EOF
|
|
|
|
log "Backup manifest created: $MANIFEST_FILE"
|
|
|
|
log "Backup completed successfully!"
|
|
log "Total backup size: $(du -sh "$BACKUP_DIR/calejo_*_backup_$DATE*" 2>/dev/null | cut -f1)"
|
|
|
|
# Optional: Upload to cloud storage
|
|
if [ -n "$BACKUP_UPLOAD_COMMAND" ]; then
|
|
log "Uploading backups to cloud storage..."
|
|
eval "$BACKUP_UPLOAD_COMMAND"
|
|
fi |