Passa al contenuto principale
Versione: 0.5.3

Caddy su Aruba Cloud

Esegui il deployment di Caddy — un web server moderno con HTTPS automatico e configurazione zero — su Aruba Cloud tramite Terraform e cloud-init. Caddy ottiene e rinnova automaticamente i certificati Let's Encrypt quando viene fornito un nome di dominio, senza bisogno di certbot o rinnovi manuali.

Versione provider: arubacloud/arubacloud ~> 1.0 | Terraform: ≥ 1.9


Introduzione​

Caddy v2 è un server HTTP pronto per la produzione che gestisce nativamente il ciclo di vita dei certificati TLS. A differenza di NGINX, non sono necessari certbot, cron job o hook di rinnovo — Caddy gestisce i certificati automaticamente. Questo esempio esegue il provisioning di un'istanza Caddy con:

  • Caddy installato dal repository apt ufficiale (sempre aggiornato)
  • Un sito HTML statico predefinito servito da /var/www/html
  • Porte 80 (HTTP) e 443 (HTTPS) aperte a web_cidr
  • HTTPS automatico tramite Let's Encrypt quando domain è impostato — HTTP reindirizza automaticamente a HTTPS
  • Rinnovo dei certificati gestito da Caddy in background

Nota: Senza domain, Caddy serve solo HTTP sulla porta 80. Imposta domain su un nome DNS che punta alla VM per abilitare HTTPS automatico — nessun'altra configurazione è necessaria.


Panoramica dell'architettura​


Infrastruttura creata​

RisorsaPattern del nomeDescrizione
arubacloud_projectcaddy-prodContenitore del progetto
arubacloud_vpccaddy-prod-vpcVirtual Private Cloud
arubacloud_subnetcaddy-prod-subnetSubnet base
arubacloud_securitygroupcaddy-prod-vm-sgSecurity group
arubacloud_securityrulecaddy-prod-vm-sshRegola ingress SSH
arubacloud_securityrulecaddy-prod-vm-httpRegola ingress HTTP TCP 80
arubacloud_securityrulecaddy-prod-vm-httpsRegola ingress HTTPS TCP 443
arubacloud_elasticipcaddy-prod-vm-eipIP pubblico della VM
arubacloud_blockstoragecaddy-prod-bootDisco di boot da 20 GB (Performance)
arubacloud_keypaircaddy-prod-keypairChiave pubblica SSH
arubacloud_cloudservercaddy-prod-vmVM CloudServer

Costo mensile stimato​

RisorsaSpecificheCosto stimato/mese
VM CloudServerCSO1A2 — 1 vCPU / 2 GB~€9
Disco di boot20 GB Performance~€3
Elastic IP—~€3
Totale~€15/mese

Requisiti​

  • Terraform ≥ 1.9
  • ArubaCloud Terraform Provider ~> 1.0
  • Un account ArubaCloud con credenziali API OAuth2
  • Una coppia di chiavi SSH
  • (Per HTTPS) Un nome di dominio con un record A che punta all'Elastic IP della VM

Variabili​

Obbligatorie​

VariabileDescrizione
arubacloud_client_idClient ID OAuth2 di ArubaCloud
arubacloud_client_secretClient secret OAuth2 di ArubaCloud
ssh_public_keyContenuto della chiave pubblica SSH

Opzionali​

VariabileDefaultDescrizione
app_name"caddy"Nome breve usato in tutti i nomi delle risorse
environment"prod"Etichetta dell'ambiente
location"ITBG-Bergamo"Regione ArubaCloud
zone"ITBG-1"Zona di disponibilità
billing_period"Hour""Hour" o "Month"
vm_flavor"CSO1A2"Flavor del CloudServer
vm_image"LU22-001"Immagine del disco di boot (Ubuntu 22.04 LTS)
vm_disk_size_gb20Dimensione del disco di boot in GB
ssh_cidr"0.0.0.0/0"CIDR per SSH — limita in produzione
web_cidr"0.0.0.0/0"CIDR per HTTP/HTTPS
domain""Dominio per HTTPS automatico con Let's Encrypt (il DNS deve puntare alla VM prima)

Output​

OutputDescrizione
http_urlURL HTTP del web server
https_urlURL HTTPS (valido solo quando domain è impostato e il certificato è emesso)
vm_public_ipIndirizzo IP pubblico della VM
ssh_commandComando SSH per connettersi alla VM

Istruzioni di deployment​

1. Clona e naviga​

git clone https://github.com/arubacloud/terraform-arubacloud-examples.git
cd terraform-arubacloud-examples/caddy

2. Configura le variabili​

cp terraform.tfvars.example terraform.tfvars

Per solo HTTP, sono necessarie solo le credenziali e la chiave SSH. Per HTTPS automatico:

domain = "example.com"

Importante: Il record DNS A per domain deve già puntare all'Elastic IP della VM prima che Caddy possa ottenere un certificato. Ottieni prima l'IP (terraform apply senza domain), imposta il tuo record DNS, quindi ri-applica con domain impostato.

3. Esegui il deployment​

terraform init
terraform plan
terraform apply

Il bootstrap richiede circa 2–3 minuti. L'emissione del certificato avviene automaticamente in background una volta che il DNS si propaga.

4. Accedi al sito​

terraform output http_url

Caddy vs NGINX​

FunzionalitàCaddyNGINX
HTTPS automaticoIntegrato, configurazione zeroRichiede certbot + cron
Rinnovo certificatiAutomaticoManuale o tramite timer systemd
Sintassi di configurazioneCaddyfile semplicenginx.conf (più verboso)
PrestazioniElevatePiù elevate (minore overhead di memoria)
Plugin / moduliTramite build xcaddyTramite moduli in fase di compilazione

Scegli Caddy per semplicità d'uso e TLS senza intervento manuale. Scegli NGINX se hai bisogno di un controllo granulare della configurazione o hai già una configurazione NGINX esistente.


Personalizzazione​

Reverse proxy​

Modifica /etc/caddy/Caddyfile sulla VM:

example.com {
reverse_proxy localhost:8080
}

Ricarica: sudo systemctl reload caddy

Siti multipli​

site1.example.com {
root * /var/www/site1
file_server
}

site2.example.com {
reverse_proxy localhost:3000
}

Caddy ottiene automaticamente un certificato per ogni dominio.


Risoluzione dei problemi​

Caddy non si avvia​

sudo systemctl status caddy
sudo journalctl -u caddy -n 30
sudo caddy validate --config /etc/caddy/Caddyfile

Certificato non emesso​

sudo journalctl -u caddy | grep -i acme

Cause comuni: record DNS A non propagato, porta 80 bloccata da web_cidr, o variabile domain errata. Caddy riprova automaticamente — controlla i log ogni pochi minuti.


Riferimenti​