LEMP Stack · 15 min read · Oct 13, 2025

Come installare Nginx con PHP e MariaDB (LEMP Stack) con Opcache, Redis e Let's Encrypt su Ubuntu

L’acronimo “LEMP” sta per un gruppo di software che viene tipicamente installato insieme per abilitare un server a ospitare siti web dinamici e applicazioni web. Questo termine è in realtà un acronimo che rappresenta quattro componenti chiave:

  1. L inux: Il sistema operativo. Linux è un popolare sistema operativo open-source che funge da base per il server.
  2. E ngine-X (pronunciato come “nginx”): Il server web. Nginx è un server web ad alte prestazioni noto per la sua stabilità, ricca gamma di funzionalità, configurazione semplice e basso consumo di risorse.
  3. M ySQL o MariaDB: Il sistema di database. MySQL è un sistema di gestione di database relazionali ampiamente utilizzato che memorizza e gestisce i dati per il sito web o l’applicazione. Si noti che MySQL è talvolta sostituito da MariaDB, un fork migliorato, completamente open-source e sviluppato dalla comunità di MySQL.
  4. P HP: Il linguaggio di programmazione. PHP è un linguaggio di scripting lato server progettato per lo sviluppo web, ma utilizzato anche come linguaggio di programmazione di uso generale.

Il stack LEMP è una scelta popolare per ospitare siti web che richiedono un database e un’elaborazione lato server, come i siti web WordPress, le piattaforme di e-commerce e altre applicazioni web dinamiche. È comparabile al stack LAMP, dove Apache (rappresentato dalla “A” in LAMP) è utilizzato al posto di Nginx.

In questa guida, installerai un stack LEMP su un server basato su Ubuntu 20.04. Installeremo anche phpMyAdmin, Redis, Opcache e Let’s Encrypt SSL.

Prerequisiti

  • Un server che esegue Ubuntu 20.04.
  • Un utente sudo non root.
  • Assicurati che tutto sia aggiornato. shell $ sudo apt update $ sudo apt upgrade
  • Alcuni pacchetti di cui il tuo sistema ha bisogno. shell $ sudo apt install wget curl nano -y Alcuni di questi pacchetti potrebbero già essere installati sul tuo sistema.

Configura il Firewall

Il primo passo è configurare il firewall. Ubuntu viene fornito di default con ufw (Uncomplicated Firewall).

Controlla se il firewall è attivo.

$ sudo ufw status

Dovresti ottenere il seguente output.

Status: inactive

Consenti la porta SSH in modo che il firewall non interrompa la connessione attuale quando viene abilitato.

$ sudo ufw allow OpenSSH

Consenti anche le porte HTTP e HTTPS.

$ sudo ufw allow 80
$ sudo ufw allow 443

Abilita il Firewall

$ sudo ufw enable
Il comando potrebbe interrompere le connessioni ssh esistenti. Procedere con l'operazione (y|n)? y
Il firewall è attivo e abilitato all'avvio del sistema

Controlla di nuovo lo stato del firewall.

$ sudo ufw status

Dovresti vedere un output simile.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80                         ALLOW       Anywhere
443                        ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80 (v6)                    ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

Installa PHP

Ubuntu 20.04 di default include PHP 7.4, ma per avere un repository PHP aggiornato, aggiungeremo il repository PHP di Ondrej.

Installa il repository PHP di Ondrej.

$ sudo add-apt-repository ppa:ondrej/php

Installa PHP 7.4 insieme ad alcuni pacchetti aggiuntivi.

$ sudo apt install php-cli php-fpm php-mysql -y

Controlla se PHP funziona correttamente.

$ php --version

Dovresti vedere un output simile.

PHP 7.4.5 (cli) (built: Apr 28 2020 14:49:23) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.5, Copyright (c), by Zend Technologies

Installa MariaDB

MariaDB è un sostituto diretto di MySQL, il che significa che i comandi per eseguire e gestire MariaDB sono gli stessi di quelli per MySQL.

Ubuntu 20.04 di default include MariaDB 10.3, che è un po’ obsoleto. Per ottenere l’ultima versione stabile di MariaDB, installeremo il suo repository ufficiale.

Aggiungi il repository ufficiale di MariaDB.

$ sudo apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
$ sudo add-apt-repository 'deb [arch=amd64] http://mirror.lstn.net/mariadb/repo/10.4/ubuntu focal main'

