Guida Definitiva  Installare Wordpress Lemp Su Ubuntu 22 04  Vps

Guida Definitiva: Installare WordPress LEMP su Ubuntu 22.04 (VPS)

35Shares

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 privilegi sudo. È 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

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’account root, si sconsiglia di usarlo regolarmente. L’account root 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 dal root al nuovo utente.
    Dalla sessione root ancora attiva, esegui (sostituisci sammy due volte):

    rsync --archive --chown=sammy:sammy ~/.ssh /home/sammy

    (Assicurati che ~/.ssh non abbia la barra finale).
    Ora puoi disconnetterti dalla sessione root 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.

  1. Crea la directory web root:
    sudo mkdir -p /var/www/your_domain
  2. Assegna proprietà:
    Assegnala temporaneamente al tuo utente sudo per facilitare i test iniziali.

    sudo chown -R $USER:$USER /var/www/your_domain
  3. Crea il file di configurazione Nginx minimo:
    sudo nano /etc/nginx/sites-available/your_domain

    Incolla questo contenuto base, sostituendo your_domain e www.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).

  4. Abilita il nuovo sito:
    sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/
  5. Disabilita la configurazione predefinita:
    sudo unlink /etc/nginx/sites-enabled/default
  6. Testa e ricarica Nginx:
    sudo nginx -t
    sudo systemctl reload nginx
  7. (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 direttiva try_files sia impostata per passare le richieste non trovate a index.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 percorso fastcgi_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.

Guida Definitiva Installare WordPress Lemp Su Ubuntu 22 04 Vps
Informazioni sul tuo server

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 usi auth_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’utente phpmyadmin 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 blocco location /phpmyadmin { ... } che hai appena aggiunto, inserisci le seguenti direttive, sostituendo YOUR.HOME.IP.ADDRESS e YOUR.WORK.IP.ADDRESS con i tuoi indirizzi IP pubblici (puoi aggiungerne altri con allow 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.

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
  1. 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
  2. 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 tuo wp-config.php con quelle appena copiate.
  3. 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.

Guida Definitiva Installare WordPress Lemp Su Ubuntu 22 04 Vps
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).

Guida Definitiva Installare WordPress Lemp Su Ubuntu 22 04 Vps
Installazione della configurazione di WordPress

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

Guida Definitiva Installare WordPress Lemp Su Ubuntu 22 04 Vps
Richiesta di accesso a WordPress

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

Guida Definitiva Installare WordPress Lemp Su Ubuntu 22 04 Vps
Dashboard 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.
  • 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.
  • Nginx Dominio (/etc/nginx/sites-available/your_domain):
    • client_max_body_size: Simile a upload_max_filesize e post_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 blocco server { ... }.

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!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *