# Reverse proxy nginx + Let's Encrypt Reverse proxy nginx davanti ad Apache per `ifattidinapoli.it`. I certificati SSL sono gestiti automaticamente da Let's Encrypt tramite certbot (validazione HTTP-01 via webroot), con **un unico certificato multi-dominio (SAN)** che copre tutti gli host serviti da questo nginx. ## Domini coperti dal certificato - `www.ifattidinapoli.it` (primario / CN) - `ifattidinapoli.it` - `preproduction.ifattidinapoli.it` - `test.ifattidinapoli.it` La lista si definisce nell'array `domains` di [init-letsencrypt.sh](init-letsencrypt.sh). Il primo dominio e' il primario e da' il nome alla cartella `/etc/letsencrypt/live//` referenziata in [nginx.conf](nginx.conf). ## Primo setup Prerequisiti: - Docker con il plugin Compose v2 (comando `docker compose`, non `docker-compose`). - La rete docker esterna `nginx-network` deve esistere (`docker network create nginx-network`). - Le porte 80 e 443 dell'host devono essere pubblicamente raggiungibili per tutti i domini (la validazione HTTP-01 passa dalla porta 80). - I record DNS di tutti i domini devono puntare a questo server. ```bash # 1. (consigliato) prova prima in staging: metti staging=1 in init-letsencrypt.sh ./init-letsencrypt.sh # 2. verifica che tutto funzioni, poi rimetti staging=0 e rilancia ./init-letsencrypt.sh ``` Lo script: 1. scarica i parametri TLS raccomandati, 2. crea un certificato dummy self-signed cosi' nginx puo' partire, 3. avvia nginx, 4. cancella il dummy e richiede il certificato reale a Let's Encrypt, 5. ricarica nginx. ## Rinnovo Il rinnovo e' automatico. [renew.sh](renew.sh) lancia `certbot renew` (che rinnova solo se manca meno di 30 giorni alla scadenza) e ricarica nginx. Schedularlo in crontab sull'host (`crontab -e`): ``` 0 3 * * * cd /percorso/di/cicd/nginx && ./renew.sh > /tmp/renew.log 2>&1 || logger -t CRON_RENEW -f /tmp/renew.log ``` Se lo script fallisce, l'output finisce in syslog; altrimenti nessun output. ## Note sulla migrazione da Sectigo - I vecchi certificati Sectigo sono in `ssl/`. Il mount `./ssl:/etc/ssl:ro` in [docker-compose.yml](docker-compose.yml) e i file in `ssl/` possono essere rimossi una volta verificato che Let's Encrypt funziona. - La cartella `certbot/` (chiavi private incluse) e' in `.gitignore` e **non va committata**. Le vecchie chiavi Sectigo sono invece presenti nella history git: valutare con il fornitore se revocarle.