Files
fdn2/cicd/nginx/README.md
T
2026-07-12 23:15:36 +02:00

64 lines
2.4 KiB
Markdown

# 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/<primario>/` 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.