Installare Nginx Proxy Manager su Ubuntu 22.04
Nginx Proxy Manager (NPM) è una soluzione comoda per gestire reverse proxy, certificati TLS e host virtuali da interfaccia web. Su Ubuntu 22.04 l’approccio più pulito è usarlo in container Docker: installazione rapida, aggiornamenti semplici e rollback immediato.
Qui sotto trovi una procedura pratica, pensata per un server Linux recente, con attenzione a prerequisiti, sicurezza di base e controlli finali. L’obiettivo è arrivare a un’istanza funzionante, esposta solo dove serve, senza complicare inutilmente la macchina.
Prerequisiti e scelte architetturali
Prima di installare, chiarisci il ruolo del server. NPM deve ricevere traffico HTTP/HTTPS dall’esterno e inoltrarlo verso servizi interni o esterni. Se lo usi in produzione, considera che il container avrà accesso a porte 80, 81 e 443, quindi il firewall va allineato.
Assumiamo:
- Ubuntu 22.04 aggiornato.
- Accesso sudo.
- Un dominio o sottodominio già pronto, se vuoi emettere certificati Let’s Encrypt.
- DNS del nome host puntato verso il server o verso il bilanciatore che lo espone.
Se il server è già occupato da un web server sulla porta 80/443, devi decidere prima chi resta in ascolto su quelle porte. NPM non può condividere in modo semplice le stesse porte con un’altra istanza che ascolta direttamente sul bind host, salvo architetture più articolate.
Scelta consigliata: se NPM deve fare da front-end per più servizi, lascialo gestire lui 80/443 e sposta gli altri servizi su porte interne o su una rete Docker dedicata.
Aggiornare il sistema e preparare il repository
Parti con un update completo e installa i pacchetti minimi richiesti per Docker. Questo riduce problemi banali di dipendenze o kernel vecchi.
sudo apt update
sudo apt -y upgrade
sudo apt -y install ca-certificates curl gnupg lsb-releaseVerifica la versione di Ubuntu e il kernel, utile se poi devi fare troubleshooting su rete o storage:
lsb_release -a
uname -rAtteso: Ubuntu 22.04 e un kernel recente della serie HWE o standard supportata. Se il sistema è molto indietro, aggiorna prima di introdurre Docker.
Installare Docker Engine su Ubuntu 22.04
Per Nginx Proxy Manager serve Docker. Puoi installare il pacchetto da repository ufficiale Docker, che è la strada più stabile per un server gestito.
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpgecho \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/nullsudo apt update
sudo apt -y install docker-ce docker-ce-cli containerd.io docker-compose-pluginControlla che il demone sia attivo:
systemctl status docker --no-pagerAtteso: stato active (running). Se non lo è, leggi i log:
journalctl -u docker -n 50 --no-pagerSe vuoi usare Docker senza sudo per il tuo utente amministrativo, aggiungilo al gruppo docker. Fallo solo se sai cosa comporta: chi può usare Docker ha di fatto privilegi molto elevati sulla macchina.
sudo usermod -aG docker $USERPoi esegui logout/login e verifica:
docker version
docker psCreare la directory di lavoro
Usa una directory dedicata per mantenere ordine su configurazione e dati persistenti. Questo semplifica backup e migrazioni.
sudo mkdir -p /opt/nginx-proxy-manager
cd /opt/nginx-proxy-managerStruttura consigliata:
/opt/nginx-proxy-manager/dataper i dati applicativi./opt/nginx-proxy-manager/letsencryptper i certificati./opt/nginx-proxy-manager/docker-compose.ymlper lo stack.
Questa separazione ti aiuta in caso di restore o cambio host.
Creare il file docker-compose
Ora definisci il servizio. NPM usa tipicamente un database SQLite locale per installazioni semplici; per carichi più seri o esigenze di HA, il discorso cambia, ma per una singola istanza questa è la via più diretta.
sudo tee /opt/nginx-proxy-manager/docker-compose.yml > /dev/null <<'EOF'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
container_name: nginx-proxy-manager
restart: unless-stopped
ports:
- '80:80'
- '81:81'
- '443:443'
environment:
DB_SQLITE_FILE: /data/database.sqlite
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
EOFNote operative:
80e443servono per il traffico pubblico dei proxy host.81è la web UI amministrativa.- I volumi persistenti sono fondamentali per non perdere configurazione e certificati al riavvio.
Se sulla macchina ci sono già servizi in ascolto su 80/443, prima di avviare NPM verifica chi occupa le porte:
sudo ss -ltnp | egrep ':(80|81|443)'Se trovi Apache, Nginx o un altro reverse proxy, devi cambiare architettura o liberare le porte. Non forzare senza un piano di rollback.
Avviare il container
Dal percorso del compose, avvia lo stack:
cd /opt/nginx-proxy-manager
sudo docker compose up -dControlla subito lo stato:
sudo docker psAtteso: container nginx-proxy-manager in stato Up. Se non parte, guarda i log:
sudo docker logs nginx-proxy-manager --tail 100Il primo avvio può impiegare qualche decina di secondi. Se il container esce subito, i problemi più comuni sono porte già occupate, permessi sulle directory persistenti o immagine non scaricata correttamente.
Aprire il firewall in modo minimo
Se usi UFW, consenti solo le porte necessarie. Non aprire altro per comodità.
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 81/tcpControlla lo stato:
sudo ufw status verboseSe la UI admin non deve essere pubblica, non esporre la porta 81 su Internet. Meglio limitarla per IP o tenerla accessibile solo da VPN o rete interna. In quel caso, sostituisci la regola con un allow restrittivo sul tuo range amministrativo.
Accedere alla dashboard
La UI è disponibile su http://IP_DEL_SERVER:81 oppure sul nome host se il DNS è già pronto. Al primo accesso, le credenziali di default sono quelle previste dal progetto, ma vanno cambiate subito dopo il login.
Verifica che la pagina risponda con:
curl -I http://127.0.0.1:81Atteso: risposta HTTP valida, tipicamente 200 o 302 a seconda del punto di accesso. Se il curl locale funziona ma da fuori no, il problema è quasi sempre firewall, security group, NAT o routing.
Nel browser:
- Apri la UI su porta 81.
- Accedi con le credenziali iniziali.
- Cambia subito password amministratore.
- Abilita, se disponibile nella tua procedura, l’autenticazione a due fattori o una protezione di accesso aggiuntiva per la UI.
Creare il primo proxy host
La funzione principale di NPM è pubblicare un servizio interno dietro un nome DNS e un certificato TLS. Esempio tipico: vuoi esporre un’app che ascolta su 10.0.0.20:8080 come app.example.com.
In dashboard:
- Vai su Proxy Hosts.
- Clicca Add Proxy Host.
- Compila Domain Names con il FQDN.
- Imposta Scheme su
httpohttpsin base all’origin. - Inserisci Forward Hostname / IP e Forward Port.
- Abilita Websockets Support se l’app lo richiede.
- Salva.
Se il backend usa HTTPS con certificato self-signed o interno, verifica prima che NPM possa fidarsi dell’origin. In caso contrario vedrai errori di upstream o handshake.
Abilitare Let’s Encrypt
Per ottenere certificati pubblici, il dominio deve puntare correttamente al server e la porta 80 deve essere raggiungibile dall’esterno per la validazione HTTP-01, salvo casi particolari.
In NPM:
- Apri il proxy host creato.
- Vai alla scheda SSL.
- Seleziona Request a new SSL Certificate.
- Spunta Force SSL se vuoi reindirizzare tutto su HTTPS.
- Spunta HTTP/2 Support se utile.
- Accetta i termini ACME e salva.
Se l’emissione fallisce, verifica questi punti in ordine:
- DNS del dominio risolto verso l’IP corretto.
- Porta 80 raggiungibile dall’esterno.
- Nessun altro servizio sta rispondendo al posto di NPM su 80.
- Firewall o security group non bloccano il traffico.
Controllo rapido DNS:
dig +short app.example.comControllo rapido HTTP dall’esterno:
curl -I http://app.example.comAtteso: risposta del tuo NPM o redirect coerente. Se vedi un altro server, il DNS o il routing stanno puntando altrove.
Hardening minimo consigliato
Non basta far partire il servizio. Conviene ridurre l’esposizione e proteggere la macchina con alcune misure di base.
- Limita la porta 81 a IP fidati o VPN.
- Aggiorna regolarmente Docker e l’immagine NPM.
- Non montare directory extra inutili nel container.
- Se possibile, separa i servizi backend in una rete privata.
- Monitora spazio disco, perché i certificati e i log crescono nel tempo.
Controlla lo spazio residuo:
df -h
docker system dfSe il disco si riempie, i sintomi possono andare dal mancato rinnovo dei certificati fino a errori del database interno. Su una macchina piccola è una delle prime cose da osservare.
Aggiornare Nginx Proxy Manager senza perdere dati
Con Docker l’aggiornamento è semplice, ma va fatto con disciplina. Prima verifica che i volumi siano persistenti e che il compose sia salvato. Poi aggiorni l’immagine e ricrei il container.
cd /opt/nginx-proxy-manager
sudo docker compose pull
sudo docker compose up -dVerifica che il container riparta correttamente e che la UI sia accessibile. I dati dovrebbero restare invariati perché sono nei volumi montati.
Se vuoi ridurre il rischio, fai un backup della directory prima del cambio:
sudo tar -czf /root/nginx-proxy-manager-backup-$(date +%F).tar.gz /opt/nginx-proxy-managerQuel file ti dà un punto di ritorno rapido in caso di problema.
Troubleshooting rapido
Se qualcosa non funziona, isola il layer prima di cambiare configurazioni a caso.
- Container non parte: controlla
docker ps -aedocker logs nginx-proxy-manager --tail 100. - Porta occupata: usa
ss -ltnpper vedere chi ascolta su 80/81/443. - UI non raggiungibile: testa in locale con
curl -I http://127.0.0.1:81e poi dal client remoto. - Certificato non emesso: verifica DNS, porta 80, firewall e log ACME nella dashboard.
- Backend non risponde: prova l’origine direttamente con
curl -I http://IP_BACKEND:PORTA.
Log utili:
sudo docker logs nginx-proxy-manager --tail 200journalctl -u docker -n 100 --no-pager
Se il problema è sui backend, NPM spesso mostra sintomi generici; il dettaglio vero lo trovi nel servizio originario, non nel proxy.
Note operative su backup e rollback
Prima di modifiche importanti, salva la configurazione della directory del progetto e annota il file compose. Il rollback più semplice consiste nel ripristinare i volumi e riavviare la versione precedente dell’immagine.
Rollback tipico:
- Ferma lo stack con
sudo docker compose down. - Ripristina il backup della directory se necessario.
- Rimetti il tag immagine precedente nel compose, se hai cambiato versione.
- Riavvia con
sudo docker compose up -d.
Attenzione al blast radius: agire su porte e firewall può impattare altri servizi già presenti sulla macchina. Verifica sempre chi usa 80/443 prima di prendere possesso di quei bind.
Conclusione operativa
Su Ubuntu 22.04, Nginx Proxy Manager si installa bene via Docker e ti dà una gestione semplice di reverse proxy e certificati. La parte delicata non è l’installazione in sé, ma la convivenza con altri servizi, l’esposizione della porta admin e la corretta pubblicazione dei backend.
Se vuoi una installazione pulita, la sequenza giusta è: aggiornare il sistema, installare Docker, creare i volumi persistenti, avviare il compose, aprire solo le porte necessarie e verificare da subito DNS, accesso UI e rinnovo certificati. Da lì in poi la manutenzione è soprattutto disciplina operativa: backup, aggiornamenti controllati e monitoraggio del disco.
Commenti (0)
Nessun commento ancora.
Segnala contenuto
Elimina commento
Eliminare definitivamente questo commento?
L'azione non si può annullare.