Introduzione
Nel mondo di internet, diverse tecnologie si uniscono per formare una soluzione che consente agli utenti del web di accedere a contenuti dinamici sul world wide web. Lo stack LEMP è una di queste soluzioni. Unisce quattro tecnologie che costituiscono una soluzione server completa per siti web dinamici e ad alte prestazioni. LEMP è l'acronimo di Linux, Nginx, MySQL e PHP. Linux è il sistema operativo del server. Nginx (che si pronuncia Engine-X, da cui la lettera E nell'acronimo) è il software del server web. Successivamente, MySQL è il sistema di database che contiene i dati del sito web e degli utenti. PHP è il linguaggio di scripting lato server per l'elaborazione dinamica.
In questo tutorial, vi guideremo su come installare e configurare uno stack LEMP e verificare che tutto funzioni come previsto. Cominciamo!
Passo 1: Configurazione del server con Ubuntu 20.04
Ubuntu 20.04 è un sistema operativo basato su Linux. Esistono diversi server basati su Linux sistemi operativi là fuori, inclusi quelli gratuiti e premium. L'attenzione di questa guida è su Ubuntu 20.04, che è gratuito e open-source. Questo passo si occupa del primo requisito dell'acronimo dello stack LEMP, la L. Dovresti avere un'installazione effettiva di Ubuntu 20.04 sul tuo VPS per procedere con i passi successivi. Puoi seguire la nostra guida su come configurare il tuo server Ubuntu. Opzionalmente, se desideri seguire questa guida sul tuo computer locale, puoi scaricare l'immagine di installazione del server Ubuntu 20.04 direttamente dal sito web di Ubuntu. Dovresti configurare un utente normale non root con privilegi sudo perché eseguiremo alcuni comandi che richiedono i permessi di sudo.
Passo 2: Installazione e configurazione del server Nginx
I server web ci consentono di servire contenuti come le pagine web ai visitatori del sito. Nginx è un server web popolare, che figura tra i primi cinque server web open source preferiti dagli sviluppatori. Questo passo si occupa del secondo requisito dello stack LEMP, la E per Nginx. Ubuntu ha un repository di pacchetti predefinito da cui preleveremo i pacchetti da utilizzare in questa guida. Ubuntu è basato su Debian, che utilizza apt o dpkg per gestire i suoi pacchetti. Per i pacchetti dal repository predefinito, utilizzeremo apt.
Come regola generale, dovresti eseguire il comando di aggiornamento prima di iniziare qualsiasi installazione su un sistema Linux. Inizia inserendo il seguente comando sul terminale:
|
1 |
sudo apt update |
Una volta aggiornato, ora puoi installare Nginx con il seguente comando:
|
1 |
sudo apt install nginx |
Una volta completata l'installazione, Nginx si avvia automaticamente. Il passo successivo consiste nel configurare il firewall per consentire il passaggio del traffico. Ubuntu utilizza il pacchetto ufw (Uncomplicated Firewall) per la configurazione dei firewall. Dopo l'installazione, Nginx si registra come servizio con ufw. Ubuntu avvia automaticamente il servizio Firewall all'avvio del sistema, ma per sicurezza, digita il seguente comando per abilitarlo:
|
1 |
sudo ufw enable |
Per elencare la configurazione dell'applicazione consentita da ufw, inserisci il seguente comando:
|
1 |
sudo ufw app list |
Di seguito è riportato uno screenshot che mostra l'output del comando precedente:

Come puoi vedere, Nginx è già registrato con ufw e ha tre profili come spiegato di seguito:
- Nginx Full – apre sia la porta 80 che la 443. La porta 80 è per il traffico normale/non crittografato, ovvero HTTP. La porta 443 è per il traffico crittografato TLS/SSL, ovvero https.
- Nginx HTTP – apre solo la porta 80 – traffico non crittografato.
- Nginx HTTPS – apre solo la porta 443 – traffico crittografato TLS/SSL.
Sebbene Nginx si registri automaticamente con ufw, nessun traffico è consentito al tuo server finché non lo fai tu stesso. Puoi scegliere di consentire tutti o alcuni dei profili, tuttavia è meglio consentire il profilo più restrittivo che permetta comunque il traffico configurato per il tuo server web. Poiché non abbiamo configurato SSL in questo tutorial, consentiremo solo il traffico HTTP sulla porta 80. Se sei curioso, abbiamo una guida sulla configurazione di SSL sul server Nginx da Let's Encrypt utilizzando Certbot.
Abilitiamo il traffico sulla porta 80 inserendo il seguente comando:
|
1 |
sudo ufw allow 'Nginx HTTP' |
Per verificare che la modifica sia andata a buon fine, digita il seguente comando:
|
1 |
sudo ufw status |