Per installare MariaDB emetti il seguente comando.

$ sudo apt install mariadb-server -y

Controlla se MariaDB è stato installato correttamente.

$ mysql --version

Dovresti vedere il seguente output.

mysql  Ver 15.1 Distrib 10.4.13-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

Abilita il servizio MariaDB.

$ sudo systemctl enable mariadb

Esegui il seguente comando per eseguire la configurazione predefinita, come impostare una password per root, rimuovere gli utenti anonimi, vietare il login remoto per root e eliminare le tabelle di test.

$ sudo mysql_secure_installation

Con MariaDB 10.4, ora ti verrà chiesto di utilizzare la password di root o il plugin unix_socket. Il plugin unix_socket ti consente di accedere a MariaDB con le credenziali del tuo utente Linux. È considerato più sicuro, anche se avrai bisogno di un nome utente/password tradizionale per utilizzare app di terze parti come phpMyAdmin. Ci atteniamo all’uso del plugin unix_socket per questo tutorial. Puoi comunque utilizzare phpMyAdmin tramite qualsiasi utente specifico che crei per i tuoi database.

Premere Invio sceglie l’opzione predefinita (quella in maiuscolo, Y in questo caso).

NOTA: È RACCOMANDATO ESEGUIRE TUTTE LE PARTI DI QUESTO SCRIPT PER TUTTI I SERVER MariaDB IN USO IN PRODUZIONE!  LEGGI ATTENTAMENTE OGNI PASSO!

Per accedere a MariaDB per proteggerlo, avremo bisogno della password attuale per l'utente root. Se hai appena installato MariaDB e non hai ancora impostato la password di root, dovresti semplicemente premere invio qui.

