Installare Apache, PHP 8.5 e MariaDB su Ubuntu 26.04: server LAMP passo per passo

Apache resta il web server più compatibile con le applicazioni PHP: legge i file .htaccess, e molti CMS e plugin danno per scontata la sua presenza. Su Ubuntu 26.04 LTS si installa con Apache 2.4.66, PHP 8.5 e MariaDB 11.8. La differenza rispetto alle guide di qualche anno fa è una sola, ma importante: PHP va collegato tramite PHP-FPM e non con il vecchio mod_php, così Apache può usare il modulo MPM event, più efficiente.

In breve

  • Tempo: 30–40 minuti.
  • Difficoltà: media.
  • Cosa serve: un server Ubuntu 26.04 LTS (o Debian 13) con utente sudo e UFW attivo, un dominio che punta all’IP del server per il virtual host e l’HTTPS.

Versioni di riferimento: Ubuntu 26.04 LTS con apache2 2.4.66, php8.5-fpm 8.5.4, mariadb-server 11.8.6; Debian 13 con apache2 2.4.69 e PHP 8.4 (versioni dei pacchetti al 4 novembre 2026). Procedura verificata sulla documentazione ufficiale al 4 novembre 2026.

Perché PHP-FPM e non mod_php

Il manuale di PHP lo spiega senza giri di parole: mod_php gira dentro i processi di Apache e, a meno di una compilazione thread-safe, richiede l’MPM prefork, che usa un processo per ogni connessione. Lo stesso manuale indica come configurazione consigliata l’MPM event (predefinito da Apache 2.4) con PHP-FPM. Nella pratica, event gestisce le connessioni keep-alive senza tenere occupato un processo pesante per ciascuna, e PHP-FPM si regola in modo indipendente. Sul pacchetto Ubuntu, event è l’MPM attivato di default: basta non installare libapache2-mod-php8.5, che lo sostituirebbe con prefork.

Prerequisiti e backup

