Files
ukaiautomation/DOCKER-DEPLOYMENT-GUIDE.md

8.0 KiB

UK Data Services - Docker Deployment Guide

Overview

This guide covers deploying the UK Data Services website using Docker containers for development, staging, and production environments.

Prerequisites

  • Docker Engine 20.10+
  • Docker Compose 2.0+
  • 2GB+ RAM available
  • 10GB+ disk space

Quick Start (Development)

1. Clone Repository

git clone <your-repo-url>
cd ukdataservices

2. Start Development Environment

# Start all services
docker-compose -f docker-compose-dev.yml up -d

# View logs
docker-compose -f docker-compose-dev.yml logs -f web

# Stop services
docker-compose -f docker-compose-dev.yml down

3. Access Services

Production Deployment

1. Environment Setup

# Create production directories
mkdir -p {logs,uploads,cache,backups,ssl}

# Set permissions
chmod 755 logs uploads cache backups
chmod 700 ssl

2. Configure Environment Variables

Create .env file:

# Database
DB_ROOT_PASSWORD=your_secure_root_password
DB_PASSWORD=your_secure_web_password

# Security
SECURITY_SALT=your_unique_salt_here
API_SECRET_KEY=your_api_secret_here

# Application
SITE_URL=https://ukdataservices.co.uk
CONTACT_EMAIL=info@ukdataservices.co.uk
ANALYTICS_ID=your_ga_id

3. SSL Certificates

# Place SSL certificates in ssl/ directory
ssl/
├── cert.pem
├── privkey.pem
└── chain.pem

4. Deploy Production

# Build and start services
docker-compose -f docker-compose-production.yml up -d

# Check status
docker-compose -f docker-compose-production.yml ps

# View logs
docker-compose -f docker-compose-production.yml logs -f

Container Management

Building Images

# Build optimized production image
docker build -f Dockerfile-optimized -t ukds-web:latest .

# Build development image
docker build -t ukds-web:dev .

Container Operations

# Execute commands in containers
docker exec -it ukds-web bash
docker exec -it ukds-database mysql -u root -p

# View container logs
docker logs ukds-web -f
docker logs ukds-database -f

# Monitor resource usage
docker stats

Database Management

# Create database backup
docker exec ukds-database mysqldump -u root -p ukdataservices > backup.sql

# Restore database
docker exec -i ukds-database mysql -u root -p ukdataservices < backup.sql

# Access MySQL shell
docker exec -it ukds-database mysql -u root -p

Scaling and Load Balancing

Horizontal Scaling

# Scale web containers
docker-compose -f docker-compose-production.yml up -d --scale web=3

# Use with load balancer (nginx, traefik)

Load Balancer Configuration (nginx)

upstream ukds_backend {
    server 127.0.0.1:8080;
    server 127.0.0.1:8081;
    server 127.0.0.1:8082;
}

server {
    listen 80;
    server_name ukdataservices.co.uk;
    
    location / {
        proxy_pass http://ukds_backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Monitoring and Maintenance

Health Checks

# Check container health
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"

# Application health check
curl -f http://localhost/health-check.php || echo "Health check failed"

Log Management

# View application logs
tail -f logs/apache_access.log
tail -f logs/apache_error.log
tail -f logs/php_errors.log

# Rotate logs
docker exec ukds-web logrotate /etc/logrotate.conf

Performance Monitoring

# Monitor container resources
docker stats ukds-web ukds-database ukds-redis

# Database performance
docker exec ukds-database mysqladmin -u root -p status
docker exec ukds-database mysqladmin -u root -p processlist

Backup and Recovery

Automated Backups

The production setup includes automated daily backups:

  • Database backups: backups/ukds_YYYYMMDD_HHMMSS.sql
  • Log archives: backups/logs_YYYYMMDD_HHMMSS.tar.gz
  • Retention: 7 days

Manual Backup

# Full site backup
tar -czf ukds_backup_$(date +%Y%m%d).tar.gz \
  --exclude='node_modules' \
  --exclude='.git' \
  --exclude='cache/*' \
  .

# Database only
docker exec ukds-database mysqldump -u root -p --all-databases > full_backup.sql

Recovery Procedures

# Restore from backup
docker-compose -f docker-compose-production.yml down
docker volume rm ukdataservices_mysql_data
docker-compose -f docker-compose-production.yml up -d database
docker exec -i ukds-database mysql -u root -p < backup.sql
docker-compose -f docker-compose-production.yml up -d

Security Best Practices

Container Security

  • Non-root user execution
  • Read-only file systems where possible
  • Minimal base images
  • Regular security updates

Network Security

# Isolate networks
docker network create --driver bridge ukds-isolated

# Firewall rules
ufw allow 80/tcp
ufw allow 443/tcp
ufw deny 3306/tcp

SSL/TLS Configuration

  • Use Let's Encrypt for certificates
  • Enable HSTS headers
  • Strong cipher suites
  • Regular certificate renewal

Troubleshooting

Common Issues

Container Won't Start

# Check logs
docker logs ukds-web

# Check disk space
df -h

# Check memory
free -m

Database Connection Failed

# Verify database container
docker exec ukds-database mysqladmin -u root -p ping

# Check network connectivity
docker exec ukds-web ping database

# Verify credentials
docker exec ukds-web env | grep DB_

Performance Issues

# Monitor resource usage
docker stats

# Check PHP errors
tail -f logs/php_errors.log

# Database slow queries
docker exec ukds-database tail -f /var/log/mysql/slow.log

Performance Optimization

PHP-FPM Configuration

# In docker/php.ini
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35

MySQL Tuning

-- Check MySQL status
SHOW STATUS LIKE 'Threads_connected';
SHOW STATUS LIKE 'Questions';
SHOW STATUS LIKE 'Uptime';

-- Optimize tables
OPTIMIZE TABLE contact_submissions;
OPTIMIZE TABLE quote_requests;

Redis Cache

# Monitor Redis
docker exec ukds-redis redis-cli info memory
docker exec ukds-redis redis-cli info stats

Development Workflow

Local Development

  1. Use docker-compose-dev.yml for development
  2. Code changes are reflected immediately (volume mounting)
  3. Debug with xdebug enabled
  4. Use Mailhog for email testing

Testing

# Run tests in container
docker exec ukds-web ./vendor/bin/phpunit

# PHP syntax check
find . -name "*.php" -exec docker exec ukds-web php -l {} \;

Deployment Pipeline

  1. Development: Local Docker environment
  2. Staging: Production-like Docker setup
  3. Production: Optimized Docker with monitoring

Configuration Files Reference

Environment Variables

Variable Description Default
DB_HOST Database hostname database
DB_NAME Database name ukdataservices
DB_USER Database username webuser
DB_PASSWORD Database password Required
SITE_URL Site URL http://localhost
DEBUG_MODE Debug mode 0

Volume Mounts

Host Path Container Path Purpose
./logs /var/www/html/logs Application logs
./uploads /var/www/html/uploads File uploads
./cache /var/www/html/cache Application cache
./ssl /etc/ssl/certs/ukds SSL certificates

Support

For deployment issues:

  1. Check container logs: docker logs <container_name>
  2. Verify configuration files
  3. Review resource usage: docker stats
  4. Contact: dev@ukdataservices.co.uk

Updates and Maintenance

Regular Tasks

  • Weekly: Review logs and performance
  • Monthly: Update container images
  • Quarterly: Security audit and updates

Update Procedure

# Pull latest images
docker-compose -f docker-compose-production.yml pull

# Rebuild and restart
docker-compose -f docker-compose-production.yml up -d --build

# Verify deployment
curl -f https://ukdataservices.co.uk/health-check.php