Sei stanco delle limitazioni e delle prestazioni altalenanti dell’hosting condiviso? Ti senti come in un condominio sovraffollato, dove le azioni dei “vicini” influenzano il tuo sito? Forse è il momento di fare il salto di qualità e passare a un VPS (Virtual Private Server).
Molti pensano che sia un passo riservato solo agli esperti di sistemi, con costi proibitivi. In realtà, oggi esistono soluzioni VPS potenti e convenienti, spesso allo stesso prezzo di un buon hosting condiviso, che ti danno il pieno controllo e prestazioni dedicate per il tuo sito WordPress.
Certo, richiede un po’ più di lavoro iniziale rispetto a un hosting “pronto all’uso”, ma la libertà e le performance ripagano lo sforzo.
Questa guida è pensata proprio per te, per accompagnarti passo passo nel processo di configurazione di un ambiente ottimale per WordPress sul tuo nuovo VPS Ubuntu 22.04, utilizzando lo stack LEMP: Linux, Nginx (un web server noto per le sue performance), MySQL (il database) e PHP (il linguaggio di WordPress).
Imparerai come installare WordPress LEMP e avere finalmente il tuo spazio dedicato, senza vicini rumorosi!
1. Introduzione a WordPress e LEMP
WordPress, uno dei sistemi di gestione dei contenuti (CMS) più popolari su Internet, consente agli utenti di creare blog e siti web flessibili utilizzando un backend MySQL con elaborazione PHP. WordPress è un’ottima scelta per mettere online un sito web in modo efficiente.
Dopo una configurazione iniziale, quasi tutta l’amministrazione dei siti web WordPress può essere eseguita tramite la sua interfaccia grafica.
In questo tutorial, ci concentreremo su come ottenere un’istanza di WordPress configurata su uno stack LEMP (Linux, Nginx, MySQL e PHP) per un server Ubuntu 22.04. Imparare a installare WordPress LEMP ti darà solide basi.
2. Prerequisiti Fondamentali
Per completare questo tutorial, avrai bisogno dell’accesso a un server Ubuntu 22.04 (ad esempio, un VPS da provider come DigitalOcean, Vultr, Linode, Aruba Cloud, ecc.).
Per installare WordPress LEMP con successo sul tuo server, dovrai anche eseguire le seguenti attività prima di iniziare questo tutorial specifico (tratteremo comunque i passaggi base qui, ma guide dedicate potrebbero offrire più dettagli):
- Creare un utente sudo sul tuo server: I passaggi in questo tutorial utilizzano un utente non
root
con privilegisudo
. È una pratica fondamentale per la sicurezza. - Avere un nome di dominio registrato puntato all’IP pubblico del tuo VPS. Questo è necessario per configurare correttamente HTTPS con Let’s Encrypt.
- Avere familiarità con la linea di comando Linux.
I passaggi che copriremo includono l’installazione dello stack LEMP e la protezione del sito con SSL.
3. Configurazione Iniziale del Server Ubuntu 22.04
Quando crei per la prima volta un nuovo server Ubuntu, dovresti eseguire alcuni importanti passaggi di configurazione come parte dell’impostazione iniziale.
Questi passaggi aumenteranno la sicurezza e l’usabilità del tuo server e ti daranno una solida base per le azioni successive.
3.1 Accesso come root
Per interagire con il tuo server VPS, dovrai stabilire una connessione sicura tramite SSH (Secure Shell).
Il metodo esatto e lo strumento da utilizzare dipendono dal tuo sistema operativo:
- Su Windows: Lo strumento più comune e gratuito è PuTTY. Puoi scaricarlo dal sito ufficiale (https://www.putty.org/). Una volta scaricato e avviato, dovrai:
- Inserire l’Indirizzo IP Pubblico del tuo server nel campo “Host Name (or IP address)“.
- Assicurarti che la porta sia impostata su 22 (la porta standard per SSH).
- Assicurarti che il tipo di connessione sia impostato su SSH.
- (Opzionale ma consigliato per chiavi SSH): Se usi l’autenticazione tramite chiave SSH, vai su “Connection” » “SSH” » “Auth” » “Credentials” nel menu a sinistra e clicca su “Browse…” per selezionare il tuo file di chiave privata (
.ppk
). - Clicca su “Open” per avviare la connessione.
- Su macOS o Linux: Non hai bisogno di installare software aggiuntivo. Puoi usare l’applicazione Terminale integrata.
- Apri il Terminale e digita il seguente comando, sostituendo
your_server_ip
con l’indirizzo IP pubblico del tuo server:ssh root@your_server_ip
- Se usi una chiave SSH con un percorso specifico, potresti doverla indicare con l’opzione
-i
:ssh -i /percorso/della/tua/chiave_privata root@your_server_ip
- Apri il Terminale e digita il seguente comando, sostituendo
La Connessione:
Indipendentemente dallo strumento usato, la prima volta che ti connetti, potresti vedere un avviso sull’autenticità dell’host.
Questo è normale. Digita yes e premi ENTER per confermare e salvare l’impronta digitale del server.
Successivamente, ti verrà richiesto di autenticarti:
- Se usi la password: Inserisci la password dell’utente
root
che ti è stata fornita dal tuo provider VPS (o che hai impostato). Nota che mentre digiti la password nel terminale/PuTTY, non vedrai caratteri apparire sullo schermo per motivi di sicurezza. Premi ENTER dopo averla digitata. Se è il primo accesso, potrebbe esserti richiesto di cambiare immediatamente la password. - Se usi una chiave SSH: Se la tua chiave non è protetta da passphrase, la connessione avverrà automaticamente. Se hai impostato una passphrase per la tua chiave privata, ti verrà richiesta ora. Inseriscila e premi ENTER.
Una volta autenticato con successo, vedrai il prompt dei comandi del tuo server, che indica che sei connesso come utente root
.
Nota su root: L’utente
root
è l’utente amministrativo in un ambiente Linux con privilegi elevati. A causa dei privilegi elevati dell’accountroot
, si sconsiglia di usarlo regolarmente. L’accountroot
può apportare modifiche molto distruttive, anche per errore. Il passo successivo è configurare un nuovo account utente con privilegi ridotti per l’uso quotidiano.
3.2 Creazione di un Nuovo Utente
Una volta effettuato l’accesso come root
, sarai in grado di aggiungere il nuovo account utente. In futuro, accederemo con questo nuovo account invece che con root
.
Questo esempio crea un nuovo utente chiamato sammy
, ma dovresti sostituirlo con un nome utente che preferisci:
adduser sammy
Ti verranno poste alcune domande, a partire dalla password dell’account. Inserisci una password complessa e, facoltativamente, compila eventuali informazioni aggiuntive che desideri.
Queste informazioni non sono richieste e puoi premere ENTER in qualsiasi campo che desideri saltare.
3.3 Concessione Privilegi Amministrativi (sudo)
Ora hai un nuovo account utente con privilegi di account regolari. Tuttavia, a volte avrai bisogno di eseguire attività amministrative.
Per evitare di dover sempre usare l’utente root
, puoi concedere privilegi di superuser
al tuo nuovo utente tramite il comando sudo
.
Per aggiungere questi privilegi al tuo nuovo utente, aggiungilo al gruppo di sistema sudo
.
Come root
, esegui questo comando (sostituisci sammy
con il tuo nuovo utente):
usermod -aG sudo sammy
Ora puoi anteporre sudo
ai comandi per eseguirli con privilegi elevati quando sei loggato come il tuo utente regolare.
3.4 Impostazione del Firewall (UFW)
I server Ubuntu utilizzano UFW (Uncomplicated Firewall) per controllare le connessioni in entrata. Configuriamo le regole base. OpenSSH (per la connessione SSH) ha un profilo predefinito.
Verifica i profili disponibili:
ufw app list
Output atteso (minimo):
Available applications:
OpenSSH
Consenti le connessioni SSH:
ufw allow OpenSSH
Abilita il firewall:
ufw enable
Digita y e premi ENTER per confermare.
Verifica lo stato:
ufw status
Output atteso:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Il firewall ora blocca tutto tranne SSH. Dovrai aggiungere regole per Nginx (HTTP/HTTPS) più avanti.
3.5 Abilitazione Accesso Esterno per l’Utente Regolare
Ora devi poter accedere direttamente con il tuo nuovo utente sudo
(es. sammy
).
- Se l’account root usa autenticazione tramite password:
Puoi già accedere con il nuovo utente via SSH:ssh sammy@your_server_ip
Inserisci la password del nuovo utente.
- Se l’account root usa autenticazione tramite chiave SSH:
Devi copiare la chiave pubblica dalroot
al nuovo utente.
Dalla sessioneroot
ancora attiva, esegui (sostituiscisammy
due volte):rsync --archive --chown=sammy:sammy ~/.ssh /home/sammy
(Assicurati che
~/.ssh
non abbia la barra finale).
Ora puoi disconnetterti dalla sessioneroot
e accedere con il nuovo utente da un nuovo terminale:ssh sammy@your_server_ip
Da questo punto in poi, esegui tutti i comandi come il tuo nuovo utente sudo
(es. sammy
), anteponendo sudo
ai comandi che richiedono privilegi di amministratore. Disconnettiti dalla sessione root
.
3.6 Imposta Aggiornamenti Automatici di Sicurezza (Consigliato)
Mantenere il sistema operativo aggiornato è cruciale per la sicurezza. Ubuntu offre un modo per installare automaticamente gli aggiornamenti di sicurezza.
Installa il pacchetto necessario:
sudo apt update
sudo apt install unattended-upgrades
Ora, abilita e configura gli aggiornamenti automatici eseguendo:
sudo dpkg-reconfigure --priority=low unattended-upgrades
Si aprirà un’interfaccia testuale. Seleziona <Yes> (o <Sì>) per abilitare gli aggiornamenti automatici e premi ENTER.
Questo aiuterà a mantenere il tuo server protetto senza intervento manuale per le patch di sicurezza critiche.
4. Installazione dello Stack LEMP (Nginx, MySQL, PHP)
Lo stack software LEMP è un gruppo di software che può essere utilizzato per servire pagine web dinamiche e applicazioni web scritte in PHP.
Questo acronimo descrive un sistema operativo Linux, con un web server Nginx.
I dati di backend sono archiviati nel database MySQL e l’elaborazione dinamica è gestita da PHP.
Ora vedremo come installare Nginx, MySQL e PHP, fondamentali per poter installare WordPress LEMP.
4.1 Installazione del Web Server Nginx
Per visualizzare le pagine web ai visitatori del sito, utilizzerai Nginx, un web server ad alte prestazioni. Utilizzerai il gestore di pacchetti APT per ottenere questo software.
Poiché questa è la prima volta che usi apt
per questa sessione, inizia aggiornando l’indice dei pacchetti del tuo server:
sudo apt update
Successivamente, esegui apt install
per installare Nginx:
sudo apt install nginx
Quando richiesto, premi Y e ENTER per confermare.
Una volta terminata l’installazione, il web server Nginx sarà attivo e funzionante sul tuo server Ubuntu.
Abilita Nginx nel firewall:
Al momento il firewall UFW blocca tutto tranne SSH. Dobbiamo consentire il traffico web.
Per ora, consentiamo solo HTTP (porta 80), HTTPS verrà gestito da Certbot in seguito.
sudo ufw allow 'Nginx HTTP'
sudo ufw status # Verifica che Nginx HTTP sia ALLOW
Crea struttura base e configurazione Nginx minima (prima di Certbot):
Questo passaggio prepara il terreno per Certbot e WordPress. Sostituisci your_domain
con il tuo nome di dominio reale ovunque appaia.
- Crea la directory web root:
sudo mkdir -p /var/www/your_domain
- Assegna proprietà:
Assegnala temporaneamente al tuo utentesudo
per facilitare i test iniziali.sudo chown -R $USER:$USER /var/www/your_domain
- Crea il file di configurazione Nginx minimo:
sudo nano /etc/nginx/sites-available/your_domain
Incolla questo contenuto base, sostituendo
your_domain
ewww.your_domain
:server { listen 80; server_name your_domain www.your_domain; root /var/www/your_domain; index index.html; location / { try_files $uri $uri/ =404; } }
Salva e chiudi (CTRL+X, Y, ENTER).
- Abilita il nuovo sito:
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/
- Disabilita la configurazione predefinita:
sudo unlink /etc/nginx/sites-enabled/default
- Testa e ricarica Nginx:
sudo nginx -t sudo systemctl reload nginx
- (Opzionale) Crea un file index.html di test:
echo "<h1>Ciao Nginx!</h1>" | sudo tee /var/www/your_domain/index.html
Visita
http://your_domain
(o il tuo IP) nel browser.
Dovresti vedere “Ciao Nginx!“. Se sì, Nginx è configurato correttamente per il tuo dominio sulla porta 80.
Puoi rimuovere questo file dopo (sudo rm /var/www/your_domain/index.html
).
4.2 Installare Certbot e Ottenere un Certificato SSL Let’s Encrypt (Fondamentale)
Per rendere sicuro il tuo sito (usare HTTPS) e abilitare funzionalità moderne come HTTP/2, installeremo un certificato SSL gratuito da Let’s Encrypt usando lo strumento Certbot.
Certbot automatizza l’ottenimento e il rinnovo dei certificati.
Passaggio 1: Installa Certbot e il plugin Nginx
Installa Certbot e il suo plugin specifico per Nginx:
sudo apt update
sudo apt install certbot python3-certbot-nginx
Passaggio 2: Verifica la configurazione di Nginx
Certbot ha bisogno di trovare un server block Nginx configurato correttamente per il tuo dominio per poter funzionare automaticamente.
Assicurati che il file di configurazione del tuo dominio (es. /etc/nginx/sites-available/your_domain
) esista e contenga le direttive server_name
corrette (con e senza www, se li usi entrambi) e che Nginx non abbia errori di sintassi:
sudo nginx -t
Se ci sono errori, correggili prima di procedere con Certbot.
Passaggio 3: Ottieni il certificato SSL
Esegui Certbot specificando il plugin Nginx e i domini per cui vuoi il certificato (sostituisci your_domain
e www.your_domain
con i tuoi domini reali):
sudo certbot --nginx -d your_domain -d www.your_domain
- –nginx: Indica a Certbot di usare il plugin Nginx per autenticare il dominio e modificare automaticamente la configurazione di Nginx per usare il nuovo certificato.
- -d: Specifica i domini da includere nel certificato. Elencali tutti con
-d
separati.
Passaggio 4: Segui le istruzioni di Certbot
Certbot ti guiderà attraverso alcuni passaggi:
- Ti chiederà di inserire un indirizzo email (usato per notifiche urgenti di rinnovo e sicurezza).
- Ti chiederà di accettare i Termini di Servizio di Let’s Encrypt.
- Ti chiederà se vuoi condividere la tua email con la Electronic Frontier Foundation (EFF), partner fondatore di Let’s Encrypt. È facoltativo.
- Infine, ti chiederà se vuoi reindirizzare automaticamente tutto il traffico HTTP a HTTPS. È fortemente consigliato scegliere l’opzione di reindirizzamento (solitamente l’opzione 2) per garantire che tutte le connessioni siano sicure.
Passaggio 5: Configurazione automatica di Nginx e reindirizzamento
Se scegli il reindirizzamento, il plugin --nginx
di Certbot modificherà automaticamente il tuo file di configurazione Nginx (quello in /etc/nginx/sites-available/your_domain
) aggiungendo le direttive listen 443 ssl;
, i percorsi ai file del certificato e della chiave (ssl_certificate
e ssl_certificate_key
), e le impostazioni per il reindirizzamento da HTTP a HTTPS.
Ricaricherà anche Nginx per applicare le modifiche.
Passaggio 6: Aggiorna le regole del Firewall
Ora che il tuo server è configurato per HTTPS, devi permettere il traffico sulla porta 443 attraverso il firewall UFW.
Puoi usare il profilo 'Nginx Full'
che permette sia HTTP (per il redirect) che HTTPS. Puoi anche rimuovere la regola solo HTTP se hai impostato il redirect.
sudo ufw allow 'Nginx Full'
sudo ufw delete allow 'Nginx HTTP' # Rimuove la regola solo HTTP
sudo ufw status # Verifica
Ora dovresti essere in grado di accedere al tuo sito tramite https://your_domain
e vedere un lucchetto nel browser.
Passaggio 7: Verifica il rinnovo automatico
Certbot configura automaticamente un timer systemd
o un cron job
che tenterà di rinnovare i tuoi certificati prima che scadano.
Puoi testare il processo di rinnovo (senza rinnovare effettivamente) con:
sudo certbot renew --dry-run
Se non vedi errori, sei a posto. Certbot si occuperà dei rinnovi per te.
4.3 Installazione di MySQL
Ora che hai un web server funzionante, devi installare il sistema di database per archiviare e gestire i dati per il tuo sito.
MySQL è un popolare sistema di gestione di database utilizzato negli ambienti PHP.
Utilizza di nuovo apt
:
sudo apt install mysql-server
Conferma l’installazione quando richiesto.
Al termine dell’installazione, si consiglia di eseguire uno script di sicurezza preinstallato con MySQL.
Questo script rimuoverà alcune impostazioni predefinite non sicure e bloccherà l’accesso al tuo sistema di database.
Avvia lo script interattivo eseguendo:
sudo mysql_secure_installation
Ti verrà chiesto se desideri configurare il VALIDATE PASSWORD PLUGIN
.
Rispondi y (sì) o qualsiasi altra cosa per continuare senza abilitarlo. Se rispondi “sì”, ti verrà chiesto di selezionare un livello di convalida della password (0=BASSO, 1=MEDIO, 2=FORTE).
Successivamente, il server ti chiederà di selezionare e confermare una password per l’utente root
di MySQL (questa è diversa dall’utente root del sistema).
Definisci una password robusta qui, anche se per impostazione predefinita l’accesso come root
MySQL da console non la richiederà grazie all’autenticazione auth_socket
.
Per il resto delle domande (rimuovere utenti anonimi, disabilitare login root remoto, rimuovere database di test, ricaricare tabelle privilegi), premi Y e ENTER ad ogni prompt.
Al termine, testa se riesci ad accedere alla console MySQL:
sudo mysql
Dovresti vedere il prompt mysql>
.
Per uscire, digita:
exit
Nota sulla sicurezza e auth_socket: L’autenticazione
auth_socket
è sicura perché solo gli utenti di sistema con privilegi sudo possono accedere come root MySQL dalla console. Tuttavia, significa che non potrai usare l’utente root MySQL direttamente dalla tua applicazione PHP (come WordPress). Creeremo un utente dedicato per questo.
4.4 Installazione di PHP
Hai Nginx per servire i tuoi contenuti e MySQL per archiviare i dati. Ora puoi installare PHP per elaborare il codice e generare contenuti dinamici.
Nginx richiede un programma esterno per gestire l’elaborazione PHP (a differenza di Apache che spesso lo integra).
Installeremo php8.1-fpm
(“PHP fastCGI process manager”) e php-mysql
(per la comunicazione tra PHP e MySQL).
sudo apt install php8.1-fpm php-mysql
Conferma l’installazione. Ora hai i componenti PHP installati.
4.5 Configurazione di Nginx per Utilizzare PHP (Verifica e Adattamento Post-Certbot)
Ora che hai installato PHP-FPM e configurato SSL con Certbot, dobbiamo assicurarci che la configurazione di Nginx sia correttamente impostata per passare le richieste PHP al processo PHP-FPM e per funzionare al meglio con la struttura dei permalink di WordPress.
Certbot (con il plugin --nginx
) ha probabilmente già modificato il tuo file di configurazione Nginx per abilitare HTTPS.
Ora verificheremo e adatteremo quella configurazione.
Passaggio 1: Apri il file di configurazione Nginx del tuo sito
Apri il file di configurazione del server block del tuo dominio, che Certbot ha modificato (sostituisci your_domain
con il tuo dominio effettivo):
sudo nano /etc/nginx/sites-available/your_domain
Passaggio 2: Verifica/Modifica il Blocco Server per HTTPS (Porta 443)
All’interno di questo file, cerca il blocco server
che contiene le direttive listen 443 ssl http2;
e ssl_certificate
/ ssl_certificate_key
(aggiunte da Certbot).
All’interno di questo blocco server
, devi assicurarti che le seguenti direttive siano presenti e corrette:
- root: Verifica che punti alla directory principale corretta del tuo sito WordPress (es.
/var/www/your_domain
):root /var/www/your_domain;
- index: Assicurati che
index.php
sia presente nell’elenco dei file indice, solitamente come prima opzione per WordPress:index index.php index.html index.htm;
- server_name: Verifica che includa il tuo dominio con e senza
www
(se applicabile), come hai specificato a Certbot:server_name your_domain www.your_domain;
- location / (per permalink WordPress): Questo blocco è fondamentale.
Assicurati che la direttivatry_files
sia impostata per passare le richieste non trovate aindex.php
:location / { try_files $uri $uri/ /index.php$is_args$args; } ``` *(Se c'è una riga `try_files $uri $uri/ =404;` commentala o cancellala e assicurati che quella sopra sia presente).*
- location ~ \.php$ (per processare PHP): Assicurati che questo blocco sia presente per gestire i file PHP.
Verifica che il percorsofastcgi_pass
punti al socket corretto della versione di PHP-FPM che hai installato (es.php8.1-fpm.sock
):location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; # Verifica la versione! # Potrebbero esserci altre direttive fastcgi qui, vanno bene }
- location ~ /\.ht: È buona norma mantenere questo blocco per negare l’accesso ai file
.htaccess
, anche se Nginx non li usa:location ~ /\.ht { deny all; }
Passaggio 3: Salva, testa e ricarica Nginx
Dopo aver verificato e apportato eventuali modifiche necessarie al blocco server della porta 443, salva e chiudi il file (in nano: CTRL+X, poi Y, poi ENTER).
Testa la sintassi della configurazione:
sudo nginx -t
Se il test ha successo (syntax is ok, test is successful
), ricarica Nginx per applicare le modifiche:
sudo systemctl reload nginx
Ora la tua configurazione Nginx è pronta per servire il tuo sito WordPress tramite HTTPS e processare correttamente i file PHP.
4.6 Test di PHP con Nginx
Verifichiamo che Nginx possa passare correttamente i file .php
al processore PHP.
Crea un file PHP di test nella tua document root:
sudo nano /var/www/your_domain/info.php
Incolla il seguente codice PHP:
<?php
phpinfo();
Salva e chiudi.
Ora accedi a questa pagina nel tuo browser:
https://server_domain_or_IP/info.php
Dovresti vedere una pagina web con informazioni dettagliate sul tuo server PHP.

Dopo aver verificato, è fondamentale rimuovere questo file poiché contiene informazioni sensibili:
sudo rm /var/www/your_domain/info.php
4.7 Test Connessione Database da PHP (opzionale)
Questo passaggio verifica che PHP possa connettersi a MySQL. Creeremo un database e un utente di test.
Connettiti alla console MySQL:
sudo mysql
Crea un database di test:
CREATE DATABASE test_database;
Crea un utente di test (sostituisci ‘password_sicura
‘ con una password robusta) utilizzando mysql_native_password
per compatibilità:
CREATE USER 'test_user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password_sicura';
Concedi i privilegi a questo utente sul database di test:
GRANT ALL ON test_database.* TO 'test_user'@'localhost';
Esci da MySQL:
exit
Crea uno script PHP per testare la connessione:
sudo nano /var/www/your_domain/test_db.php
Incolla il seguente script, sostituendo test_user
e password_sicura
con le credenziali appena create:
<?php
$user = "test_user";
$password = "password_sicura";
$database = "test_database";
$table = "test_table";
try {
$db = new PDO("mysql:host=localhost;dbname=$database", $user, $password);
echo "<h2>Connessione Riuscita!</h2><p>Proviamo a creare e interrogare una tabella...</p>";
// Prova a creare una tabella (ignora l'errore se esiste già)
$db->exec("CREATE TABLE IF NOT EXISTS $database.$table (
id INT AUTO_INCREMENT,
content VARCHAR(255),
PRIMARY KEY(id)
)");
echo "<p>Tabella '$table' controllata/creata.</p>";
// Prova a inserire dati
$db->exec("INSERT INTO $database.$table (content) VALUES ('Test item " . rand() . "')");
echo "<p>Riga inserita.</p>";
// Prova a leggere i dati
echo "<h3>Contenuto Tabella:</h3><ol>";
foreach($db->query("SELECT content FROM $database.$table") as $row) {
echo "<li>" . htmlspecialchars($row['content']) . "</li>"; // Aggiunto htmlspecialchars per sicurezza
}
echo "</ol>";
} catch (PDOException $e) {
print "Errore!: " . $e->getMessage() . "<br/>";
die();
}
Salva e chiudi.
Visita https://server_domain_or_IP/test_db.php
nel tuo browser.
Se vedi “Connessione Riuscita!
” e un elenco di elementi di test, la connessione PHP-MySQL funziona!
Ricorda di rimuovere questo file di test dopo la verifica:
sudo rm /var/www/your_domain/test_db.php
5. Installare WordPress LEMP: Passaggi Finali
Ora che lo stack LEMP è pronto e sicuro con SSL, possiamo finalmente installare WordPress LEMP.
5.1 Creazione Database e Utente MySQL per WordPress
WordPress ha bisogno del proprio database e utente.
Accedi a MySQL:
sudo mysql
Crea il database per WordPress (puoi chiamarlo diversamente se preferisci):
CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Nota: utf8mb4
è raccomandato per un miglior supporto a caratteri internazionali ed emoji.
Crea un utente MySQL dedicato per WordPress (sostituisci 'password_wp_sicura'
con una password robusta e unica):
CREATE USER 'wordpressuser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password_wp_sicura';
Concedi tutti i privilegi a questo utente solo sul database WordPress:
GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpressuser'@'localhost';
Applica le modifiche ai privilegi:
FLUSH PRIVILEGES;
Esci da MySQL:
exit
5.2 Installare e Proteggere phpMyAdmin (Opzionale ma Utile)
phpMyAdmin è una popolare interfaccia web per gestire i database MySQL. Può essere molto utile, ma deve essere protetta adeguatamente perché offre accesso diretto al database.
Installa phpMyAdmin e le estensioni PHP necessarie:
sudo apt update
sudo apt install phpmyadmin php-mbstring php-zip php-gd php-json php-curl
Durante l’installazione, ti verranno poste alcune domande:
- Selezione Web Server: Ti chiederà quale web server riconfigurare automaticamente. Poiché usiamo Nginx (che non è nell’elenco delle opzioni automatiche come apache2 o lighttpd), non selezionare nulla. Premi TAB per evidenziare <Ok> e poi ENTER.
- Configurare database per phpmyadmin con dbconfig-common?: Seleziona <Yes> (o <Sì>) e premi ENTER. Ti chiederà la password dell’utente amministratore del database (la password
root
di MySQL che hai impostato prima, o lasciala vuota se usiauth_socket
e l’installazione la gestisce) per creare un database e un utente specifici per phpMyAdmin. Poi ti chiederà di creare una password per l’utentephpmyadmin
nel database; impostane una robusta.
Configurazione per Nginx:
phpMyAdmin viene installato in /usr/share/phpmyadmin
. Dobbiamo creare un link simbolico alla nostra web root per renderlo accessibile tramite Nginx (sostituisci your_domain
con la tua web root effettiva):
sudo ln -s /usr/share/phpmyadmin /var/www/your_domain/phpmyadmin
Ora devi modificare la configurazione del server block Nginx per gestire correttamente phpMyAdmin e le sue richieste PHP.
Apri il file di configurazione del tuo sito:
sudo nano /etc/nginx/sites-available/your_domain
Aggiungi il seguente blocco location all’interno del blocco server { ... }
, preferibilmente prima del blocco location ~ \.php$
:
location /phpmyadmin {
index index.php;
try_files $uri $uri/ /phpmyadmin/index.php$is_args$args; # Gestisce le richieste interne di phpMyAdmin
}
# Blocco aggiuntivo per processare PHP specificamente per phpMyAdmin
location ~ ^/phpmyadmin/(.+\.php)$ {
# Nota: potresti dover adattare il percorso del socket se diverso
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; # Assicurati che la versione PHP sia corretta
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# (Blocco location ~ \.php$ esistente per WordPress)
# location ~ \.php$ { ... }
# (Altri blocchi location)
Testa e ricarica Nginx:
sudo nginx -t
sudo systemctl reload nginx
Protezione di phpMyAdmin (FONDAMENTALE!):
L’accesso pubblico a phpMyAdmin è un grave rischio per la sicurezza. Dobbiamo limitarlo.
Hai due opzioni principali (puoi usarle entrambe):
- Opzione A – Limitare l’accesso per IP (Raccomandato se hai IP statici):
Modifica nuovamente il file di configurazione Nginx del tuo sito (sudo nano /etc/nginx/sites-available/your_domain
).
All’interno del bloccolocation /phpmyadmin { ... }
che hai appena aggiunto, inserisci le seguenti direttive, sostituendoYOUR.HOME.IP.ADDRESS
eYOUR.WORK.IP.ADDRESS
con i tuoi indirizzi IP pubblici (puoi aggiungerne altri conallow IP;
):location /phpmyadmin { # ... (direttive index e try_files precedenti) ... # Limita accesso per IP allow YOUR.HOME.IP.ADDRESS; allow YOUR.WORK.IP.ADDRESS; deny all; # Blocca tutti gli altri IP }
Testa e ricarica Nginx.
- Opzione B – Protezione con Password HTTP (Autenticazione Base):
Questo metodo aggiunge un prompt di nome utente/password prima di accedere alla pagina di login di phpMyAdmin.- Crea un file per le password (es. fuori dalla web root per sicurezza):
sudo htpasswd -c /etc/nginx/.phpmyadmin_passwd TUO_NOME_UTENTE_HTTP
Ti chiederà di inserire e confermare una password per
TUO_NOME_UTENTE_HTTP
. - Modifica il file di configurazione Nginx del tuo sito:
sudo nano /etc/nginx/sites-available/your_domain
All’interno del blocco
location /phpmyadmin { ... }
, aggiungi queste due righe:location /phpmyadmin { # ... (direttive index e try_files precedenti) ... # ... (eventuali direttive allow/deny IP) ... # Autenticazione HTTP Base auth_basic "Admin Login"; # Messaggio mostrato nel prompt auth_basic_user_file /etc/nginx/.phpmyadmin_passwd; # Percorso al file password creato }
Testa e ricarica Nginx.
- Crea un file per le password (es. fuori dalla web root per sicurezza):
Ora, quando visiti http://server_domain_or_IP/phpmyadmin
, dovresti prima superare l’autenticazione HTTP (se configurata) e poi vedere la pagina di login di phpMyAdmin, dove userai le credenziali del database MySQL (es. wordpressuser
o root
).
Per imparare a utilizzare efficacemente phpMyAdmin per operazioni comuni come backup, ottimizzazione e risoluzione problemi del database WordPress, consulta la nostra guida dedicata: Gestione database WordPress: Guida phpMyAdmin per principianti.
5.3 Installazione Estensioni PHP Aggiuntive
WordPress e molti plugin beneficiano di estensioni PHP aggiuntive. Installiamo alcune delle più comuni:
sudo apt update
sudo apt install php8.1-curl php8.1-gd php8.1-intl php8.1-mbstring php8.1-soap php8.1-xml php8.1-xmlrpc php8.1-zip php8.1-imagic
Riavvia PHP-FPM per caricare le nuove estensioni:
sudo systemctl restart php8.1-fpm # Assicurati che la versione sia corretta
5.4 Download di WordPress
Passiamo a una directory scrivibile (come /tmp
) e scarichiamo l’ultima versione di WordPress:
cd /tmp
curl -LO https://it.wordpress.org/latest-it_IT.tar.gz # Scarica versione italiana
Estraiamo l’archivio:
tar xzvf latest-it_IT.tar.gz
5.5 Configurazione del File ‘wp-config.php
‘
WordPress ha bisogno di un file di configurazione wp-config.php
per connettersi al database.
Creiamolo partendo dal file di esempio:
cp /tmp/wordpress/wp-config-sample.php /tmp/wordpress/wp-config.php
Ora copiamo tutti i file di WordPress nella root del nostro sito (sostituisci your_domain
):
sudo cp -a /tmp/wordpress/. /var/www/your_domain/
Assegniamo la proprietà dei file al web server (Nginx solitamente gira come www-data
su Ubuntu):
sudo chown -R www-data:www-data /var/www/your_domain/
Ora modifichiamo il file wp-config.php
per inserire le credenziali del database e le chiavi di sicurezza.
Apriamolo:
sudo nano /var/www/your_domain/wp-config.php
- Credenziali Database: Trova le seguenti righe e sostituisci i valori segnaposto con il nome del database, l’utente e la password che hai creato al passaggio 5.1:
define( 'DB_NAME', 'wordpress' ); define( 'DB_USER', 'wordpressuser' ); define( 'DB_PASSWORD', 'password_wp_sicura' ); define( 'DB_HOST', 'localhost' ); // Solitamente localhost va bene
- Chiavi di Sicurezza e SALT: Trova la sezione con le chiavi segnaposto. Apri una nuova finestra del browser e visita
https://api.wordpress.org/secret-key/1.1/salt/
. Copia l’intero blocco di codice generato e sostituisci le righe segnaposto nel tuowp-config.php
con quelle appena copiate. - Metodo Filesystem: Aggiungi questa riga sotto le impostazioni del database (o comunque prima di
/* That's all... */
) per evitare che WordPress chieda credenziali FTP per installare/aggiornare temi/plugin:define( 'FS_METHOD', 'direct' );
Salva e chiudi il file wp-config.php
.
5.6 Completamento Installazione Tramite Interfaccia Web
Ora che la configurazione del server è completa, puoi terminare l’installazione tramite l’interfaccia web di WordPress.
Nel tuo browser, naviga verso il nome di dominio o l’IP pubblico del tuo server:
https://server_domain_or_IP
Se tutto è configurato correttamente, dovresti vedere la schermata di selezione della lingua di WordPress.

Seleziona l’Italiano e clicca Continua. Successivamente, arriverai alla pagina di configurazione principale.
Inserisci un titolo per il tuo sito WordPress, scegli un nome utente per l’amministratore (si consiglia di non usare “admin” per motivi di sicurezza), una password robusta (quella generata automaticamente è ottima, salvala!) e il tuo indirizzo email.
Scegli se scoraggiare o meno i motori di ricerca dall’indicizzare il sito (puoi cambiarlo dopo).

Quando fai clic su “Installa WordPress“, verrai portato a una pagina che ti informa del successo dell’installazione e ti chiede di accedere.

Una volta effettuato l’accesso con le credenziali appena create, verrai portato alla dashboard di amministrazione di WordPress.

6. Ottimizzazioni Post-Installazione
Ora che WordPress è installato, vediamo alcune ottimizzazioni importanti.
6.1 Configurare Nginx con Supporto HTTP/2
HTTP/2 è una versione più recente e veloce del protocollo HTTP. Abilitarlo può migliorare significativamente i tempi di caricamento del tuo sito, specialmente per connessioni con alta latenza o quando vengono caricate molte piccole risorse.
HTTP/2 richiede obbligatoriamente una connessione sicura (HTTPS).
Se hai già configurato SSL (ad esempio con Let’s Encrypt/Certbot), abilitare HTTP/2 è semplice.
Modifica il file di configurazione Nginx del tuo sito:
sudo nano /etc/nginx/sites-available/your_domain
Trova la direttiva listen
per la porta 443
(HTTPS). Solitamente assomiglia a questo:
listen 443 ssl; # Potrebbe includere anche il percorso del certificato e della chiave
Modificala aggiungendo http2
alla fine:
listen 443 ssl http2;
Salva il file, testa la configurazione e ricarica Nginx:
sudo nginx -t
sudo systemctl reload nginx
Ora il tuo server servirà il sito tramite HTTP/2 su connessioni HTTPS.
Puoi verificarlo usando gli strumenti per sviluppatori del tuo browser (scheda Network, colonna Protocol).
6.2 Bonus Essenziale: Ottimizzazioni Iniziali PHP e Nginx
Indipendentemente dalla potenza del tuo VPS, alcuni aggiustamenti di base nei file di configurazione possono prevenire errori comuni e migliorare le prestazioni, specialmente sotto carico.
Non esagerare all’inizio, ma considera questi punti:
- PHP (php.ini):
- Il file
php.ini
principale si trova solitamente in/etc/php/8.1/fpm/php.ini
(cambia 8.1 con la tua versione). Dopo averlo modificato, devi riavviare PHP-FPM (sudo systemctl restart php8.1-fpm
). - memory_limit: Definisce la memoria massima che uno script PHP può consumare. Un valore troppo basso (es. 64M) può causare errori “Allowed memory size exhausted“. Aumentalo gradualmente se necessario (es. 128M, 256M, 512M), ma senza esagerare per non consumare tutta la RAM del server.
- upload_max_filesize: La dimensione massima dei file caricabili tramite PHP (es. dalla libreria media di WordPress). Aumentalo se devi caricare file grandi (es. 64M).
- post_max_size: La dimensione massima dei dati inviati tramite POST (include i file caricati). Deve essere uguale o maggiore di
upload_max_filesize
(es. 64M). - max_execution_time: Tempo massimo in secondi che uno script può impiegare prima di essere terminato. Potrebbe essere necessario aumentarlo (es. 60 o 120) per operazioni lunghe come importazioni o backup, ma attenzione a non impostarlo troppo alto.
- Il file
- Nginx Globale (nginx.conf):
- Il file principale è solitamente in
/etc/nginx/nginx.conf
. Dopo averlo modificato, devi testare (sudo nginx -t
) e ricaricare (sudo systemctl reload nginx
). - worker_processes: Numero di processi worker Nginx. Spesso impostato su
auto
o sul numero di core CPU del server. Un buon punto di partenza. - worker_connections: Numero massimo di connessioni simultanee che ogni worker process può gestire. Il valore predefinito (es. 768 o 1024) è spesso sufficiente all’inizio, ma può essere aumentato su server con molta RAM e traffico elevato.
- Il file principale è solitamente in
- Nginx Dominio (
/etc/nginx/sites-available/your_domain
):client_max_body_size
: Simile aupload_max_filesize
epost_max_size di PHP
, ma a livello di Nginx. Definisce la dimensione massima del corpo di una richiesta client. Se carichi file grandi tramite WordPress, devi aumentare questo valore (es. 64M) in modo che Nginx non blocchi la richiesta prima ancora che arrivi a PHP. Va inserito all’interno del bloccoserver { ... }
.
Importante: Apporta queste modifiche una alla volta, testa il sito dopo ogni modifica e monitora le risorse del server (uso CPU e RAM). Aumentare troppo certi limiti senza risorse sufficienti può portare a instabilità.
7. Conclusione e Prossimi Passi
Congratulazioni! Hai completato con successo il processo per installare WordPress LEMP sul tuo server Ubuntu 22.04, protetto con SSL e hai gettato le basi per ottimizzarlo. Ora hai una base solida e performante per il tuo sito, libera dai vincoli dell’hosting condiviso.
Alcuni passaggi successivi comuni sono la scelta dell’impostazione dei permalink per i tuoi post (si trova in Impostazioni » Permalink – scegli “Nome articolo” per la SEO) o la selezione di un nuovo tema (in Aspetto » Temi).
Se è la prima volta che usi WordPress, esplora un po’ l’interfaccia per familiarizzare con il tuo nuovo CMS.
Se questo articolo vi è piaciuto, seguiteci su X e Facebook per rimanere aggiornati su tutte le novità e consigli utili su WordPress!