Inserisci la password attuale per root (premi invio se non ce n'è): [PREMI INVIO]
OK, password utilizzata con successo, procedendo...

Impostare la password di root o utilizzare unix_socket garantisce che nessuno possa accedere all'utente root di MariaDB senza la corretta autorizzazione.

Hai già protetto il tuo account root, quindi puoi rispondere in sicurezza 'n'.

Passare all'autenticazione unix_socket [Y/n] [PREMI INVIO]
Abilitato con successo!
Ricaricamento delle tabelle di privilegi..
 ... Successo!

Hai già protetto il tuo account root, quindi puoi rispondere in sicurezza 'n'.

Cambiare la password di root? [Y/n] [RISPOSTA n]
... salto.

Per impostazione predefinita, un'installazione di MariaDB ha un utente anonimo, che consente a chiunque di accedere a MariaDB senza dover avere un account utente creato per loro.  Questo è destinato solo per test e per rendere l'installazione un po' più fluida.  Dovresti rimuoverli prima di passare a un ambiente di produzione.

Rimuovere gli utenti anonimi? [Y/n] [PREMI INVIO]
 ... Successo!

Normalmente, root dovrebbe essere autorizzato a connettersi solo da 'localhost'.  Questo garantisce che qualcuno non possa indovinare la password di root dalla rete.

Vietare il login remoto per root? [Y/n] [PREMI INVIO]
 ... Successo!

Per impostazione predefinita, MariaDB viene fornito con un database chiamato 'test' a cui chiunque può accedere.  Questo è anche destinato solo per test e dovrebbe essere rimosso prima di passare a un ambiente di produzione.

Rimuovere il database di test e l'accesso ad esso? [Y/n] [PREMI INVIO]
 \- Eliminazione del database di test...
 ... Successo!
 \- Rimozione dei privilegi sul database di test...
 ... Successo!

Ricaricare le tabelle di privilegi garantirà che tutte le modifiche apportate finora abbiano effetto immediato.

Ricaricare le tabelle di privilegi ora? [Y/n] [PREMI INVIO]
 ... Successo!

Pulizia...

Tutto fatto!  Se hai completato tutti i passaggi sopra, la tua installazione di MariaDB dovrebbe ora essere sicura.

Grazie per aver utilizzato MariaDB!

Questo è tutto. La prossima volta che vuoi accedere a MySQL, usa il seguente comando

$ sudo mysql

Inserisci la tua password di root quando richiesto.

Installa Redis

Usa il seguente comando per installare Redis e l’estensione PHP Redis corrispondente.

$ sudo apt install redis php-redis

Configura il Server Redis

Eseguiamo alcune configurazioni di base sul server Redis.

Apri il file /etc/redis/redis.conf con l’editor Nano.

$ sudo nano /etc/redis/redis.conf

All’interno del file, individua la direttiva supervised. Questa direttiva ti consente di dichiarare un sistema di init per gestire Redis come servizio. È impostata su no per impostazione predefinita. Poiché stiamo utilizzando Ubuntu che utilizza il sistema di init systemd, cambia il suo valore da no a systemd come segue.

supervised systemd

Se desideri che i client remoti si connettano alla tua istanza Redis, trova la riga bind 127.0.0.1 e cambiala in:

bind 0.0.0.0

Puoi anche cambiare la porta predefinita su cui Redis ascolta da 6379 a un valore di tua scelta.

port 3458

Per configurare Redis come server di cache, imposta i seguenti valori come indicato.

maxmemory 256mb
maxmemory-policy allkeys-lru

Questo dice a Redis di rimuovere qualsiasi chiave utilizzando l’algoritmo LRU quando la memoria massima di 256 MB viene raggiunta. Puoi impostare il valore della memoria in base alle tue esigenze e al server che stai utilizzando.

Puoi impostare una password in modo che qualsiasi client che necessita di Redis debba prima autenticarsi. Per fare ciò, imposta una password utilizzando la seguente direttiva.

requirepass  

Puoi trovare ulteriori direttive da modificare nel file di configurazione. Una volta terminato, premi Ctrl + X e inserisci Y quando richiesto di salvare il file.

Riavvia il server Redis per applicare le modifiche.

$ sudo systemctl restart redis

Dovremo anche aggiungere la regola nel nostro Firewall se desideri che i client remoti si connettano ad esso. Altrimenti, puoi saltare questo passaggio.

$ sudo ufw allow 6379/tcp

Dovrai cambiare il valore nel comando sopra per corrispondere a qualsiasi porta tu abbia scelto nel file di configurazione sopra.

Installa Nginx

Ubuntu 20.04 di default include l’ultima versione Mainline di Nginx. (1.17.10). Tuttavia, passeremo a utilizzare il repository stabile ufficiale di Nginx.

Installa prima alcuni prerequisiti.

$ sudo apt install curl gnupg2 ca-certificates lsb-release

Alcuni di questi sono già installati sul tuo sistema.

Aggiungi il repository di Nginx.

$ echo "deb [arch=amd64] http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
$ curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add -

Installa Nginx.

$ sudo apt update
$ sudo apt install nginx -y

Controlla se funziona correttamente.

$ nginx -v

Dovresti vedere il seguente output a seconda della versione di Nginx che hai scelto di installare.

nginx version: nginx/1.18.0

Avvia e abilita Nginx.

$ sudo systemctl start nginx
$ sudo systemctl enable nginx

Apri l’indirizzo IP del tuo server in un browser per vedere la seguente pagina. Significa che Nginx sta funzionando correttamente.

Pagina predefinita di Nginx

Configura Nginx

Imposta le directory in cui vivranno i blocchi del server.

$ sudo mkdir /etc/nginx/sites-available
$ sudo mkdir /etc/nginx/sites-enabled

Crea la directory in cui vivrà il tuo sito.

$ sudo mkdir /var/www/example.com/html -p

Utilizzando la direttiva -p si creano le directory padre che non esistevano prima.

Esegui il seguente comando per aggiungere un file di configurazione per il tuo sito.

$ sudo nano /etc/nginx/sites-available/example.com.conf

Incolla il seguente codice nell’editor.

server {
  listen          *:80;
  server_name     example.com;
  root            /var/www/example.com/html;
  index           index.php index.html;

  location / {
    try_files   $uri $uri/ =404;
  }
    
  access_log /var/log/nginx/example.com.access.log;
  error_log /var/log/nginx/example.com.error.log;

  location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass  unix:/run/php/php7.4-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_index index.php;
    include  fastcgi_params;
  }
}

Premi Ctrl + X per chiudere l’editor e premi Y quando richiesto di salvare il file.

Questo file presume che ospiteremo example.com nella directory /var/www/html. Se non utilizzerai alcun dominio e configuri il tuo server per essere accessibile solo tramite l’indirizzo IP/localhost, dovrai rimuovere le impostazioni corrispondenti del blocco del server dal file nginx.conf, altrimenti interferirà con il blocco del server che creerai.

Attiva questo file di configurazione collegandolo alla directory sites-enabled.

$ sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/

Apri il file /etc/nginx/nginx.conf per la modifica.

$ sudo nano /etc/nginx/nginx.conf   

Incolla le seguenti righe dopo la riga include /etc/nginx/conf.d/*.conf

include /etc/nginx/sites-enabled/*.conf;
server_names_hash_bucket_size 64;
types_hash_max_size 4096;

Premi Ctrl + X per chiudere l’editor e premi Y quando richiesto di salvare il file. Testa la configurazione di Nginx.

$ sudo nginx -t

Dovresti vedere il seguente output che indica che la tua configurazione è corretta.

nginx: il file di configurazione /etc/nginx/nginx.conf ha una sintassi corretta
nginx: il test del file di configurazione /etc/nginx/nginx.conf è riuscito

Ricarica il servizio Nginx.

$ sudo systemctl reload nginx

Configura PHP-FPM

Apri il file /etc/php-fpm.d/www.conf.

$ sudo nano /etc/php/7.4/fpm/pool.d/www.conf

Dobbiamo impostare l’utente/gruppo Unix dei processi PHP su nginx. Trova le righe user=www-data e group=www-data nel file e cambiale in nginx.

...
; Utente/gruppo Unix dei processi
; Nota: L'utente è obbligatorio. Se il gruppo non è impostato, verrà utilizzato il gruppo dell'utente predefinito
;       sarà utilizzato.
; RPM: utente apache scelto per fornire accesso alle stesse directory di httpd
user = nginx
; RPM: Mantieni un gruppo autorizzato a scrivere nella directory di log.
group = nginx
...

Inoltre, trova le righe listen.owner=www-data e listen.group=www-data nel file e cambiale in nginx.

listen.owner = nginx
listen.group = nginx

Salva il file premendo Ctrl + X e inserendo Y quando richiesto.

Riavvia il processo PHP-fpm.

$ sudo systemctl restart php7.4-fpm

Per testare la tua configurazione PHP, crea un file test.php nella cartella html.

$ sudo nano /var/www/example.com/html/test.php

Aggiungi il seguente contenuto e salva il file premendo Ctrl + X e inserendo Y quando richiesto.

Lancia http:///test.php nel tuo browser e dovresti vedere il seguente.

Informazioni PHP

Installa phpMyAdmin

Installeremo phpMyAdmin manualmente per il nostro tutorial.

Per prima cosa, dobbiamo installare alcuni pacchetti PHP aggiuntivi affinché phpMyAdmin funzioni.

$ sudo apt install php-mbstring php-zip php-gd php-json php-curl php-bz2 php-xml

Passa alla directory /usr/share per scaricare e installare phpMyAdmin.

$ cd /usr/share

Scarica i file di phpMyAdmin. (Controlla l’ultima versione dal suo sito) Installeremo solo la versione in lingua inglese.

$ sudo wget https://files.phpmyadmin.net/phpMyAdmin/5.0.2/phpMyAdmin-5.0.2-english.tar.gz
$ tar xvzf phpMyAdmin-5.0.2-english.tar.gz
$ sudo mv phpMyAdmin-5.0.2-english /usr/share/phpmyadmin
$ sudo rm phpMyAdmin*.tar.gz

Dai i permessi appropriati alla cartella di phpMyAdmin.

$ sudo chown -R nginx:nginx phpmyadmin 
$ sudo chmod -R 744 phpmyadmin 

Configura phpMyAdmin

Crea il file di configurazione dal file di esempio fornito con il pacchetto.

$ sudo cp /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php

Dobbiamo aggiungere un valore segreto nel file di configurazione per motivi di cookie e sicurezza. Usa i seguenti comandi per generare e aggiungere il codice.

$ randomBlowfishSecret=$(openssl rand -base64 32)
$ sed -i "s|cfg\['blowfish_secret'\] = ''|cfg['blowfish_secret'] = '$randomBlowfishSecret'|" /usr/share/phpmyadmin/config.inc.php

Affinché il server web Nginx trovi e serva correttamente i file di phpMyAdmin, dovremo creare un collegamento simbolico dalla sua posizione effettiva alla directory del documento radice di Nginx.

Per fare ciò, esegui il seguente comando.

$ sudo ln -s /usr/share/phpmyadmin /var/www/example.com/html/phpmyadmin

La tua installazione di phpMyAdmin è operativa. Per accedervi, apri semplicemente http://example.com/phpmyadmin.

Per impostazione predefinita, questa posizione predefinita dovrebbe essere cambiata poiché è la posizione più comune che qualsiasi hacker può localizzare la tua installazione di phpMyAdmin. Per fare ciò, esegui il seguente comando.

$ sudo mv /var/www/example.com/html/phpmyadmin /var/www/example.com/html/sm123

Fondamentalmente, abbiamo spostato la nostra posizione di phpMyAdmin nella cartella sm123. Per accedervi, ora dovrai aprire http://example.com/sm123 nel tuo browser.

Poiché stiamo utilizzando unix_authentication con MySQL qui, non c’è utente root da accedere tramite phpMyAdmin. Dovrai prima creare un utente MySQL e dargli privilegi sui database per poter utilizzare phpMyAdmin.

Per fare ciò, accedi alla shell di MySQL.

$ sudo mysql

Ora, incolla i seguenti comandi per creare un nuovo utente e concedergli tutti i privilegi sui database.

CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'user'@'localhost';
FLUSH PRIVILEGES;
EXIT

Ora puoi accedere utilizzando questo utente su http://example.com/phpmyadmin.

Configura Opcache

Se hai seguito questo tutorial, Opcache dovrebbe già essere installato con PHP. Nel caso non lo sia, puoi semplicemente installare Opcache utilizzando il seguente comando.

$ sudo apt install php7.4-opcache   

Verifica che sia stato installato.

$ php -v
PHP 7.4.5 (cli) (built: Apr 28 2020 14:49:23) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.5, Copyright (c), by Zend Technologies

Per modificare le impostazioni di Opcache, apri il file /etc/php/7.4/fpm/conf.d/10-opcache.ini.

$ sudo nano /etc/php/7.4/fpm/conf.d/10-opcache.ini

Incolla il seguente codice alla fine del file. Le seguenti impostazioni dovrebbero aiutarti a iniziare a utilizzare Opcache e sono generalmente raccomandate per buone prestazioni.

opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60

Salva il file premendo Ctrl + X e inserendo Y quando richiesto.

Riavvia il server per applicare le impostazioni.

$ sudo systemctl restart php7.4-fpm

Installa SSL tramite Let’s Encrypt

SSL è diventato una parte essenziale di qualsiasi sito web. Qui installeremo SSL utilizzando il servizio Let’s Encrypt.

Per questo, prima installa lo strumento Certbot.

$ sudo apt install certbot python3-certbot-nginx

Genera i certificati.

$ sudo certbot --nginx -d example.com

Se è la prima volta che esegui certbot sul tuo sistema, ti verrà chiesto un indirizzo email e di accettare i termini di servizio. Ti verrà anche chiesto se accetti di condividere i dati con la fondazione EFF, a cui puoi rispondere di no. Dopo aver fatto ciò, certbot comunicherà con i server di Let’s Encrypt e eseguirà una sfida per verificare i tuoi domini.

Se ciò ha successo, ti verrà chiesto come gestire i reindirizzamenti HTTPS.

Si prega di scegliere se l'accesso HTTPS è richiesto o facoltativo.
-------------------------------------------------------------------------------
1: Facile - Consenti l'accesso sia HTTP che HTTPS a questi siti
2: Sicuro - Fai sì che tutte le richieste vengano reindirizzate all'accesso HTTPS sicuro
-------------------------------------------------------------------------------
Seleziona il numero appropriato [1-2] quindi [invio] (premi 'c' per annullare):

Seleziona la tua scelta e premi invio. I tuoi certificati verranno quindi creati e i tuoi file di configurazione Nginx verranno aggiornati con le impostazioni SSL.

I tuoi certificati sono pronti e puoi aprire il tuo sito ora andando su https://example.com

Verifica il rinnovo automatico di SSL

Questo è l’ultimo passaggio prima di concludere questo tutorial.

Controlla il processo di rinnovo eseguendo un tentativo di rinnovo.

$ sudo certbot renew --dry-run

Se non ricevi errori, significa che sei a posto. Certbot rinnoverà automaticamente i tuoi certificati per te. Riceverai un’email di avviso riguardo la scadenza del certificato.

Conclusione

Questo è tutto per questo tutorial. La tua configurazione LEMP è completa e puoi iniziare a creare e ospitare i tuoi siti web e applicazioni.

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.