Installare uno stack LAMP su Ubuntu 24.04 e 22.04: Apache2, PHP 8, MySQL e phpMyAdmin

Pubblicato il Aggiornato il 7 min di lettura

Apache2, PHP 8, MySQL o MariaDB e phpMyAdmin su Ubuntu 24.04 LTS o 22.04 LTS: l'installazione completa passo dopo passo, messa in sicurezza inclusa.

Vuoi installare Apache2, PHP 8, MySQL e phpMyAdmin, cioè uno stack LAMP completo, sul tuo server Ubuntu 24.04 LTS oppure Ubuntu 22.04 LTS? Questa guida ti accompagna passo dopo passo lungo tutta la configurazione, dal server web fino all'accesso protetto al database.

Un vantaggio rispetto a Debian: Ubuntu ha entrambi i server di database nei repository, sia mysql-server sia mariadb-server. Puoi quindi scegliere liberamente. Debian, al contrario, fornisce esclusivamente MariaDB. Questa guida mostra entrambe le varianti, tutti gli altri passaggi sono identici.

Prerequisiti

Ti serve un accesso SSH con privilegi di root (oppure un utente con permessi sudo) su un Ubuntu recente. Consigliamo Ubuntu 24.04 LTS "Noble Numbat" e Ubuntu 22.04 LTS "Jammy Jellyfish". Ubuntu 20.04 LTS ha raggiunto la fine del supporto ordinario a maggio 2025 e non dovrebbe più essere usato in produzione.

Aggiorna per prima cosa l'elenco dei pacchetti e installa gli aggiornamenti disponibili:

apt update && apt upgrade -y

Installare Apache2 e i pacchetti di base

Installa il server web insieme ai pacchetti di supporto che ti serviranno nei passaggi successivi:

apt install -y nano curl wget unzip ca-certificates apt-transport-https lsb-release gnupg software-properties-common apache2

Apri poi nel browser http://<IP-del-tuo-server>/. Se compare la pagina predefinita di Apache2, il server web è già in funzione.

Se sul server è attivo un firewall, apri le porte del server web:

ufw allow "Apache Full"

Installare PHP 8

La versione di PHP che ottieni dai repository dipende dalla tua distribuzione. Un comando con numero di versione fisso come apt install php8.3 fallisce quindi su Ubuntu 22.04 LTS. Questa tabella mostra la versione fornita da ciascuna edizione (aggiornato a luglio 2026):

DistribuzioneVersione di PHP dai repository
Ubuntu 24.04 LTSPHP 8.3
Ubuntu 22.04 LTSPHP 8.1

Usa quindi i metapacchetti senza numero di versione. Installano automaticamente la versione adatta alla tua distribuzione e funzionano allo stesso modo su ogni Ubuntu:

apt install -y php php-cli php-common php-curl php-gd php-intl php-mbstring php-mysql php-opcache php-readline php-xml php-zip php-bz2 libapache2-mod-php

Se preferisci far girare PHP tramite FPM invece che con il modulo Apache, il principio resta lo stesso. Anche qui il metapacchetto porta al risultato in modo affidabile, mentre un nome con numero di versione come php8.3-fpm esiste solo su Ubuntu 24.04 LTS:

apt install -y php-fpm

Per sapere quale versione è stata effettivamente installata:

php -v

Se ti serve una versione che la tua edizione di Ubuntu non offre (per esempio PHP 8.4), aggiungi il noto repository PHP di Ondřej Surý:

add-apt-repository ppa:ondrej/php

apt update

add-apt-repository registra automaticamente la chiave di firma in un file keyring dedicato e la associa esattamente a questo repository. Il comando apt-key, un tempo molto diffuso, è deprecato e non dovrebbe più essere usato, perché una chiave registrata in quel modo sarebbe valida per tutti i repository del sistema.

Solo tramite questo repository i nomi dei pacchetti con numero di versione diventano disponibili per tutte le edizioni di Ubuntu. Installa poi la versione di PHP che ti serve insieme alle estensioni più comuni:

apt install -y php8.4 php8.4-cli php8.4-common php8.4-curl php8.4-gd php8.4-intl php8.4-mbstring php8.4-mysql php8.4-opcache php8.4-readline php8.4-xml php8.4-zip php8.4-bz2 libapache2-mod-php8.4

