324 lines
9.1 KiB
Markdown
324 lines
9.1 KiB
Markdown
# Multi-Environment Deployment Guide
|
|
|
|
This guide explains how to deploy the LEMP WordPress stack in different environments using Docker for testing and production servers for live deployment.
|
|
|
|
## 🎯 Available Deployment Modes
|
|
|
|
### Basic LEMP Mode
|
|
- **Playbook**: `playbooks/lemp-wordpress.yml`
|
|
- **Features**: Nginx, MySQL, PHP, WordPress, SSL support
|
|
- **Use Case**: Standard WordPress sites
|
|
|
|
### Ultimate Performance Mode
|
|
- **Playbook**: `playbooks/lemp-wordpress-ultimate.yml`
|
|
- **Features**: Basic + Redis caching + PHP OPcache + Nginx optimization
|
|
- **Use Case**: High-traffic WordPress sites
|
|
|
|
## 🔧 Environment Setup
|
|
|
|
### 1. Docker Testing Environment
|
|
|
|
**Prerequisites:**
|
|
```bash
|
|
cd docker/
|
|
docker-compose up -d
|
|
```
|
|
|
|
**Inventory File (`inventory/docker.yml`):**
|
|
```yaml
|
|
wordpress_servers:
|
|
hosts:
|
|
docker-test:
|
|
ansible_host: localhost
|
|
ansible_port: 2222
|
|
ansible_user: ansible
|
|
ansible_ssh_pass: ansible123
|
|
ansible_become_pass: ansible123
|
|
domain_name: localhost
|
|
|
|
# SSL Configuration (usually disabled for testing)
|
|
ssl_enabled: false
|
|
|
|
# WordPress Database (Test credentials)
|
|
mysql_root_password: "test_root_password"
|
|
wordpress_db_name: "wordpress"
|
|
wordpress_db_user: "wp_user"
|
|
wordpress_db_password: "test_wp_password"
|
|
|
|
# WordPress Admin (Test credentials)
|
|
wp_admin_user: "admin"
|
|
wp_admin_password: "test_admin_password"
|
|
wp_admin_email: "admin@localhost"
|
|
wp_site_title: "Test WordPress Site"
|
|
|
|
# Ultimate Features (for testing Ultimate-Playbook)
|
|
enable_redis: true
|
|
enable_opcache: true
|
|
```
|
|
|
|
**Deploy Commands:**
|
|
```bash
|
|
# Test Basic LEMP deployment
|
|
ansible-playbook -i inventory/docker.yml playbooks/lemp-wordpress.yml
|
|
|
|
# Test Ultimate Performance deployment
|
|
ansible-playbook -i inventory/docker.yml playbooks/lemp-wordpress-ultimate.yml
|
|
```
|
|
|
|
**Access:** http://localhost:8080
|
|
|
|
### 2. Production Server Deployment
|
|
|
|
**Inventory File (`inventory/production.yml`):**
|
|
```yaml
|
|
wordpress_servers:
|
|
hosts:
|
|
your-server.example.com:
|
|
ansible_host: YOUR_SERVER_IP
|
|
ansible_user: your_user
|
|
domain_name: example.com
|
|
|
|
# SSL Configuration
|
|
ssl_enabled: true # Enable HTTPS
|
|
ssl_email: admin@example.com
|
|
|
|
# WordPress Database (CHANGE THESE!)
|
|
mysql_root_password: "CHANGE_ME_ROOT_PASSWORD"
|
|
wordpress_db_name: "wordpress"
|
|
wordpress_db_user: "wp_user"
|
|
wordpress_db_password: "CHANGE_ME_WP_PASSWORD"
|
|
|
|
# WordPress Admin (CHANGE THESE!)
|
|
wp_admin_user: "admin"
|
|
wp_admin_password: "CHANGE_ME_ADMIN_PASSWORD"
|
|
wp_admin_email: "admin@example.com"
|
|
wp_site_title: "My WordPress Site"
|
|
|
|
# Ultimate Performance Features
|
|
enable_redis: true # For Ultimate playbook
|
|
enable_opcache: true # For Ultimate playbook
|
|
```
|
|
|
|
**Deploy Commands:**
|
|
```bash
|
|
# Basic LEMP deployment
|
|
ansible-playbook -i inventory/production.yml playbooks/lemp-wordpress.yml
|
|
|
|
# Ultimate Performance deployment
|
|
ansible-playbook -i inventory/production.yml playbooks/lemp-wordpress-ultimate.yml
|
|
```
|
|
|
|
### 3. Staging Environment
|
|
|
|
**Inventory File (`inventory/staging.yml`):**
|
|
```yaml
|
|
wordpress_servers:
|
|
hosts:
|
|
staging.example.com:
|
|
ansible_host: 192.168.1.100
|
|
ansible_user: deploy
|
|
domain_name: staging.example.com
|
|
|
|
# SSL Configuration
|
|
ssl_enabled: false # Disable for staging
|
|
|
|
# WordPress Database
|
|
mysql_root_password: "staging_root_password"
|
|
wordpress_db_name: "wordpress_staging"
|
|
wordpress_db_user: "wp_staging"
|
|
wordpress_db_password: "staging_wp_password"
|
|
|
|
# WordPress Admin
|
|
wp_admin_user: "staging_admin"
|
|
wp_admin_password: "staging_admin_password"
|
|
wp_admin_email: "staging@example.com"
|
|
wp_site_title: "Staging WordPress Site"
|
|
|
|
# Ultimate Features (test performance features)
|
|
enable_redis: true
|
|
enable_opcache: true
|
|
```
|
|
|
|
## 🎛️ Advanced Configuration
|
|
|
|
### 1. SSL/HTTPS Setup
|
|
|
|
**Enable SSL during deployment:**
|
|
```bash
|
|
# Basic LEMP with SSL
|
|
ansible-playbook -i inventory/production.yml playbooks/lemp-wordpress.yml \
|
|
-e "ssl_enabled=true" -e "ssl_email=your-email@domain.com"
|
|
|
|
# Ultimate Performance with SSL
|
|
ansible-playbook -i inventory/production.yml playbooks/lemp-wordpress-ultimate.yml \
|
|
-e "ssl_enabled=true" -e "ssl_email=your-email@domain.com"
|
|
```
|
|
|
|
### 2. Performance Tuning Overrides
|
|
|
|
**Custom PHP settings:**
|
|
```bash
|
|
ansible-playbook -i inventory/production.yml playbooks/lemp-wordpress-ultimate.yml \
|
|
-e "php_memory_limit=1G" \
|
|
-e "php_upload_max_filesize=256M"
|
|
```
|
|
|
|
**Custom Redis settings:**
|
|
```bash
|
|
ansible-playbook -i inventory/production.yml playbooks/lemp-wordpress-ultimate.yml \
|
|
-e "redis_maxmemory=512mb"
|
|
```
|
|
|
|
### 3. Security with Ansible Vault
|
|
|
|
**For production environments, use Ansible Vault:**
|
|
|
|
**Create vault file:**
|
|
```bash
|
|
mkdir -p group_vars/all/
|
|
ansible-vault create group_vars/all/vault.yml
|
|
```
|
|
|
|
**Update inventory to use vault variables:**
|
|
```yaml
|
|
wordpress_servers:
|
|
hosts:
|
|
your-server.example.com:
|
|
# ... other settings ...
|
|
|
|
# Database (using vault)
|
|
mysql_root_password: "{{ vault_mysql_root_password }}"
|
|
wordpress_db_password: "{{ vault_wordpress_db_password }}"
|
|
wp_admin_password: "{{ vault_wp_admin_password }}"
|
|
```
|
|
|
|
**Deploy with vault:**
|
|
```bash
|
|
ansible-playbook -i inventory/production.yml playbooks/lemp-wordpress.yml --ask-vault-pass
|
|
```
|
|
|
|
See [Vault Security Guide](vault.md) for detailed instructions.
|
|
|
|
## 🚀 Common Deployment Scenarios
|
|
|
|
### Scenario 1: Local Development & Testing
|
|
```bash
|
|
# Start Docker environment
|
|
cd docker/
|
|
docker-compose up -d
|
|
|
|
# Test Basic LEMP
|
|
ansible-playbook -i inventory/docker.yml playbooks/lemp-wordpress.yml
|
|
|
|
# Test Ultimate Performance
|
|
ansible-playbook -i inventory/docker.yml playbooks/lemp-wordpress-ultimate.yml
|
|
|
|
# Access: http://localhost:8080
|
|
```
|
|
|
|
### Scenario 2: Cloud Server (DigitalOcean, AWS, Linode)
|
|
```bash
|
|
# Configure inventory/production.yml with your server details
|
|
|
|
# Deploy with SSL for production
|
|
ansible-playbook -i inventory/production.yml playbooks/lemp-wordpress-ultimate.yml \
|
|
-e "ssl_enabled=true" -e "ssl_email=admin@yourdomain.com"
|
|
```
|
|
|
|
### Scenario 3: On-Premises Server
|
|
```bash
|
|
# Deploy without SSL for internal network
|
|
ansible-playbook -i inventory/production.yml playbooks/lemp-wordpress.yml \
|
|
-e "ssl_enabled=false"
|
|
```
|
|
|
|
### Scenario 4: High-Performance WordPress
|
|
```bash
|
|
# Ultimate deployment with custom performance settings
|
|
ansible-playbook -i inventory/production.yml playbooks/lemp-wordpress-ultimate.yml \
|
|
-e "php_memory_limit=1G" \
|
|
-e "redis_maxmemory=512mb" \
|
|
-e "ssl_enabled=true"
|
|
```
|
|
|
|
## 🔍 Troubleshooting Multi-Environment Issues
|
|
|
|
### Problem: Docker container not accessible
|
|
**Solution:** Check Docker setup
|
|
```bash
|
|
cd docker/
|
|
docker-compose ps
|
|
docker-compose logs
|
|
```
|
|
|
|
### Problem: SSH connection to production server fails
|
|
**Solution:** Verify SSH settings
|
|
```bash
|
|
# Test SSH connection
|
|
ssh -p 22 your_user@your_server_ip
|
|
|
|
# Check inventory file SSH settings
|
|
ansible all -i inventory/production.yml -m ping
|
|
```
|
|
|
|
### Problem: SSL certificate generation fails
|
|
**Solution:** Check domain and email
|
|
```bash
|
|
# Ensure domain points to your server
|
|
nslookup yourdomain.com
|
|
|
|
# Deploy with valid email
|
|
ansible-playbook -i inventory/production.yml playbooks/lemp-wordpress.yml \
|
|
-e "ssl_enabled=true" -e "ssl_email=valid-email@domain.com"
|
|
```
|
|
|
|
### Problem: Redis not working in Ultimate mode
|
|
**Solution:** Check if Ultimate playbook is being used
|
|
```bash
|
|
# Make sure you're using the Ultimate playbook
|
|
ansible-playbook -i inventory/production.yml playbooks/lemp-wordpress-ultimate.yml
|
|
```
|
|
|
|
## 📝 Best Practices
|
|
|
|
### Development
|
|
1. **Always test in Docker first** before deploying to production
|
|
2. **Use docker.yml inventory** for local testing
|
|
3. **Enable all Ultimate features** in Docker for testing
|
|
|
|
### Production
|
|
1. **Use strong passwords** or Ansible Vault
|
|
2. **Enable SSL/HTTPS** for production sites
|
|
3. **Choose appropriate deployment mode** (Basic vs Ultimate)
|
|
4. **Regular backups** of database and files
|
|
5. **Keep system updated** with security patches
|
|
|
|
### Security
|
|
1. **Never commit real passwords** to Git
|
|
2. **Use SSH keys** instead of passwords
|
|
3. **Enable firewall** on production servers
|
|
4. **Regular security updates**
|
|
|
|
## 🎯 Quick Reference
|
|
|
|
### Available Playbooks
|
|
| Playbook | Features | Use Case |
|
|
|----------|----------|----------|
|
|
| `lemp-wordpress.yml` | Basic LEMP + WordPress + SSL | Small to medium sites |
|
|
| `lemp-wordpress-ultimate.yml` | Basic + Redis + OPcache + Optimization | High-traffic sites |
|
|
|
|
### Environment Files
|
|
| File | Purpose | Use Case |
|
|
|------|---------|----------|
|
|
| `inventory/docker.yml` | Docker testing | Development/Testing |
|
|
| `inventory/production.yml` | Production server | Live deployment |
|
|
|
|
### Key Variables
|
|
| Variable | Purpose | Example |
|
|
|----------|---------|---------|
|
|
| `ssl_enabled` | Enable/disable HTTPS | `true` or `false` |
|
|
| `enable_redis` | Enable Redis caching | `true` (Ultimate only) |
|
|
| `enable_opcache` | Enable PHP OPcache | `true` (Ultimate only) |
|
|
| `mysql_root_password` | MySQL root password | `"SecurePassword123!"` |
|
|
| `wp_admin_password` | WordPress admin password | `"AdminPassword456!"` |
|