#!/bin/bash ############################################################################### # Quick Setup Script for Database Backups # Run this script to automatically set up crontab ############################################################################### 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" echo "==========================================" echo "Database Backup Setup Script" echo "==========================================" 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 echo "📁 Creating backup directories..." mkdir -p "$PROJECT_DIR/backups" mkdir -p "$PROJECT_DIR/logs/backups" echo "✅ Done" echo "" # Check if .env exists if [ ! -f "$PROJECT_DIR/backend/.env" ]; then echo "⚠️ Warning: .env file not found at $PROJECT_DIR/backend/.env" echo " Please create it first with DB_USER, DB_PASSWORD, DB_HOST" read -p "Continue anyway? (y/n) " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then exit 1 fi fi # 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: source $PROJECT_DIR/backend/.env && $BACKUP_SCRIPT" echo "" # Check if cron job already exists if sudo crontab -l 2>/dev/null | grep -q "$BACKUP_SCRIPT"; then echo "⚠️ Cron job already exists. Updating..." # Remove old job (sudo crontab -l 2>/dev/null | grep -v "$BACKUP_SCRIPT" | sudo crontab -) || true fi # Add new cron job (sudo crontab -l 2>/dev/null || echo ""; echo "# Database backup - $DESCRIPTION"; echo "$CRON_EXPR source $PROJECT_DIR/backend/.env && $BACKUP_SCRIPT") | sudo crontab - echo "✅ Crontab updated successfully" echo "" # Verify crontab echo "Current crontab entries for backups:" sudo crontab -l 2>/dev/null | grep -i backup || echo "No backup entries found" echo "" # Ask about logrotate read -p "Install logrotate configuration? (y/n) " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then echo "Installing logrotate configuration..." sudo cp "$PROJECT_DIR/infra/logrotate-backups.conf" /etc/logrotate.d/tilbudgivern-backups sudo chmod 644 /etc/logrotate.d/tilbudgivern-backups echo "✅ Logrotate configuration installed" else echo "Skipping logrotate installation" fi echo "" echo "==========================================" echo "Setup Complete!" echo "==========================================" echo "" echo "Next steps:" echo "1. Update .env with database credentials:" echo " DB_USER=root" echo " DB_PASSWORD=your_password" echo " DB_HOST=localhost" echo "" echo "2. Test the backup manually:" echo " source $PROJECT_DIR/backend/.env && $BACKUP_SCRIPT" echo "" echo "3. View backup logs:" echo " tail -f $PROJECT_DIR/logs/backups/backup.log" echo "" echo "4. View backups:" echo " ls -lh $PROJECT_DIR/backups/" echo "" echo "For more info, see: $PROJECT_DIR/docs/DATABASE_BACKUP_SETUP.md"