#!/bin/bash # Load environment variables from current directory if [ ! -f .env ]; then echo "Error: .env file not found in current directory!" exit 1 fi source .env # Colors for output GREEN='\033[0;32m' RED='\033[0;31m' YELLOW='\033[1;33m' NC='\033[0m' # Function to check if a command was successful check_status() { if [ $? -eq 0 ]; then echo -e "${GREEN}✓ $1${NC}" return 0 else echo -e "${RED}✗ $1${NC}" return 1 fi } # Create backup directory BACKUP_DIR="backups/$(date +%Y%m%d_%H%M%S)" mkdir -p "$BACKUP_DIR" echo -e "${YELLOW}Creating backup in: $BACKUP_DIR${NC}" # Test SSH connection echo "Testing SSH connection..." if ! ssh -q "$PROD_SSH_USER@$PROD_HOST" exit; then echo -e "${RED}Error: Cannot connect to production server${NC}" exit 1 fi check_status "SSH connection test" # Download WordPress files echo "Downloading WordPress files..." rsync -avz --exclude='wp-config.php' \ --exclude='.git/' \ --exclude='node_modules/' \ --exclude='*.log' \ --exclude='wp-content/cache/' \ --exclude='wp-content/uploads/cache/' \ "$PROD_SSH_USER@$PROD_HOST:$PROD_PATH/" "$BACKUP_DIR/wordpress/" check_status "WordPress files download" # Export and download database echo "Exporting production database..." ssh "$PROD_SSH_USER@$PROD_HOST" "cd $PROD_PATH && wp db export - --add-drop-table" > "$BACKUP_DIR/database.sql" check_status "Database export" # Download wp-config.php (for reference) echo "Downloading wp-config.php..." scp "$PROD_SSH_USER@$PROD_HOST:$PROD_PATH/wp-config.php" "$BACKUP_DIR/wp-config.php.prod" check_status "wp-config.php download" # Create manifest file echo "Creating backup manifest..." cat > "$BACKUP_DIR/manifest.txt" <