Files
tilbudgivern/scripts/setup-backups.sh
alexpolo1 9d1b1917a7 Add comprehensive database backup setup and scripts
- Created DATABASE_BACKUP_SETUP.md for detailed backup instructions
- Implemented backup-databases.sh for automated database backups
- Added logrotate configuration for managing backup logs
- Developed setup scripts for user-specific backup configurations
- Included error handling and logging in backup processes
- Established cron job setup for automated backups
- Provided examples and troubleshooting tips in documentation
2025-11-16 21:12:29 +00:00

142 lines
3.9 KiB
Bash
Executable File

#!/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"