feat: v2.0.0 production-ready release with Redis, OPcache and Nginx optimizations

This commit is contained in:
Sebastian Palencsár
2025-06-21 00:08:09 +02:00
parent d3009617e4
commit e199772e92
55 changed files with 3408 additions and 3886 deletions

269
tests/final-test.sh Executable file
View File

@@ -0,0 +1,269 @@
#!/bin/bash
#
# Comprehensive test script for LEMP WordPress deployment
# Tests both Docker and VM/Bare Metal environments
#
# Usage: ./final-test.sh [docker|vm|all]
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Configuration
DOCKER_INVENTORY="inventory/docker.ini"
VM_INVENTORY="inventory/production.yml"
PLAYBOOK="playbooks/lemp-wordpress.yml"
TEST_TIMEOUT=300
# Functions
log_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
log_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
log_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
check_prerequisites() {
log_info "Checking prerequisites..."
# Check if ansible is installed
if ! command -v ansible-playbook &> /dev/null; then
log_error "ansible-playbook is not installed"
exit 1
fi
# Check if required files exist
local required_files=("$PLAYBOOK" "$DOCKER_INVENTORY" "vars/debian-family.yml")
for file in "${required_files[@]}"; do
if [[ ! -f "$file" ]]; then
log_error "Required file not found: $file"
exit 1
fi
done
log_success "Prerequisites check passed"
}
test_syntax() {
log_info "Testing playbook syntax..."
if ansible-playbook "$PLAYBOOK" --syntax-check > /dev/null 2>&1; then
log_success "Playbook syntax is valid"
else
log_error "Playbook syntax check failed"
ansible-playbook "$PLAYBOOK" --syntax-check
exit 1
fi
}
test_docker_environment() {
log_info "Testing Docker environment..."
# Check if Docker is available
if ! command -v docker &> /dev/null; then
log_warning "Docker not available, skipping Docker tests"
return 1
fi
# Start Docker environment
log_info "Starting Docker test environment..."
cd docker
if docker-compose up -d --build; then
log_success "Docker environment started"
else
log_error "Failed to start Docker environment"
cd ..
return 1
fi
cd ..
# Wait for SSH to be ready
log_info "Waiting for SSH to be ready..."
sleep 10
# Test SSH connectivity
if ansible all -i "$DOCKER_INVENTORY" -m ping --timeout=30; then
log_success "SSH connectivity to Docker container verified"
else
log_error "Cannot connect to Docker container via SSH"
return 1
fi
# Run playbook
log_info "Running LEMP WordPress playbook in Docker..."
if timeout "$TEST_TIMEOUT" ansible-playbook -i "$DOCKER_INVENTORY" "$PLAYBOOK"; then
log_success "Docker deployment completed successfully"
else
log_error "Docker deployment failed"
return 1
fi
# Test WordPress installation
log_info "Testing WordPress installation in Docker..."
sleep 5
# Test HTTP response
if curl -f -s http://localhost:8080 > /dev/null; then
log_success "WordPress is responding on http://localhost:8080"
else
log_error "WordPress is not responding on http://localhost:8080"
return 1
fi
# Test WordPress content
if curl -s http://localhost:8080 | grep -i "wordpress" > /dev/null; then
log_success "WordPress content detected"
else
log_warning "WordPress content not detected (might be redirect)"
fi
# Test admin area
if curl -f -s http://localhost:8080/wp-admin/ > /dev/null; then
log_success "WordPress admin area accessible"
else
log_warning "WordPress admin area not accessible (normal for fresh install)"
fi
# Cleanup Docker environment
log_info "Cleaning up Docker environment..."
cd docker
docker-compose down -v
cd ..
log_success "Docker environment test completed successfully"
return 0
}
test_vm_environment() {
log_info "Testing VM environment configuration..."
# Check if VM inventory exists
if [[ ! -f "$VM_INVENTORY" ]]; then
log_warning "VM inventory file not found: $VM_INVENTORY"
log_warning "Skipping VM tests - create inventory file for VM testing"
return 1
fi
# Test inventory file syntax
if ansible-inventory -i "$VM_INVENTORY" --list > /dev/null 2>&1; then
log_success "VM inventory syntax is valid"
else
log_error "VM inventory syntax check failed"
return 1
fi
# Test VM connectivity (without actually running playbook)
log_info "Testing VM connectivity..."
if ansible all -i "$VM_INVENTORY" -m ping --timeout=10; then
log_success "VM connectivity verified"
# Optional: Run actual deployment if user confirms
read -p "Run full deployment on VM? (y/N): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
log_info "Running LEMP WordPress playbook on VM..."
if ansible-playbook -i "$VM_INVENTORY" "$PLAYBOOK" --ask-become-pass; then
log_success "VM deployment completed successfully"
# Extract VM IP for testing
VM_IP=$(ansible-inventory -i "$VM_INVENTORY" --list | jq -r '.webservers.hosts[0]')
if [[ "$VM_IP" != "null" && "$VM_IP" != "" ]]; then
log_info "Testing WordPress installation on VM ($VM_IP)..."
if curl -f -s "http://$VM_IP" > /dev/null; then
log_success "WordPress is responding on http://$VM_IP"
else
log_warning "WordPress not responding (might need time to start)"
fi
fi
else
log_error "VM deployment failed"
return 1
fi
else
log_info "Skipping VM deployment (connectivity test passed)"
fi
else
log_warning "VM not reachable - check inventory configuration"
return 1
fi
log_success "VM environment test completed"
return 0
}
show_environment_info() {
log_info "Environment Detection Test"
echo
echo "This test verifies the automatic environment detection logic:"
echo "1. Docker environment: Detects /.dockerenv file"
echo "2. VM/Bare Metal: All other systems"
echo
echo "The playbook will automatically:"
echo "- Set wp_site_url to http://localhost:8080 in Docker"
echo "- Set wp_site_url to http://server-ip in VM/Bare Metal"
echo "- Allow manual override of both environment and URL"
echo
}
run_tests() {
local test_type="${1:-all}"
show_environment_info
check_prerequisites
test_syntax
case "$test_type" in
"docker")
test_docker_environment
;;
"vm")
test_vm_environment
;;
"all")
test_docker_environment
echo
test_vm_environment
;;
*)
log_error "Invalid test type: $test_type"
echo "Usage: $0 [docker|vm|all]"
exit 1
;;
esac
}
# Main execution
main() {
echo "========================================"
echo " LEMP WordPress Deployment Test Suite"
echo "========================================"
echo
run_tests "$1"
echo
log_success "Test suite completed!"
echo
echo "Next steps:"
echo "1. Deploy to production server with: ansible-playbook -i inventory/production.yml playbooks/lemp-wordpress.yml"
echo "2. Customize variables in inventory files"
echo "3. Enable SSL with: -e 'enable_ssl=true'"
echo "4. Check documentation: docs/multi-environment-deployment.md"
}
# Run main function with all arguments
main "$@"