Installare uno stack LAMP su Ubuntu 24.04 e 22.04: Apache2, PHP 8, MySQL e phpMyAdmin
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):
| Distribuzione | Versione di PHP dai repository |
|---|---|
| Ubuntu 24.04 LTS | PHP 8.3 |
| Ubuntu 22.04 LTS | PHP 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:
| Pacchetto | Ubuntu 24.04 LTS | Ubuntu 22.04 LTS |
|---|---|---|
| mysql-server | MySQL 8.0.46 | MySQL 8.0.46 |
| mariadb-server | disponibile | disponibile |
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.10al 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 upgradenon 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?
Quale versione di PHP fornisce Ubuntu?
Come ottengo una versione di PHP più recente di quella di Ubuntu?
Perché il browser scarica il file PHP invece di eseguirlo?
Perché non riesco ad accedere a phpMyAdmin come root?
2022-2026 KernelHost GmbH. Tutti i diritti riservati. Questa guida è protetta dal diritto d'autore. La ripubblicazione su altri siti web, anche parziale o in forma modificata, non è consentita senza il nostro consenso scritto. Le citazioni con indicazione della fonte e un link sono le benvenute.

