#!/bin/bash ############################################################################### # Quick Setup for Database Backups (Alex User) # This script sets up the backup crontab for the alex user ############################################################################### set -euo pipefail SCRIPT_DIR="/mnt/HC_Volume_103713257/tilbudgivern/scripts" BACKUP_SCRIPT="$SCRIPT_DIR/backup-databases.sh" PROJECT_DIR="/mnt/HC_Volume_103713257/tilbudgivern" ENV_FILE="$PROJECT_DIR/backend/.env" echo "==========================================" echo "Database Backup Setup for Alex User" echo "==========================================" echo "" # Check if running as alex CURRENT_USER=$(whoami) if [ "$CURRENT_USER" != "alex" ]; then echo "⚠️ Warning: You are running as '$CURRENT_USER', not 'alex'" echo " This setup is designed for the alex user" echo "" read -p "Continue anyway? (y/n) " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then exit 1 fi fi echo "Current user: $CURRENT_USER" echo "" # Check if backup script exists if [ ! -f "$BACKUP_SCRIPT" ]; then echo "❌ Error: Backup script not found at $BACKUP_SCRIPT" exit 1 fi # Make backup script executable echo "📝 Setting execute permissions on backup script..." chmod +x "$BACKUP_SCRIPT" echo "✅ Done" echo "" # Create directories with proper permissions echo "📁 Creating backup directories..." mkdir -p "$PROJECT_DIR/backups" mkdir -p "$PROJECT_DIR/logs/backups" chmod 755 "$PROJECT_DIR/backups" chmod 755 "$PROJECT_DIR/logs/backups" echo "✅ Done" echo "" # Check if .env exists and has backup vars if [ ! -f "$ENV_FILE" ]; then echo "❌ Error: .env file not found at $ENV_FILE" exit 1 fi if ! grep -q "DB_BACKUP_USER" "$ENV_FILE"; then echo "⚠️ Warning: DB_BACKUP_USER not found in .env" echo " Please add these variables to .env:" echo " DB_BACKUP_USER=tilbudgivern_service" echo " DB_BACKUP_PASSWORD=REDACTED_PASSWORD" echo " DB_BACKUP_HOST=127.0.0.1" exit 1 fi echo "✅ Database credentials found in .env" echo "" # Test database connection echo "🔌 Testing database connection..." if source "$ENV_FILE" && mysql -u "$DB_BACKUP_USER" -p"$DB_BACKUP_PASSWORD" -h "$DB_BACKUP_HOST" -e "SHOW DATABASES;" &>/dev/null; then echo "✅ Database connection successful" else echo "⚠️ Warning: Could not connect to database" echo " Database credentials may be incorrect" read -p "Continue anyway? (y/n) " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then exit 1 fi fi echo "" # Ask user for cron schedule echo "Select backup schedule:" echo "1) Daily at 02:00 (recommended)" echo "2) Daily at 00:00 (midnight)" echo "3) Daily at 03:00" echo "4) Every 6 hours" echo "5) Custom cron expression" read -p "Choose (1-5): " choice case $choice in 1) CRON_EXPR="0 2 * * *" DESCRIPTION="Daily at 02:00" ;; 2) CRON_EXPR="0 0 * * *" DESCRIPTION="Daily at 00:00" ;; 3) CRON_EXPR="0 3 * * *" DESCRIPTION="Daily at 03:00" ;; 4) CRON_EXPR="0 */6 * * *" DESCRIPTION="Every 6 hours" ;; 5) read -p "Enter cron expression: " CRON_EXPR DESCRIPTION="Custom: $CRON_EXPR" ;; *) echo "❌ Invalid choice" exit 1 ;; esac echo "" echo "⚙️ Setting up crontab..." echo "Schedule: $DESCRIPTION" echo "Command: $BACKUP_SCRIPT" echo "" # Check if cron job already exists if crontab -l 2>/dev/null | grep -q "backup-databases.sh"; then echo "⚠️ Cron job already exists. Updating..." # Remove old job and add new one (crontab -l 2>/dev/null | grep -v "backup-databases.sh"; echo "# Database backup - $DESCRIPTION"; echo "$CRON_EXPR $BACKUP_SCRIPT") | crontab - else # Add new cron job (crontab -l 2>/dev/null || echo ""; echo "# Database backup - $DESCRIPTION"; echo "$CRON_EXPR $BACKUP_SCRIPT") | crontab - fi echo "✅ Crontab updated successfully" echo "" # Verify crontab echo "Current crontab entries for backups:" echo "---" crontab -l 2>/dev/null | grep -i backup || echo "No backup entries found" echo "---" echo "" # Offer to test manually echo "Run first backup test?" read -p "Test backup now? (y/n) " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then echo "" echo "Running backup test..." echo "---" if source "$ENV_FILE" && $BACKUP_SCRIPT; then echo "---" echo "✅ Backup test successful!" else echo "---" echo "❌ Backup test failed. Check the error above." exit 1 fi fi echo "" echo "==========================================" echo "Setup Complete!" echo "==========================================" echo "" echo "Backup information:" echo " Backup directory: $PROJECT_DIR/backups" echo " Log file: $PROJECT_DIR/logs/backups/backup.log" echo " Retention: 7 days (auto-rotation)" echo " Schedule: $DESCRIPTION" echo "" echo "Useful commands:" echo " View backups: ls -lh $PROJECT_DIR/backups/" echo " View logs: tail -f $PROJECT_DIR/logs/backups/backup.log" echo " Check crontab: crontab -l" echo " Manual backup: $BACKUP_SCRIPT" echo "" echo "Next time you login, backups will run automatically!"