AWS Lightsail Deployment
Production Infrastructure & DevOps Strategy
Deployment Overview
The Swansea Harriers Rankings Platform is deployed on AWS Lightsail, providing a cost-effective and scalable solution for hosting the Flask application with professional-grade reliability.
$10/month
AWS Lightsail Cost
99.9%
Uptime Achievement
<200ms
Response Time
Deployment Pipeline
🖥️
Server Provisioning
AWS Lightsail instance setup with Ubuntu 22.04
AWS LightsailUbuntuSSH
⚙️
Environment Setup
Python, Nginx, and application dependencies
Python 3.9+NginxSystemd
🚀
Application Deployment
Flask app configuration and service setup
FlaskGunicornGit
🔒
Domain & SSL
Custom domain mapping and HTTPS certification
Route 53Let's EncryptCertbot
Infrastructure Configuration
📄Nginx Configuration
/etc/nginx/sites-available/swansea-harriersConfig
server {
listen 80;
server_name your-domain.com www.your-domain.com;
# Redirect HTTP to HTTPS
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name your-domain.com www.your-domain.com;
# SSL Configuration
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
# Application Proxy
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# Static Files
location /static/ {
alias /var/www/swansea-harriers/static/;
expires 30d;
add_header Cache-Control "public, no-transform";
}
}📄Systemd Service Configuration
/etc/systemd/system/swansea-harriers.serviceConfig
[Unit]
Description=Swansea Harriers Rankings Platform
After=network.target
[Service]
User=www-data
Group=www-data
WorkingDirectory=/var/www/swansea-harriers
Environment="PATH=/var/www/swansea-harriers/venv/bin"
ExecStart=/var/www/swansea-harriers/venv/bin/gunicorn --workers 3 --bind 127.0.0.1:8000 wsgi:app
Restart=always
[Install]
WantedBy=multi-user.target📄Gunicorn Configuration
gunicorn.conf.pyConfig
import multiprocessing
# Server socket
bind = "127.0.0.1:8000"
backlog = 2048
# Worker processes
workers = multiprocessing.cpu_count() * 2 + 1
worker_class = 'sync'
worker_connections = 1000
timeout = 30
keepalive = 2
# Logging
accesslog = '/var/log/swansea-harriers/access.log'
errorlog = '/var/log/swansea-harriers/error.log'
loglevel = 'info'
# Process naming
proc_name = 'swansea-harriers'
# Server mechanics
daemon = False
pidfile = '/var/run/swansea-harriers.pid'
user = 'www-data'
group = 'www-data'
tmp_upload_dir = NoneSecurity & Monitoring
🔒Security Measures
- ✓SSL/TLS encryption with Let's Encrypt
- ✓Firewall configuration (UFW)
- ✓SSH key-based authentication
- ✓Regular security updates
- ✓Access token authentication
📊Monitoring & Logs
- ✓Nginx access & error logs
- ✓Application performance tracking
- ✓System resource monitoring
- ✓Automated backup procedures
- ✓Error alerting via email
Performance Optimization
Caching Strategy
- • Static file caching (30 days)
- • Database query optimization
- • Gzip compression
- • Browser caching headers
Resource Management
- • Multi-worker Gunicorn setup
- • Connection pooling
- • Memory usage optimization
- • CPU utilization monitoring
Load Optimization
- • Async request handling
- • Database indexing
- • Efficient SQL queries
- • Resource minification