In questa guida vogliamo parlavi del progetto Nginx Proxy Manager. Si tratta sostanzialmente di un'immagine Docker pre-built che permette di implementare e gestire dei reverse proxy.
Parliamo nello specifico di una tipologia di proxy che viene spesso utilizzata per rendere accessibile un servizio posizionato dietro ad un firewall. Tale approccio viene sfruttato per esporre su Internet degli applicativi che non supportano HTTP e per implementare rapidamente connessioni sotto HTTPS.
Realizzare un reverse proxy non è complicato ma gestirne ed amministrarne diverse decine può diventare complesso. Ecco perché è nato Nginx Proxy Manager. Questa istanza Docker preconfigurata offre un setting di NGINX già pronto per eseguire reverse proxy del proprio servizio. Il tutto senza dover gestire manualmente SSL.
Nginx Proxy Manager può semplificare notevolmente il workflow e dispone anche di tool per implementare e gestire un vasto ventaglio di proxy tramite una GUI accessibile da browser web. È infatti utilizzabile da qualsiasi dispositivo connesso ad una rete locale.
Detto questo, andremo ad installare Nginx Proxy Manager su Raspberry Pi, cosi da ottenere un hub con cui gestire i reverse proxy dei servizi che ci interessa esporre su Internet in tutta sicurezza.
La nota board ARM low-cost è perfetta per sperimentare questo genere di configurazioni. Inoltre le sue dimensioni ridotte consentono all'utente di posizionarla comodamente dietro ad un router.
Requisiti hardware
Per iniziare a lavorare dobbiamo quindi reperire Raspberry Pi. In generale consigliamo un modello Raspberry Pi 5 cosi da ottenere le giuste performance per ogni tipologia di servizio da eseguire al suo interno.
Se non desideriamo eseguire il setting via SSH dobbiamo inoltre reperire mouse, tastiera, monitor, cavi ethernet ed USB-C oltre ad una scheda microSD per ospitare il sistema operativo e gli applicativi.
Installazione e configurazione di Raspberry Pi OS
Potenzialmente è possibile non utilizzare Raspberry Pi OS per i nostri scopi, dato che Nginx Proxy Manager viene eseguito all'interno di un container Docker. Volendo potreste quindi saltare questa parte della guida, installare un distribuzione Linux a scelta e passare direttamente alla sezione "Installazione e configurazione del container Docker di Nginx Proxy Manager".
Iniziamo procurandoci il tool chiamato Raspberry Pi Imager. Questo programma gratuito viene sviluppato dallo stesso team di Raspberry Pi OS ed è stato realizzato appositamente per semplificare il processo di installazione della distribuzione. Rendendolo accessibile anche a coloro che sono alle prime armi con il mondo Linux.
Eseguiamo l'utility, clicchiamo su "Choose Device" e scegliamo il modello del device utilizzato. Tramite "Choose OS" selezioniamo la versione di Raspberry Pi OS a 64bit e successivamente, da "Choose Storage", impostiamo la microSD da usare per il processo di flash.
Proseguiamo con il tasto "Next. Ora dovremo decidere se configurare da subito alcuni aspetti della distribuzione o avviarla con dei setting standard. Noi vi consigliamo di cliccare su "EDIT SETTING" e di impostare l'accesso tramite SSH sin dal primo boot, un hostname, la time zone ed il keyboard layout.
Confermiamo le nostre scelte con "YES" e attendiamo il termine della procedura per inserire la microSD nel device e connettere il tutto all'alimentazione.
Installazione di Docker su Raspberry Pi OS
Dopo il primo login passiamo all'installazione del sistema di container Docker. Questa operazione è abbastanza semplice e può essere svolta interamente da bash. Reperiamo l'installer con curl:
curl -sSL https://get.docker.com | sh
Eseguiamo l'installazione tramite l'apposito script:
sudo sh get-docker.sh
Aggiungiamo il nostro utente al gruppo Docker:
sudo usermod -aG docker nomedelvostroutente
e impostiamo Docker in modo che si avvii in automatico ad ogni boot tramite systemd:
sudo systemctl enable docker.service && sudo systemctl enable containerd.service
Installazione e configurazione del container Docker di Nginx Proxy Manager
Ora passiamo al setting del container di Nginx Proxy Manager e generiamo una directory dedicata:
mkdir ~/nginxproxymanager
cd ~/nginxproxymanager
Fatto questo, dopo esserci posizionati al suo interno creiamo l'apposito Docker compose file tramite nano:
nano docker-compose.yml
e popoliamolo cosi:
version: '3.8'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80'
- '81:81'
- '443:443'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
Saliamo le modifiche con CTRL+O e chiudiamo l'editor con CTRL+X, quindi procediamo con l'avvio:
docker compose up -d
Accedere alla Web Interface di NGINX Proxy Manager
Ora siamo pronti per accedere all'interfaccia Web di NGINX Proxy Manager. Il tutto è infatti accessibile da browser digitando nella barra degli URL l'IP locale di Raspberry Pi e la porta 81
su cui è in ascolto il Web server del servizio. Ecco un esempio:
192.168.1.12:81
Se non sappiamo quale sia l'IP locale assegnato a Raspberry Pi possiamo reperirlo tramite bash:
hostname -I
Con tale comando otteniamo infatti il nostro IP locale- Ad esempio:
192.168.1.12
Il setup iniziale di NGINX Proxy Manager è molto semplice. Prima di tutto ci viene richiesto di eseguire il login con le credenziali di default:
Utente: admin@example.com
Password: changeme
Dopo il primo login il programma ci chiede di modificare le credenziali d'accesso. Una volta superata anche questa fase si può finalmente iniziare a configurare tutte le proxy che si desidera.
Creare una reverse proxy con NGINX Proxy Manager
Per realizzare una reverse proxy con NGINX Proxy Manager è necessario cliccare sul pulsante "Hosts". Successivamente, dalla lista che viene aperta bisogna selezionare "Proxy Hosts" e poi pigiare su "Add Proxy Hosts".
A questo punto compare un pratico dialog box dove inserire tutte le configurazioni che ci interessa implementare. Come ad esempio il nome del dominio, lo schema HTTP, l'hostname, l'IP e la porta del servizio. Inoltre NGINX Proxy Manager è in grado di generare un certificato SSL per il proprio nome di dominio. Infine, basta cliccare su "SAVE" per salvare tutte le modifiche effettuate ed abilitare un nuovo reverse proxy.