L'output sopra derivante dall'esecuzione del comando mostra che il traffico HTTP è ora consentito. Puoi verificare se il server è in esecuzione accedendo al tuo dominio o all'IP pubblico del server nel browser. Se non hai configurato un nome di dominio e non sei sicuro dell'indirizzo IP pubblico del tuo server, puoi trovarlo usando curl eseguendo il seguente comando:
|
1 |
curl -4 icanhazip.com |
Copia l'output del comando precedente, che è il tuo indirizzo IP pubblico, nella barra degli indirizzi del browser. Quando carichi la pagina, vedrai la pagina di destinazione predefinita di Nginx:

La pagina sopra indica che hai installato Nginx con successo.
Passo 3: Installazione del sistema di gestione del database MySQL
La gestione dei dati è una parte cruciale di qualsiasi sito web dinamico. MySQL è un sistema di gestione di database che memorizza e gestisce i dati di un sito web. Questo passaggio si occupa del terzo requisito dello stack LEMP, la M. Inserisci il seguente comando per installare MySQL:
|
1 |
sudo apt install mysql-server |
Al termine dell'installazione di MySQL, è necessario configurarlo prima che sia pronto per l'uso. Parte della configurazione include la protezione del server del database. MySQL viene fornito con uno script per guidarti nella protezione e nella configurazione delle password. Il seguente comando avvia lo script:
|
1 |
sudo mysql_secure_installation |

Lo script chiede se desideri configurare il componente VALIDATE PASSWORD o premere un tasto qualsiasi per procedere senza abilitare il componente.
Il componente VALIDATE PASSWORD è una funzionalità utilizzata per verificare se la password inserita per un determinato utente sul server del database soddisfa criteri specifici. Puoi configurarlo per controllare elementi come la lunghezza, i caratteri numerici, la presenza di lettere maiuscole o minuscole, ecc. Se non è abilitato, puoi configurare qualsiasi password di tua scelta. Tuttavia, se abilitato, devi utilizzare una password che soddisfi i criteri specifici. L'abilitazione potrebbe causare problemi con i pacchetti che configurano automaticamente le credenziali utente di MySQL, come il pacchetto phpMyAdmin per Ubuntu. Abilitarlo o meno è una scelta personale. Il tuo database è comunque sicuro anche se non lo abiliti, assicurati solo di utilizzare password complesse e uniche.
Se hai premuto Y per abilitare il componente, lo script ti chiederà di selezionare un livello di convalida della password:

Lo script fornisce 3 livelli di convalida della password. Il livello LOW richiede che la password contenga solo 8 o più caratteri. Il livello MEDIUM richiede che la password contenga 8 o più caratteri, che devono essere una combinazione di lettere maiuscole, lettere minuscole e caratteri speciali. Il livello STRONG richiede una password complessa con 8 o più caratteri, che deve essere una combinazione di lettere maiuscole, lettere minuscole, caratteri speciali e parole, e non deve basarsi su parole comuni del dizionario, altrimenti riceverai errori. Scegliamo il livello Low, digita 0 e premi invio.
Lo script ti chiede di inserire e reinserire la password:

Digita y e premi invio per accettare la password digitata come password di root. Le richieste successive servono a migliorare la sicurezza del server MySQL. Si inizia rimuovendo gli utenti anonimi predefiniti presenti in ogni installazione di MySQL, disabilitando l'accesso root da una connessione remota e rimuovendo i database di test. L'ultima richiesta ti chiede di ricaricare la tabella dei privilegi affinché i comandi abbiano effetto. Digita y e premi invio per tutte le richieste:

La configurazione di sicurezza iniziale è completata.
Puoi verificare la versione di MySQL installata eseguendo il comando:
|
1 |
sudo mysql –V |
Ecco la versione che stiamo utilizzando per questo tutorial:
![]()
Per i sistemi Ubuntu che eseguono versioni di MySQL a partire dalla 5.7 e successive, l'utente root è configurato per autenticarsi utilizzando il plugin auth_socket e non con la password. Ciò garantisce una maggiore sicurezza, tuttavia potrebbe rappresentare un problema con pacchetti esterni come il pacchetto phpMyAdmin. Se preferisci procedere utilizzando il plugin auth_socket, passa al Passaggio 4.
Se invece desideri connetterti utilizzando una password, devi configurare il metodo di autenticazione per utilizzare mysql_native_password.
Avvia il prompt di MySQL inserendo il seguente comando:
|
1 |
sudo mysql |
MySQL viene fornito con diversi database predefiniti. Puoi visualizzare un elenco dei database predefiniti inserendo la seguente query nel tuo terminale:
|
1 |
show databases; |