Se a quel punto convivono più versioni di PHP sul server, stabilisci quale deve usare Apache2:

a2dismod php8.3

a2enmod php8.4

systemctl restart apache2

Con php -v verifichi quale versione è attiva da riga di comando.

Installare e mettere in sicurezza il server di database

Ubuntu ti propone entrambi i server di database più diffusi, in queste versioni:

PacchettoUbuntu 24.04 LTSUbuntu 22.04 LTS
mysql-serverMySQL 8.0.46MySQL 8.0.46
mariadb-serverdisponibiledisponibile

Per MySQL, cioè l'originale di Oracle:

apt install -y mysql-server mysql-client

mysql_secure_installation

Per MariaDB, il server nato da MySQL, che parla lo stesso protocollo e lo stesso linguaggio di interrogazione:

apt install -y mariadb-server mariadb-client

mysql_secure_installation

Installa solo una delle due varianti, perché entrambe occupano la stessa porta. Per i passaggi successivi di questa guida non fa differenza quale hai scelto.

Lo script mysql_secure_installation pone diverse domande. Le versioni recenti di MariaDB chiedono per prima cosa se passare all'autenticazione unix_socket. Questa opzione è sensata, perché così l'utente di database root può accedere solo come utente di sistema root. A tutte le altre domande (rimuovere gli utenti anonimi, vietare l'accesso remoto per root, eliminare il database di test, ricaricare i privilegi) rispondi con y. Imposta inoltre una password di database robusta.

Verifica poi che il servizio sia attivo. Il nome dell'unità systemd dipende dal server che hai scelto:

systemctl status mysql

systemctl status mariadb

Installare phpMyAdmin

Per phpMyAdmin hai due possibilità. Il pacchetto phpmyadmin è presente nei repository di tutte le versioni recenti di Ubuntu e si installa in un solo passaggio:

apt install phpmyadmin -y

Comodo, ma quella versione resta spesso indietro rispetto a quella pubblicata dal produttore. Chi vuole sempre l'edizione più recente scarica invece phpMyAdmin direttamente. È esattamente questa la strada descritta nei passaggi seguenti:

cd /usr/share && wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.zip -O phpmyadmin.zip && unzip phpmyadmin.zip && rm phpmyadmin.zip && mv phpMyAdmin-*-all-languages phpmyadmin && chmod -R 0755 phpmyadmin

Crea poi il file di configurazione:

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

phpMyAdmin richiede un valore casuale come blowfish_secret, con cui vengono cifrati i dati di sessione nel cookie. Genera un valore di questo tipo:

openssl rand -base64 32

Inseriscilo poi nel file di configurazione:

nano /usr/share/phpmyadmin/config.inc.php

La riga da modificare è questa:

$cfg['blowfish_secret'] = 'INSERISCI_QUI_IL_VALORE_GENERATO';

Collegare phpMyAdmin ad Apache2

Crea un file di configurazione Apache2 dedicato a phpMyAdmin:

nano /etc/apache2/conf-available/phpmyadmin.conf

Il contenuto di phpmyadmin.conf:

#Configurazione Apache2 per phpMyAdmin

Alias /phpmyadmin /usr/share/phpmyadmin

<Directory /usr/share/phpmyadmin>
    Options SymLinksIfOwnerMatch
    DirectoryIndex index.php
</Directory>

<Directory /usr/share/phpmyadmin/templates>
    Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/libraries>
    Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/setup/lib>
    Require all denied
</Directory>

Attiva la configurazione, ricarica Apache2 e crea la directory temporanea con i permessi corretti:

a2enconf phpmyadmin && systemctl reload apache2 && mkdir -p /usr/share/phpmyadmin/tmp/ && chown -R www-data:www-data /usr/share/phpmyadmin/tmp/

Creare un utente di database

Accedi al database come utente di sistema root:

mysql -u root

Crea ora un tuo utente di database. Non usare "root", "admin", "user" o "username" come nome, ma un nome utente personale e una password lunga e casuale:

#IMPORTANTE! SOSTITUISCI USER E PASSWORD CON LE TUE CREDENZIALI.

CREATE USER 'USER'@'localhost' IDENTIFIED BY 'PASSWORD';

GRANT ALL PRIVILEGES ON *.* TO 'USER'@'localhost' WITH GRANT OPTION;

FLUSH PRIVILEGES;

Per le singole applicazioni conviene creare in più utenti con permessi limitati, che possano accedere soltanto al proprio database:

CREATE DATABASE miaapp;

CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'PASSWORD';

GRANT ALL PRIVILEGES ON miaapp.* TO 'appuser'@'localhost';

FLUSH PRIVILEGES;

Puoi uscire dalla console del database in qualsiasi momento con:

exit

Testare lo stack LAMP

Apri phpMyAdmin all'indirizzo http://<IP-del-tuo-server>/phpmyadmin e accedi con l'utente appena creato. Se l'accesso funziona, Apache2, PHP e il tuo server di database lavorano correttamente insieme.

Puoi verificare l'integrazione di PHP anche con un breve file di test:

echo "<?php phpinfo();" > /var/www/html/info.php

Dopo aver aperto http://<IP-del-tuo-server>/info.php elimina assolutamente il file, perché rivela dettagli sulla configurazione del tuo server:

rm /var/www/html/info.php

Indicazioni di sicurezza per l'uso in produzione

Uno stack LAMP appena installato non è ancora protetto. Questi punti andrebbero aggiunti:

  • phpMyAdmin è un bersaglio molto ambito. Limita l'accesso al tuo indirizzo IP inserendo nel blocco Directory Require ip 203.0.113.10 al posto dell'autorizzazione aperta.
  • Configura HTTPS, così le password non viaggiano in chiaro. Senza cifratura le tue credenziali sono leggibili lungo il percorso verso il server.
  • Tieni phpMyAdmin aggiornato. Dato che lo hai installato manualmente, apt upgrade non se ne occupa in automatico.
  • Crea backup regolari del database e conservali fuori dal server.

Errori frequenti e soluzioni

Il browser scarica il file PHP invece di eseguirlo: il modulo PHP non è attivo in Apache2. Attivalo con a2enmod php8.4 e riavvia il server web con systemctl restart apache2.

phpMyAdmin segnala "The configuration file now needs a secret passphrase": in config.inc.php manca il valore di blowfish_secret. Generalo con openssl rand -base64 32 e inseriscilo.

"Access denied for user" durante l'accesso a phpMyAdmin: dopo mysql_secure_installation l'utente di database root usa di norma l'autenticazione unix_socket e non può quindi accedere tramite l'interfaccia web. Usa l'utente che hai creato in aggiunta.

Apache2 non si avvia più dopo una modifica alla configurazione: controlla la configurazione con apachectl configtest, l'output indica file e riga dell'errore.

Domande frequenti

Su Ubuntu conviene installare MySQL o MariaDB?
Ubuntu offre entrambi: mysql-server fornisce MySQL 8.0.46, mariadb-server il server MariaDB che ne è derivato. Per questa guida la scelta non fa differenza. Installa solo una delle due varianti, perché occupano la stessa porta. Debian, invece, non ha un pacchetto mysql-server, lì resta solo MariaDB.
Quale versione di PHP fornisce Ubuntu?
Ubuntu 24.04 LTS porta con sé PHP 8.3, Ubuntu 22.04 LTS invece PHP 8.1. Usa quindi i metapacchetti senza numero di versione, cioè php oppure php-fpm. Un comando con numero fisso come apt install php8.3 fallisce su Ubuntu 22.04 LTS.
Come ottengo una versione di PHP più recente di quella di Ubuntu?
Aggiungi il noto repository PHP con add-apt-repository ppa:ondrej/php. Il comando registra automaticamente la chiave di firma in un file keyring dedicato e la associa esattamente a questo repository. Solo dopo diventano disponibili nomi di pacchetto come php8.4-fpm.
Perché il browser scarica il file PHP invece di eseguirlo?
In questo caso il modulo PHP non è attivo in Apache2. Attivalo con a2enmod seguito dal nome della tua versione di PHP, per esempio a2enmod php8.4, e riavvia poi Apache2 con systemctl restart apache2.
Perché non riesco ad accedere a phpMyAdmin come root?
Dopo aver eseguito mysql_secure_installation l'utente di database root usa di norma l'autenticazione unix_socket e non può quindi accedere tramite l'interfaccia web. Crea per questo scopo un utente di database dedicato.

LAMP Apache2 PHP MariaDB MySQL phpMyAdmin Ubuntu 24.04 Ubuntu