2.4 KiB
2.4 KiB
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.itpreproduction.ifattidinapoli.ittest.ifattidinapoli.it
La lista si definisce nell'array domains di init-letsencrypt.sh.
Il primo dominio e' il primario e da' il nome alla cartella
/etc/letsencrypt/live/<primario>/ referenziata in nginx.conf.
Primo setup
Prerequisiti:
- Docker con il plugin Compose v2 (comando
docker compose, nondocker-compose). - La rete docker esterna
nginx-networkdeve 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.
# 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:
- scarica i parametri TLS raccomandati,
- crea un certificato dummy self-signed cosi' nginx puo' partire,
- avvia nginx,
- cancella il dummy e richiede il certificato reale a Let's Encrypt,
- ricarica nginx.
Rinnovo
Il rinnovo e' automatico. 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:roin docker-compose.yml e i file inssl/possono essere rimossi una volta verificato che Let's Encrypt funziona. - La cartella
certbot/(chiavi private incluse) e' in.gitignoree non va committata. Le vecchie chiavi Sectigo sono invece presenti nella history git: valutare con il fornitore se revocarle.