Scegli il percorso giusto
Contenuti
nascondi
1) Sito statico (HTML/CSS/JS)
- S3 + CloudFront (scalabile, economico, super veloce)
- Certificato ACM (us-east-1) + dominio Route 53
- Perfetto per vetrine, landing, SPA con API esterne
2) Sito dinamico (PHP/Node/Java/.NET)
- EC2 con Nginx/Apache + (opz.) ALB
- DB gestito con RDS (MySQL/Postgres)
- Per semplicità: Lightsail (bundle WordPress/Node)
3) Full managed/CI
- Amplify (frontend + hosting + CI/CD)
- Elastic Beanstalk (PaaS per app web)
- CodePipeline/CodeDeploy per automatizzare il deploy
Opzione A — Statico con S3 + CloudFront (consigliata)
- Crea il bucket S3 con nome uguale al dominio (es.
esempio.it
). Carica i file del sito. - Abilita hosting statico su S3 (endpoint) e imposta documento indice/errore.
- Certificato HTTPS (ACM) in us-east-1 (N. Virginia) per l’uso con CloudFront. Valida via DNS.
- Distribuzione CloudFront: origine = S3, attiva HTTPS, comprensione gzip/brotli, regole cache.
- DNS Route 53: crea un record ALIAS dal dominio alla distribuzione CloudFront.
Nota sicurezza: mantieni il bucket privato e consenti l’accesso solo tramite Origin Access Control (OAC) di CloudFront.
Opzione B — Dinamico con EC2 (Nginx + HTTPS)
- Avvia una EC2 (es. Ubuntu LTS, tipo t3.micro/t3.small), Security Group con 22 (solo tuo IP), 80, 443.
- Connettiti via SSH:
ssh -i ~/.ssh/chiave.pem ubuntu@ec2-xx-xx-xx-xx.compute-1.amazonaws.com
- Installa stack base:
sudo apt update && sudo apt -y upgrade sudo apt -y install nginx ufw sudo ufw allow 'Nginx Full' && sudo ufw enable sudo mkdir -p /var/www/esempio.it/public
- Virtual host Nginx (snippet):
sudo tee /etc/nginx/sites-available/esempio.it >/dev/null <<'CONF' server { listen 80; server_name esempio.it www.esempio.it; root /var/www/esempio.it/public; index index.html index.php; location / { try_files $uri $uri/ /index.html; } } CONF sudo ln -s /etc/nginx/sites-available/esempio.it /etc/nginx/sites-enabled/ sudo nginx -t && sudo systemctl reload nginx
- HTTPS con Let’s Encrypt (se non usi ALB):
sudo apt -y install certbot python3-certbot-nginx sudo certbot --nginx -d esempio.it -d www.esempio.it --redirect
- DNS Route 53: record A/AAAA verso l’Elastic IP dell’istanza.
- DB & file: usa RDS per il database e S3 per media/backup. Imposta rotazione log in CloudWatch.
In alternativa metti la EC2 dietro un Application Load Balancer: il certificato HTTPS resta in ACM sull’ALB, semplificando il rinnovo e aprendo a autoscaling.
Opzione C — Lightsail (via più semplice)
- Crea un’istanza Lightsail (stack preconfigurati: WordPress, Node, LAMP).
- Assegna un IP statico e collega il dominio (DNS Lightsail o Route 53).
- Attiva HTTPS con l’assistente Let’s Encrypt di Lightsail o Bitnami.
DNS con Route 53 (record tipici)
Uso | Record | Destinazione | Note |
---|---|---|---|
Dominio apex → CloudFront | ALIAS A/AAAA | Distribuzione CloudFront | HTTPS via ACM (us-east-1) |
www → apex | CNAME | esempio.it | Oppure ALIAS a CloudFront |
Dominio → EC2 | A/AAAA | Elastic IP | Configura Nginx/Certbot |
Dominio → ALB | ALIAS | DNS dell’ALB | Certificato su ACM |
CI/CD essenziale con CodePipeline (EC2)
- Repo: GitHub/CodeCommit con il tuo sito/app.
- Build: CodeBuild (npm install / composer install / build asset).
- Deploy: CodeDeploy su EC2 (appspec.yml + script di hook) o sincronizzazione su S3 (statico).
Per SPA statiche: connetti il repo direttamente a Amplify Hosting per build e deploy automatici su ogni push.
Checklist finale
- DNS propagato (apex e www)
- HTTPS attivo, redirect 301 da http→https
- Sicurezza: 22 limitato al tuo IP, 80/443 aperti; utente IAM least privilege
- Log e metriche in CloudWatch; allarmi costi
- Backup: AMI/snapshot (EC2), versioning S3, snapshot RDS
- Cache: header corretti, invalidazioni CloudFront post-deploy
Problemi comuni & soluzioni
- Il dominio non risolve: verifica record Route 53 e Hosted Zone corretta sul registrar.
- Certificato non valido su CloudFront: assicurati che sia in us-east-1 e associato alla distribuzione (CNAME/SAN corretti).
- 403 da S3: usa OAC con policy corretta; non rendere il bucket pubblico se non necessario.
- Timeout su EC2: controlla Security Group/NACL e che Nginx ascolti su 80/443.