Come pubblicare (“agganciare”) un sito su Amazon Web Services: EC2, S3+CloudFront, Lightsail, dominio e HTTPS

Scegli il percorso giusto

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)

  1. Crea il bucket S3 con nome uguale al dominio (es. esempio.it). Carica i file del sito.
  2. Abilita hosting statico su S3 (endpoint) e imposta documento indice/errore.
  3. Certificato HTTPS (ACM) in us-east-1 (N. Virginia) per l’uso con CloudFront. Valida via DNS.
  4. Distribuzione CloudFront: origine = S3, attiva HTTPS, comprensione gzip/brotli, regole cache.
  5. 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)

  1. Avvia una EC2 (es. Ubuntu LTS, tipo t3.micro/t3.small), Security Group con 22 (solo tuo IP), 80, 443.
  2. Connettiti via SSH:
    ssh -i ~/.ssh/chiave.pem ubuntu@ec2-xx-xx-xx-xx.compute-1.amazonaws.com
  3. 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
  4. 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
  5. 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
  6. DNS Route 53: record A/AAAA verso l’Elastic IP dell’istanza.
  7. 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)

  1. Crea un’istanza Lightsail (stack preconfigurati: WordPress, Node, LAMP).
  2. Assegna un IP statico e collega il dominio (DNS Lightsail o Route 53).
  3. 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)

  1. Repo: GitHub/CodeCommit con il tuo sito/app.
  2. Build: CodeBuild (npm install / composer install / build asset).
  3. 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.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.