8.0 KiB
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
- Website: http://localhost:8080
- phpMyAdmin: http://localhost:8081
- Mailhog: http://localhost:8025
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
- Use
docker-compose-dev.ymlfor development - Code changes are reflected immediately (volume mounting)
- Debug with xdebug enabled
- 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
- Development: Local Docker environment
- Staging: Production-like Docker setup
- 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:
- Check container logs:
docker logs <container_name> - Verify configuration files
- Review resource usage:
docker stats - 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