Installare uno stack LAMP su Debian 13 e Debian 12: Apache2, PHP 8, MariaDB e phpMyAdmin
Apache2, PHP 8, MariaDB e phpMyAdmin su Debian 13 oppure Debian 12: l'intera configurazione passo dopo passo, comprese la messa in sicurezza e la risoluzione degli errori.
Vuoi installare Apache2, PHP 8, un database MySQL e phpMyAdmin, quindi uno stack LAMP completo, sul tuo server Debian 13 (Trixie) oppure Debian 12 (Bookworm)? Questa guida ti accompagna passo dopo passo attraverso l'intera configurazione, dal server web fino all'accesso protetto al database.
Importante, riguardo al server di database: Debian non contiene alcun pacchetto mysql-server, in nessuna versione attuale. Su Debian installi sempre MariaDB. MariaDB nasce da MySQL, parla lo stesso protocollo e lo stesso linguaggio di interrogazione, e strumenti come phpMyAdmin oppure l'estensione PHP php-mysql continuano a funzionare senza alcuna modifica. Quando in questa guida si parla di database MySQL, sotto gira quindi MariaDB.
Requisiti
Ti serve un accesso SSH con permessi di root (oppure un utente con autorizzazione sudo) su una Debian aggiornata. Sono consigliate Debian 13 "Trixie" e Debian 12 "Bookworm". Debian 10 ha raggiunto la fine del supporto a giugno 2024 e non riceve più aggiornamenti di sicurezza regolari, quindi non è più adatta all'uso 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 seguenti:
apt install -y nano curl wget unzip ca-certificates apt-transport-https lsb-release gnupg apache2
Apri poi nel browser l'indirizzo http://<IP-DEL-TUO-SERVER>/. Se compare la pagina predefinita di Apache2, il server web è già in funzione.
Installare PHP 8
Quale versione di PHP ottieni dai repository dipende dalla tua distribuzione. Per questo un comando con numero di versione fisso come apt install php8.4 fallisce su Debian 12, dove esiste soltanto PHP 8.2. Questa panoramica mostra la versione fornita in ciascun caso (dati di luglio 2026):
| Distribuzione | Versione PHP dai repository |
|---|---|
| Debian 13 | PHP 8.4 |
| Debian 12 | PHP 8.2 |
| Debian 11 | PHP 7.4 |
Usa quindi i metapacchetti senza numero di versione. Richiamano automaticamente la versione adatta alla tua distribuzione e si comportano allo stesso modo su ogni Debian:
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, vale lo stesso principio. Anche qui il metapacchetto porta al risultato in modo affidabile, mentre i nomi con numero di versione come php8.4-fpm esistono solo su Debian 13:
apt install -y php-fpm
Quale versione sia stata effettivamente installata te lo mostra:
php -v
Se ti serve una versione che la tua edizione di Debian non porta con sé (per esempio PHP 8.4 su Debian 12), aggiungi il repository PHP di Ondřej Surý. La chiave di firma viene installata tramite un pacchetto keyring dedicato e nella riga dei sorgenti viene associata con signed-by= esattamente a questo repository:
curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
dpkg -i /tmp/debsuryorg-archive-keyring.deb
echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/php.list
apt update
La strada un tempo molto diffusa tramite apt-key add è deprecata da Debian 11 e non andrebbe più utilizzata, perché una chiave registrata in quel modo varrebbe per tutti i repository del sistema.
Solo grazie a questo repository i nomi di pacchetto con numero di versione diventano disponibili su tutte le edizioni di Debian. A quel punto installi la versione PHP desiderata insieme alle estensioni consuete:
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 in seguito girano più versioni di PHP in parallelo, stabilisci quale deve usare Apache2:
a2dismod php8.2
a2enmod php8.4
systemctl restart apache2
Con php -v verifichi quale versione è attiva sulla riga di comando.
Installare e mettere in sicurezza MariaDB come server di database
Come già accennato all'inizio, su Debian non esiste alcun pacchetto mysql-server. Qui il server di database si chiama MariaDB, e precisamente in questa edizione a seconda della versione di Debian:
| Distribuzione | Server di database dai repository |
|---|---|
| Debian 13 | MariaDB 11.8 |
| Debian 12 | MariaDB 10.11 |
| Debian 11 | MariaDB 10.5 |
Installa il server e avvia subito dopo la procedura di messa in sicurezza:
apt install -y mariadb-server mariadb-client
mysql_secure_installation
Lo script pone diverse domande. Le versioni recenti di MariaDB chiedono per prima cosa se passare all'autenticazione unix_socket. Questa opzione ha senso, perché così l'utente di database root può accedere soltanto come utente di sistema root. A tutte le altre domande (rimuovere gli utenti anonimi, vietare il login remoto per root, eliminare il database di test, ricaricare i permessi) rispondi ogni volta con y. Assegna inoltre una password di database robusta.
Verifica poi che il servizio sia attivo:
systemctl status mariadb
Installare phpMyAdmin
Per phpMyAdmin hai due possibilità. Il pacchetto phpmyadmin è presente nei repository di tutte le versioni Debian attuali e si installa in un solo passaggio:
apt install phpmyadmin -y
Comodo, ma la versione resta spesso indietro rispetto a quella del produttore. Chi vuole di volta in volta l'edizione più recente scarica invece phpMyAdmin direttamente. È proprio 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 successivamente il file di configurazione:
cp /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php
phpMyAdmin ha bisogno di 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 interessata è 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 per 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 utente di database dedicato. Come nome non usare "root", "admin", "user" oppure "username", 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 aggiunta utenti con permessi limitati, che possano accedere solo 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 in qualsiasi momento dalla console del database 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 riesce, Apache2, PHP e MariaDB lavorano insieme correttamente.
Il collegamento a PHP lo verifichi inoltre 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 messo in sicurezza. Questi punti andrebbero aggiunti:
- phpMyAdmin è un bersaglio molto ambito. Limita l'accesso al tuo indirizzo IP, usando nel blocco Directory
Require ip 203.0.113.10al posto dell'apertura generalizzata. - Configura HTTPS, così le password non viaggiano in chiaro. Senza cifratura le tue credenziali sono leggibili lungo il percorso verso il server.
- Mantieni phpMyAdmin aggiornato. Dato che lo hai installato manualmente,
apt upgradenon lo aggiorna in automatico. - Crea backup regolari del database e conservali al di fuori del 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 per blowfish_secret. Generalo con openssl rand -base64 32 e inseriscilo nel file.
"Access denied for user" al momento del login in phpMyAdmin: dopo mysql_secure_installation l'utente di database root usa di norma l'autenticazione unix_socket e per questo non può accedere tramite l'interfaccia web. Utilizza l'utente creato in aggiunta.
Apache2 non parte più dopo una modifica alla configurazione: controlla la configurazione con apachectl configtest, l'output indica file e riga dell'errore.
Domande frequenti
Perché Debian installa MariaDB al posto di MySQL?
Quale versione di PHP include Debian?
Come ottengo una versione di PHP più recente di quella di Debian?
Perché il browser scarica il file PHP invece di eseguirlo?
Perché non riesco ad accedere a phpMyAdmin come root?
2023-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.

