This commit introduces a more reliable and consistent approach to setting up the development environment using backups: - Add setup-from-backup.sh script for environment setup from existing backups - Standardize script naming and organization - Move obsolete scripts to bin/obsolete directory - Update documentation with new workflow instructions - Create migration guide for transitioning to new workflow - Update Memory Bank with workflow improvements The new workflow provides: - More reliable environment setup - Faster setup process - Offline development capability - Consistent development environments across team members Breaking changes: - setup-dev.sh is replaced by setup-from-backup.sh - sync-and-setup.sh is replaced by separate scripts - verify-with-wpcli.sh is no longer used Migration path is documented in MIGRATION_GUIDE.md
217 lines
No EOL
6 KiB
Bash
Executable file
217 lines
No EOL
6 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'
|
|
|
|
# Default values
|
|
SETUP_MODE="local"
|
|
SKIP_CONFIRM=false
|
|
|
|
# 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
|
|
}
|
|
|
|
# Function to show usage
|
|
show_usage() {
|
|
echo "Usage: $0 [OPTIONS]"
|
|
echo "Options:"
|
|
echo " -m, --mode MODE Setup mode: 'local' or 'production' (default: local)"
|
|
echo " -y, --yes Skip confirmation prompts"
|
|
echo " -h, --help Show this help message"
|
|
echo ""
|
|
echo "Modes:"
|
|
echo " local Set up a fresh WordPress installation with test data"
|
|
echo " production Sync data from production environment"
|
|
}
|
|
|
|
# Parse command line arguments
|
|
while [[ $# -gt 0 ]]; do
|
|
case "$1" in
|
|
-m|--mode)
|
|
SETUP_MODE="$2"
|
|
shift 2
|
|
;;
|
|
-y|--yes)
|
|
SKIP_CONFIRM=true
|
|
shift
|
|
;;
|
|
-h|--help)
|
|
show_usage
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo "Unknown option: $1"
|
|
show_usage
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# Validate setup mode
|
|
if [[ "$SETUP_MODE" != "local" && "$SETUP_MODE" != "production" ]]; then
|
|
echo -e "${RED}Error: Invalid setup mode. Use 'local' or 'production'${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# Function to confirm action
|
|
confirm_action() {
|
|
if [ "$SKIP_CONFIRM" = true ]; then
|
|
return 0
|
|
fi
|
|
|
|
read -p "$1 [y/N] " response
|
|
case "$response" in
|
|
[yY][eE][sS]|[yY])
|
|
return 0
|
|
;;
|
|
*)
|
|
return 1
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Stop and remove existing containers
|
|
echo "Stopping existing containers..."
|
|
docker-compose down -v
|
|
check_status "Container cleanup"
|
|
|
|
# Start fresh containers
|
|
echo "Starting containers..."
|
|
docker-compose up -d
|
|
check_status "Container startup"
|
|
|
|
# Wait for MySQL to be ready
|
|
echo "Waiting for MySQL to be ready..."
|
|
sleep 10
|
|
|
|
if [ "$SETUP_MODE" = "production" ]; then
|
|
# Check if backup exists
|
|
if [ ! -d "../backups/latest" ]; then
|
|
echo -e "${RED}Error: No backup found. Please run sync-production.sh first.${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# Import database from backup
|
|
echo "Importing production database..."
|
|
cat "../backups/latest/database.sql" | docker-compose exec -T db mysql -u"$DEV_DB_USER" -p"$DEV_DB_PASSWORD" "$DEV_DB_NAME"
|
|
check_status "Database import"
|
|
|
|
# Copy WordPress files
|
|
echo "Copying WordPress files..."
|
|
cp -r ../backups/latest/wordpress/* ../wordpress/
|
|
check_status "WordPress files copy"
|
|
else
|
|
# Local setup mode
|
|
echo "Setting up fresh WordPress installation..."
|
|
|
|
# Create database
|
|
echo "Creating database..."
|
|
docker-compose exec db mysql -u"$DEV_DB_USER" -p"$DEV_DB_PASSWORD" -e "CREATE DATABASE IF NOT EXISTS $DEV_DB_NAME;"
|
|
check_status "Database creation"
|
|
|
|
# Install WordPress
|
|
echo "Installing WordPress..."
|
|
docker-compose exec wordpress wp core download --version=6.7.2 --allow-root
|
|
check_status "WordPress core download"
|
|
|
|
docker-compose exec wordpress wp core install \
|
|
--url=http://localhost:8080 \
|
|
--title="HVAC Training Events" \
|
|
--admin_user="$WP_ADMIN_USER" \
|
|
--admin_password="$WP_ADMIN_PASS" \
|
|
--admin_email="admin@example.com" \
|
|
--allow-root
|
|
check_status "WordPress installation"
|
|
|
|
# Install and activate required plugins
|
|
echo "Installing required plugins..."
|
|
REQUIRED_PLUGINS=(
|
|
"the-events-calendar"
|
|
"events-calendar-pro"
|
|
"event-tickets"
|
|
"event-tickets-plus"
|
|
"tribe-community-events"
|
|
)
|
|
|
|
for plugin in "${REQUIRED_PLUGINS[@]}"; do
|
|
echo "Installing plugin: $plugin"
|
|
docker-compose exec wordpress wp plugin install "$plugin" --allow-root
|
|
docker-compose exec wordpress wp plugin activate "$plugin" --allow-root
|
|
check_status "Plugin $plugin installation"
|
|
done
|
|
|
|
# Generate test data
|
|
echo "Generating test data..."
|
|
docker-compose exec wordpress wp user create test_trainer test.trainer@example.com --role=author --user_pass=SecurePass123! --allow-root
|
|
check_status "Test trainer creation"
|
|
fi
|
|
|
|
# Update wp-config.php
|
|
echo "Updating wp-config.php..."
|
|
cat > ../wordpress/wp-config.php << EOF
|
|
<?php
|
|
define('DB_NAME', '$DEV_DB_NAME');
|
|
define('DB_USER', '$DEV_DB_USER');
|
|
define('DB_PASSWORD', '$DEV_DB_PASSWORD');
|
|
define('DB_HOST', 'db');
|
|
define('WP_DEBUG', true);
|
|
define('WP_DEBUG_LOG', true);
|
|
define('WP_DEBUG_DISPLAY', false);
|
|
|
|
\$table_prefix = 'wp_';
|
|
|
|
if ( ! defined('ABSPATH') ) {
|
|
define('ABSPATH', dirname(__FILE__) . '/');
|
|
}
|
|
|
|
require_once ABSPATH . 'wp-settings.php';
|
|
EOF
|
|
check_status "wp-config.php creation"
|
|
|
|
# Update site URL
|
|
echo "Updating WordPress URLs..."
|
|
docker-compose exec wordpress wp option update home "http://localhost:8080" --allow-root
|
|
docker-compose exec wordpress wp option update siteurl "http://localhost:8080" --allow-root
|
|
check_status "URL updates"
|
|
|
|
# Clear cache
|
|
echo "Clearing caches..."
|
|
docker-compose exec wordpress wp cache flush --allow-root
|
|
docker-compose exec wordpress rm -rf wp-content/cache/*
|
|
check_status "Cache clearing"
|
|
|
|
# Set correct permissions
|
|
echo "Setting file permissions..."
|
|
docker-compose exec wordpress chown -R www-data:www-data /var/www/html
|
|
check_status "Permission updates"
|
|
|
|
echo -e "${GREEN}Development environment setup completed!${NC}"
|
|
echo -e "${YELLOW}Mode: $SETUP_MODE${NC}"
|
|
echo -e "${YELLOW}Access your site at: http://localhost:8080${NC}"
|
|
echo -e "${YELLOW}Access phpMyAdmin at: http://localhost:8081${NC}"
|
|
|
|
if [ "$SETUP_MODE" = "local" ]; then
|
|
echo -e "\n${YELLOW}Test Credentials:${NC}"
|
|
echo "Admin User: $WP_ADMIN_USER"
|
|
echo "Admin Password: $WP_ADMIN_PASS"
|
|
echo "Test Trainer Email: test.trainer@example.com"
|
|
echo "Test Trainer Password: SecurePass123!"
|
|
fi |