upskill-event-manager/wordpress-dev/bin/sync-production.sh

88 lines
No EOL
2.4 KiB
Bash
Executable file

#!/bin/bash
# Load environment variables
if [ ! -f ../.env ]; then
echo "Error: .env file not found!"
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" << EOF
Production Backup Manifest
========================
Date: $(date)
Server: $PROD_HOST
WordPress Path: $PROD_PATH
Database: $PROD_DB_NAME
Environment Details:
- WordPress Version: $(ssh "$PROD_SSH_USER@$PROD_HOST" "cd $PROD_PATH && wp core version")
- PHP Version: $(ssh "$PROD_SSH_USER@$PROD_HOST" "php -v | head -n 1")
- MySQL Version: $(ssh "$PROD_SSH_USER@$PROD_HOST" "mysql -V")
Backup Contents:
- WordPress files (excluding wp-config.php, cache, etc.)
- Database dump (database.sql)
- Production wp-config.php (for reference)
EOF
# Create latest symlink
rm -f ../backups/latest
ln -s "$BACKUP_DIR" ../backups/latest
echo -e "${GREEN}Production sync completed successfully!${NC}"
echo "Backup stored in: $BACKUP_DIR"