Partite da un server con utente non root, chiavi SSH e firewall (guida https://hardwarfare.it/ai-software/linux/primo-setup-vps-ubuntu-ssh-firewall/). Se Apache o Nginx sono già in uso sulla macchina, salvate /etc/apache2, /etc/php e i database, e verificate che la porta 80 sia libera con sudo ss -tlnp | grep ':80': due web server non possono ascoltare sulla stessa porta.

Passo 1: installare Apache e aprire il firewall

sudo apt update
sudo apt install apache2
sudo ufw allow 'Apache Full'

Il profilo Apache Full apre le porte 80 e 443 TCP.

Verifica: systemctl status apache2 deve essere active (running), e http://IP_SERVER nel browser deve mostrare la pagina predefinita di Ubuntu per Apache. Con a2query -M controllate l’MPM attivo: la risposta deve essere event.

Passo 2: installare PHP-FPM e collegarlo ad Apache

sudo apt install php8.5-fpm php8.5-cli php8.5-mysql php8.5-curl php8.5-xml php8.5-mbstring php8.5-intl php8.5-zip php8.5-gd

Il pacchetto php8.5-fpm installa già un file di configurazione per Apache, /etc/apache2/conf-available/php8.5-fpm.conf, che inoltra tutti i file .php al socket /run/php/php8.5-fpm.sock tramite mod_proxy_fcgi. Va solo attivato insieme ai due moduli necessari, come suggerisce il pacchetto stesso al termine dell’installazione:

sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php8.5-fpm
sudo systemctl restart apache2

Su Debian 13 sostituite 8.5 con 8.4 in pacchetti, configurazione e socket.

Verifica: apache2ctl -M | grep -E 'proxy_fcgi|setenvif|mpm' deve elencare proxy_fcgi_module, setenvif_module e mpm_event_module. Se compare mpm_prefork_module, è stato installato mod_php: rimuovetelo e riattivate event.

Passo 3: MariaDB, database e utente dedicato

sudo apt install mariadb-server
sudo mariadb-secure-installation

Su Ubuntu e Debian root@localhost si autentica tramite il plugin unix_socket: si entra con sudo mariadb, senza password, e mai da remoto. Lo script serve soprattutto a rimuovere utenti anonimi e database di prova. Poi create database e utente per il sito:

sudo mariadb
CREATE DATABASE NOME_DB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'UTENTE_DB'@'localhost' IDENTIFIED BY 'PASSWORD_ROBUSTA';
GRANT ALL PRIVILEGES ON NOME_DB.* TO 'UTENTE_DB'@'localhost';
EXIT;

Verifica: mariadb -u UTENTE_DB -p NOME_DB deve entrare con la password scelta. sudo ss -tlnp | grep 3306 deve mostrare MariaDB in ascolto solo su 127.0.0.1.

Passo 4: il virtual host con mod_rewrite

sudo mkdir -p /var/www/TUO_DOMINIO/public
sudo chown -R $USER:www-data /var/www/TUO_DOMINIO
sudo nano /etc/apache2/sites-available/TUO_DOMINIO.conf
<VirtualHost *:80>
    # nome principale e alias del sito
    ServerName TUO_DOMINIO
    ServerAlias www.TUO_DOMINIO
    # cartella dei file pubblici
    DocumentRoot /var/www/TUO_DOMINIO/public

    <Directory /var/www/TUO_DOMINIO/public>
        # niente elenco dei file nelle cartelle senza index
        Options -Indexes +FollowSymLinks
        # consente i file .htaccess (permalink di WordPress e simili)
        AllowOverride All
        Require all granted
    </Directory>

    # log separati per sito
    ErrorLog ${APACHE_LOG_DIR}/TUO_DOMINIO.error.log
    CustomLog ${APACHE_LOG_DIR}/TUO_DOMINIO.access.log combined
</VirtualHost>

AllowOverride All è comodo ma ha un costo: Apache cerca un .htaccess in ogni cartella a ogni richiesta. Se l’applicazione non ne ha bisogno, scrivete AllowOverride None e mettete le regole direttamente nel virtual host.

sudo a2enmod rewrite
sudo a2ensite TUO_DOMINIO
sudo a2dissite 000-default
sudo apachectl configtest
sudo systemctl reload apache2

Verifica: sudo apachectl configtest deve rispondere Syntax OK. Poi sudo apache2ctl -S elenca i virtual host caricati: il vostro dominio deve comparire sulla porta 80 con il file di configurazione giusto.

Passo 5: test di PHP e piccole pulizie

echo '<?php phpinfo();' > /var/www/TUO_DOMINIO/public/info.php

Verifica: http://TUO_DOMINIO/info.php deve indicare “Server API: FPM/FastCGI”. Se dice “Apache 2.0 Handler”, state usando mod_php. Cancellate subito il file: rm /var/www/TUO_DOMINIO/public/info.php.

Ubuntu lascia in /etc/apache2/conf-available/security.conf le impostazioni ServerTokens OS e ServerSignature On, che rivelano versione di Apache e sistema operativo. Cambiatele in ServerTokens Prod e ServerSignature Off, poi sudo apachectl configtest e sudo systemctl reload apache2.

phpMyAdmin: meglio un tunnel SSH

Il pacchetto phpmyadmin (versione 5.2.3 in Ubuntu 26.04) è disponibile, ma un pannello di amministrazione del database raggiungibile da Internet è uno dei bersagli più cercati dai bot. La nostra raccomandazione è non pubblicarlo affatto e usare un client grafico sul vostro PC (DBeaver, HeidiSQL o simili) attraverso un tunnel SSH, che porta la porta 3306 del server sul vostro computer senza aprirla nel firewall:

ssh -L 13306:127.0.0.1:3306 NOMEUTENTE@IP_SERVER

Finché la sessione resta aperta, il client si collega a 127.0.0.1 porta 13306 con l’utente del database. Usiamo 13306 per non andare in conflitto con un eventuale MariaDB o MySQL locale. Se l’accesso viene rifiutato, può servire un utente creato per l’host '127.0.0.1' oltre che per 'localhost'. Se phpMyAdmin vi serve davvero, limitatene l’accesso al vostro indirizzo IP o mettetelo dietro autenticazione aggiuntiva, e sempre in HTTPS.

LAMP o LEMP? Il confronto onesto

AspettoApache + PHP-FPMNginx + PHP-FPM
File .htaccesssupportati: le applicazioni si configurano da solenon supportati: le regole vanno tradotte nel server block
Compatibilità con CMS e pluginmassima, è il caso previsto dalla maggior parte della documentazioneottima, ma a volte servono regole scritte a mano
Consumo di memoriacon event e FPM vicino a Nginx; molto più alto con prefork e mod_phpbasso e prevedibile
File statici e reverse proxycapace, configurazione più verbosail suo punto di forza
Curva di apprendimentomolta documentazione, sintassi più lungasintassi compatta, meno esempi per casi particolari

Il nostro verdetto: per un singolo sito WordPress su un VPS da 1–2 GB le prestazioni con PHP-FPM sono simili, e la scelta dipende da cosa sapete già gestire. Scegliete Apache se ereditate un sito che si basa su .htaccess o se usate applicazioni che lo richiedono; scegliete Nginx se sul server avete anche container o servizi da mettere dietro reverse proxy. La guida gemella è https://hardwarfare.it/ai-software/linux/installare-nginx-php-fpm-mariadb-ubuntu-lemp/.

Se qualcosa va storto

  • AH00558: apache2: Could not reliably determine the server's fully qualified domain name: è un avviso, non un errore. Si elimina aggiungendo una direttiva ServerName globale, per esempio con echo "ServerName localhost" | sudo tee /etc/apache2/conf-available/servername.conf e sudo a2enconf servername.
  • 503 Service Unavailable sui file .php: Apache non raggiunge PHP-FPM. Controllate systemctl status php8.5-fpm e che il socket indicato in php8.5-fpm.conf esista in /run/php/.
  • I permalink restituiscono 404: manca a2enmod rewrite, oppure AllowOverride è None e l’applicazione si affida a .htaccess.
  • Il browser mostra il codice PHP invece di eseguirlo: la configurazione php8.5-fpm non è attiva. Ripetete sudo a2enconf php8.5-fpm e ricaricate.
  • Apache non si avvia dopo una modifica: sudo apachectl configtest indica file e riga; il dettaglio è anche in sudo journalctl -u apache2.

Come tornare indietro

Un sito si disattiva con sudo a2dissite TUO_DOMINIO e un reload; il collegamento a PHP-FPM con sudo a2disconf php8.5-fpm. Per togliere tutto lo stack: sudo apt purge apache2 php8.5-fpm mariadb-server e sudo apt autoremove.

Attenzione: esportate i database prima di rimuovere MariaDB, con sudo mariadb-dump --all-databases > backup-completo.sql. Se in fase di rimozione confermate la cancellazione dei dati, il contenuto di /var/lib/mysql è perso.

La nostra lettura

Un LAMP del 2026 non ha più il difetto storico di Apache, cioè la memoria divorata da prefork e mod_php: con event e PHP-FPM è una scelta pienamente moderna, e la più indolore per chi lavora con .htaccess. Prossimi passi: HTTPS con https://hardwarfare.it/ai-software/linux/certificato-https-lets-encrypt-certbot/ (il plugin per Apache configura tutto da solo) e il rinforzo del server con https://hardwarfare.it/guide-tecniche/guide-server-self-hosting/proteggere-server-linux-ssh-fail2ban-ufw/.

Articolo redatto con il supporto di strumenti di intelligenza artificiale e verificato dalla redazione. Come usiamo l'AI · Come lavoriamo

Redazione HardWarfare
Redazione HardWarfarehttps://hardwarfare.it/chi-siamo/
La redazione di HardWarfare segue hardware PC, gaming, smartphone, sicurezza informatica e mercato tech. Ogni articolo parte da fonti primarie linkate in calce, viene verificato da un revisore diverso da chi lo scrive e si aggiorna quando i fatti cambiano. Scriveteci da Contatti per segnalazioni e correzioni.

Da non perdere

Articoli correlati

LASCIA UN COMMENTO

Scrivi il tuo commento!
Inserisci il tuo nome