Il database chiamato mysql memorizza diverse configurazioni relative a MySQL. Questo database ha una tabella chiamata users che contiene i dettagli dell'utente e il metodo di autenticazione per ciascuno. Possiamo usare query SQL per recuperare, modificare ed eliminare informazioni da una tabella. Inserisci la seguente query nel tuo terminale per ottenere dettagli su quale metodo di autenticazione utilizza ciascun utente:
|
1 |
SELECT user, authentication_string, plugin, host FROM mysql.user; |

L'output sopra mostra che l'utente root si autentica effettivamente utilizzando il plugin auth_socket. Per modificare il metodo di autenticazione per l'utente root, inserisci la seguente istruzione nel tuo terminale. Ricorda di modificarla per corrispondere alla complessità della password per il livello medio che avevamo impostato in un passaggio precedente, altrimenti causerà un errore:
|
1 |
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mypassword'; |
Una volta che la query è stata eseguita con successo, esegui il comando flush privileges affinché le modifiche abbiano effetto immediato:
|
1 |
FLUSH PRIVILEGES; |
Esegui nuovamente l'istruzione select qui sotto per verificare se le modifiche hanno avuto effetto:
|
1 |
SELECT user,authentication_string,plugin,host FROM mysql.user; |

Dall'output, l'utente root ora si autenticherà utilizzando mysql_native_password. Puoi uscire dal prompt di mysql digitando exit e premendo invio.
Puoi provare ad accedere con la password che hai impostato inserendo il seguente comando:
|
1 |
mysql -u root –p |
Il prompt ti chiederà la password. Se corrisponde, vedrai il prompt di MySQL. Hai configurato con successo il tuo server con MySQL. Successivamente, esci dal prompt di MySQL.
Passaggio 4: Installazione di PHP e configurazione di Nginx per l'utilizzo del processore PHP
PHP è un acronimo per PHP: Hypertext Preprocessor. È un linguaggio di scripting lato server open-source ampiamente utilizzato per siti web e applicazioni web. PHP si occupa del quarto requisito dello stack LEMP. PHP aiuta a generare contenuti dinamici su un sito web. Può essere utilizzato come intermediario tra le tue pagine web e il sistema di database. Legge i dati dal database e li presenta ai visitatori del tuo sito web. Inoltre, può inserire, aggiornare ed eliminare dati dal database.
Nginx non dispone dei plugin nativi per l'elaborazione di PHP come altri server web, quindi è necessario installare php-fpm per passare le richieste da Nginx a PHP per l'elaborazione. Innanzitutto, aggiungi il repository Ubuntu universe che contiene software libero e open-source gestito dalla comunità di Ubuntu. Inserisci il seguente comando nel tuo terminale:
|
1 |
sudo add-apt-repository universe |
Quindi, installa il pacchetto php-fpm insieme al pacchetto helper php-msql per consentire a PHP di comunicare con MySQL, utilizzando il seguente comando:
|
1 |
sudo apt install php-fpm php-mysql |
Al momento della stesura di questa guida, la versione di PHP installata dal comando precedente è la 7.2.24. Di conseguenza, installa il pacchetto php-fpm7.2. Tienilo a mente quando aggiorni i blocchi del server e assicurati di inserire la versione corretta, altrimenti la tua pagina non si caricherà.
Puoi verificare la versione di PHP inserendo il seguente comando:
|
1 |
php -v |

A questo punto, tutti i componenti dello stack LEMP sono stati installati. Ciò che devi fare ora è configurare Nginx per indirizzare le richieste al processore PHP. In Nginx, la configurazione viene eseguita all'interno di blocchi server. I blocchi server sono equivalenti ai virtual host di Apache. Per ulteriori informazioni, puoi dare un'occhiata al nostro tutorial sui blocchi server di Nginx.
Per questo tutorial, creiamo un blocco server per un dominio test.com con lo stesso nome, sei libero di scegliere il nome che preferisci. I blocchi server si trovano nella directory /etc/nginx/sites-available/. Usa nano per creare il file del blocco server inserendo il seguente comando:
|
1 |
sudo nano /etc/nginx/sites-available/test.com |
Digita il seguente script nel file:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
server { listen 80; root /var/www/html; index index.php index.html index.htm index.nginx-debian.html; server_name test.com; location / { try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; } location ~ /\.ht { deny all; } } |
Ecco una breve descrizione di ciò che fa ciascuna direttiva:
- listen – definisce la porta su cui Nginx rimarrà in ascolto. La porta 80 è la porta predefinita, tuttavia, se avessi configurato SSL, dovresti inserire 443.
- root – contiene la directory in cui verrà memorizzata la directory del sito.
- index – indica a Nginx di dare la priorità alla pubblicazione dei file index.php, se disponibili su richiesta.
- server_name – definisce il nome del blocco server, contiene l'indirizzo IP pubblico o il nome di dominio del tuo server.
- location/ – il primo blocco location contiene la direttiva try_files. Verifica l'esistenza di file corrispondenti a una richiesta URI; se non trovati, viene restituito un errore 404.
- location ~ \.php$ – questa direttiva gestisce l'elaborazione PHP indirizzando le richieste di Nginx attraverso il file fastcgi-php.conf e il file php7.2-fpm.sock che definisce quale socket associare a php-fpm. Questo comando controlla lo stato di php-fpm, specifichiamo la versione come 7.2, che è quella che abbiamo. Assicurati di verificare con la versione in tuo possesso:
|
1 |
sudo service php7.2-fpm status |
- location ~ /\.ht – questa direttiva gestisce i file .htaccess, che non vengono elaborati da Nginx. La direttiva deny all garantisce che nessun file htaccess venga servito ai visitatori.
Dopo aver aggiunto lo script al file test.com, premi Ctrl + O, quindi premi Invio per salvare il file. Premi Ctrl + X per chiudere l'editor.
Quindi, devi abilitare il blocco server inserendo il seguente comando per creare un collegamento simbolico a /etc/nginx/sites-enabled:
|
1 |
sudo ln -s /etc/nginx/sites-available/test.com /etc/nginx/sites-enabled/ |
Quindi, scollega il blocco server predefinito da sites-enabled inserendo il seguente comando:
|
1 |
sudo unlink /etc/nginx/sites-enabled/default |
Verifica la tua nuova configurazione inserendo il seguente comando:
|
1 |
sudo nginx -t |
Se la sintassi è corretta, ricarica Nginx con il seguente comando:
|
1 |
sudo systemctl reload nginx |
In questa fase, il tuo stack LEMP è stato installato e configurato. Nel passaggio successivo, creeremo un file di test solo per essere sicuri che i vari componenti si connettano correttamente.
Passo 5: Creazione di un file PHP per testare lo stack LEMP
In questo passaggio, creeremo un file .php e lo eseguiremo sul server Nginx per verificare se funziona correttamente. Utilizzeremo la funzione globale phpinfo() per verificare i pacchetti php disponibili. Inserisci il seguente comando per aprire un file .php in nano:
|
1 |
sudo nano /var/www/html/test.php |
Nell'editor nano, digita il seguente frammento di codice:
|
1 |
<?php phpinfo(); |
Salva e chiudi il file. Per visitare la pagina appena creata nel tuo browser, trova il tuo dominio o indirizzo IP e naviga verso di esso come segue:
|
1 |
http://your_server_domain_or_IP/test.php |
Dovresti essere in grado di vedere la pagina delle informazioni di PHP:

La pagina sopra mostra che hai configurato Nginx con successo. Poiché il file creato per il test contiene informazioni dettagliate sul tuo server, dovresti ricordarti di rimuoverlo. Inserisci il seguente comando per rimuovere il file:
|
1 |
sudo rm /var/www/html/test.php |
Se in futuro avrai bisogno di testare nuovamente le tue configurazioni, potrai sempre ricreare il file.
Conclusione
In questo tutorial, hai configurato uno stack LEMP su Ubuntu 20.04, che è uno degli stack di sviluppo di applicazioni web più potenti disponibili. Da qui, dovresti essere in grado di ospitare quasi qualsiasi sito web, applicazione web o logica lato server per la tua applicazione mobile. Per garantire che il tuo sito web offra contenuti tramite una connessione SSL sicura, ti consigliamo di dare un'occhiata al nostro tutorial sulla configurazione dei certificati SSL sul server Nginx.
Buona programmazione!
Commenti
Ancora nessun commento. Scrivi il primo.