
Questo articolo è pensato come approfondimento tecnico della guida pubblicata su MST-Tutorial.it e descrive l’installazione e la configurazione di un server LAMP su Fedora. L’obiettivo non è soltanto installare i pacchetti necessari, ma comprendere il ruolo dei singoli componenti, verificare il corretto funzionamento dei servizi e preparare una base stabile per ospitare applicazioni web dinamiche.
Cos’è un server LAMP
Con il termine LAMP si indica uno stack software composto da Linux, Apache, MySQL o MariaDB e PHP. La lettera L rappresenta il sistema operativo GNU/Linux, in questo caso Fedora; la A indica Apache HTTP Server, cioè il servizio incaricato di ricevere le richieste HTTP/HTTPS e restituire pagine web; la M identifica il database relazionale, generalmente MySQL o MariaDB; la P rappresenta PHP, linguaggio di scripting lato server molto utilizzato per generare contenuti dinamici.
Un server LAMP permette di eseguire siti web statici, applicazioni dinamiche, pannelli amministrativi, blog, CMS, gestionali, aree riservate, API backend e ambienti di sviluppo locali. È una soluzione molto diffusa perché utilizza componenti open source, facilmente installabili tramite il gestore pacchetti della distribuzione e ampiamente documentati.
Su Fedora, Apache è distribuito con il nome del pacchetto httpd, mentre per il database viene spesso utilizzato MariaDB, compatibile con gran parte degli scenari MySQL. PHP viene integrato con Apache tramite i moduli e i servizi necessari per interpretare i file .php e dialogare con il database.
Schema dei componenti principali
Componente Ruolo tecnico Pacchetto Fedora Linux Sistema operativo Fedora Apache Web server HTTP/HTTPS httpd PHP Linguaggio server-side php, php-cli, php-fpm MySQL/MariaDB Database relazionale mariadb-server PHP-MySQL Driver PHP per database MySQL/MariaDB php-mysqlnd Firewall Gestione porte di rete firewalld
Prerequisiti
Prima di procedere è consigliabile disporre di un sistema Fedora aggiornato, accesso a un utente con privilegi amministrativi tramite sudo e connessione Internet attiva. L’installazione può essere eseguita sia su Fedora Server sia su Fedora Workstation, ad esempio per creare un ambiente di test locale.
Nel caso di un server esposto in rete, è opportuno conoscere anche l’indirizzo IP della macchina, il nome host, l’eventuale dominio associato e le regole firewall applicate dal provider o dal router.
Verifica versione Fedora: cat /etc/fedora-release Verifica utente corrente: whoami Verifica indirizzo IP: ip a
Aggiornamento del sistema
Il primo passaggio consiste nell’aggiornare l’elenco dei pacchetti e installare eventuali aggiornamenti disponibili. Questo riduce il rischio di incompatibilità e consente di partire da un sistema coerente.
sudo dnf update -y
Al termine dell’aggiornamento, se vengono installati nuovi kernel o librerie di sistema importanti, può essere utile riavviare la macchina prima di proseguire.
sudo reboot
Installazione di Apache, PHP e MariaDB
Su Fedora è possibile installare i componenti principali dello stack LAMP con un unico comando. Il pacchetto httpd installa Apache, php e i relativi pacchetti abilitano l’esecuzione di script PHP, mentre mariadb-server installa il database server compatibile con MySQL.
sudo dnf install -y httpd php php-cli php-fpm php-mysqlnd mariadb-server
Per molti CMS e applicazioni web moderne possono essere utili anche estensioni PHP aggiuntive, ad esempio per gestire immagini, stringhe multibyte, file compressi, internazionalizzazione e XML.
sudo dnf install -y php-gd php-mbstring php-xml php-json php-intl php-zip php-opcache
Avvio e abilitazione di Apache
Dopo l’installazione, Apache deve essere avviato e abilitato all’avvio automatico del sistema. Su Fedora il servizio si chiama httpd.
sudo systemctl enable --now httpd
Per verificare lo stato del servizio:
systemctl status httpd
Se il servizio è attivo, il browser dovrebbe mostrare la pagina predefinita di Apache visitando l’indirizzo locale:
http://localhost
Da un altro dispositivo della stessa rete si può invece usare l’indirizzo IP del server:
http://INDIRIZZO_IP_DEL_SERVER
Directory principale del sito
La directory predefinita in cui Apache cerca i file web è:
/var/www/html/
Per creare una semplice pagina HTML di prova:
echo "<h1>Server LAMP Fedora funzionante</h1>" | sudo tee /var/www/html/index.html
Il file sarà raggiungibile visitando:
http://localhost/index.html
Test di PHP
Per verificare che PHP venga interpretato correttamente da Apache, è possibile creare un file di test nella document root.
echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php
Dopo la creazione del file, riavviare Apache:
sudo systemctl restart httpd
Aprire quindi il browser all’indirizzo:
http://localhost/info.php
Se la configurazione è corretta, verrà mostrata la pagina informativa di PHP. Questa pagina è molto utile in fase di test perché mostra versione di PHP, moduli caricati, percorsi di configurazione e variabili del server. Tuttavia, su un server pubblico deve essere rimossa subito dopo la verifica, perché espone informazioni tecniche sensibili.
sudo rm /var/www/html/info.php
Avvio e protezione di MariaDB
Il database server deve essere avviato e abilitato all’avvio automatico.
sudo systemctl enable --now mariadb
Per controllare lo stato del servizio:
systemctl status mariadb
Dopo l’avvio è consigliabile eseguire la procedura di configurazione sicura. Questa operazione consente di impostare o modificare la password amministrativa, rimuovere utenti anonimi, disabilitare accessi remoti non necessari e rimuovere database di test.
sudo mariadb-secure-installation
Creazione di database e utente applicativo
Per motivi di sicurezza, un’applicazione web non dovrebbe usare direttamente l’utente amministrativo del database. È preferibile creare un database dedicato e un utente con privilegi limitati a quel solo database.
sudo mariadb
CREATE DATABASE sito_lamp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'utente_lamp'@'localhost' IDENTIFIED BY 'PasswordMoltoSicura'; GRANT ALL PRIVILEGES ON sito_lamp.* TO 'utente_lamp'@'localhost'; FLUSH PRIVILEGES; EXIT;
In questo esempio il database si chiama sito_lamp, mentre l’utente applicativo è utente_lamp. La connessione è limitata a localhost, quindi l’utente potrà collegarsi solo dal server stesso.
Test di connessione PHP al database
Dopo aver creato database e utente, si può verificare la connessione tramite un piccolo script PHP. Il seguente esempio usa PDO, interfaccia consigliata perché permette di gestire in modo ordinato connessioni, errori e query preparate.
sudo nano /var/www/html/db-test.php
<?php
$host = 'localhost';
$dbname = 'sito_lamp';
$user = 'utente_lamp';
$password = 'PasswordMoltoSicura';
try {
$pdo = new PDO(
"mysql:host=$host;dbname=$dbname;charset=utf8mb4",
$user,
$password,
[
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
]
);
echo "Connessione al database riuscita.";
} catch (PDOException $e) {
echo "Errore di connessione al database.";
}
?>
Aprire quindi:
http://localhost/db-test.php
Anche questo file dovrebbe essere rimosso dopo il test, soprattutto se il server è accessibile dalla rete.
sudo rm /var/www/html/db-test.php
Configurazione del firewall
Fedora utilizza normalmente firewalld per la gestione del firewall. Se il server deve essere raggiungibile da altri dispositivi, occorre consentire il traffico HTTP e, se previsto, HTTPS.
sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload
Per verificare i servizi consentiti:
sudo firewall-cmd --list-services
HTTP utilizza la porta 80, mentre HTTPS utilizza la porta 443.
Servizio Porta Protocollo HTTP 80 TCP HTTPS 443 TCP MariaDB 3306 TCP
In una configurazione standard LAMP, MariaDB non deve essere esposto pubblicamente. Il database dovrebbe rimanere accessibile solo localmente o da host strettamente autorizzati.
Permessi della directory web
La directory /var/www/html appartiene normalmente all’utente amministrativo o al servizio web. Durante lo sviluppo locale può essere comodo assegnare i permessi al proprio utente, mantenendo il gruppo associato ad Apache.
sudo chown -R $USER:apache /var/www/html sudo chmod -R 775 /var/www/html
Su Fedora è importante considerare anche SELinux. Se i file vengono copiati manualmente nella document root, potrebbero avere un contesto non corretto e Apache potrebbe non riuscire a leggerli. Per ripristinare i contesti standard:
sudo restorecon -Rv /var/www/html
SELinux e pubblicazione dei contenuti
SELinux è un sistema di controllo degli accessi che aggiunge un livello di sicurezza al sistema. Invece di disattivarlo, è preferibile configurarlo correttamente. Per un sito collocato nella directory standard /var/www/html, in genere è sufficiente ripristinare i contesti con restorecon.
Se invece si decide di usare una directory personalizzata, ad esempio /srv/www/miosito, occorre assegnare il contesto corretto ai file serviti da Apache.
sudo semanage fcontext -a -t httpd_sys_content_t "/srv/www/miosito(/.*)?" sudo restorecon -Rv /srv/www/miosito
Se il comando semanage non è disponibile, installare il pacchetto necessario:
sudo dnf install -y policycoreutils-python-utils
Configurazione di un Virtual Host
Un Virtual Host permette di ospitare uno o più siti sullo stesso server Apache, separando document root, log e nome dominio. Le configurazioni personalizzate possono essere salvate nella directory:
/etc/httpd/conf.d/
Esempio di configurazione per un dominio locale o reale:
sudo nano /etc/httpd/conf.d/miosito.conf
<VirtualHost *:80>
ServerName miosito.local
ServerAdmin webmaster@miosito.local
DocumentRoot /var/www/miosito/public
ErrorLog /var/log/httpd/miosito-error.log
CustomLog /var/log/httpd/miosito-access.log combined
<Directory /var/www/miosito/public>
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Creare quindi la directory del sito:
sudo mkdir -p /var/www/miosito/public echo "<?php echo 'Virtual Host attivo'; ?>" | sudo tee /var/www/miosito/public/index.php
Assegnare contesti SELinux e permessi:
sudo restorecon -Rv /var/www/miosito sudo systemctl restart httpd
Se si usa un dominio locale, aggiungere una riga nel file /etc/hosts della macchina client:
127.0.0.1 miosito.local
File .htaccess e AllowOverride
Molti CMS, come WordPress, utilizzano file .htaccess per gestire permalink, rewrite URL e regole specifiche dell’applicazione. Per permettere ad Apache di leggere queste direttive, nella configurazione del Virtual Host è necessario impostare:
AllowOverride All
È inoltre necessario che il modulo rewrite sia disponibile. Su Fedora, la configurazione di Apache include normalmente i moduli principali, ma è sempre possibile verificare quelli caricati con:
httpd -M | grep rewrite
Log e diagnostica
Durante la configurazione di un server LAMP è fondamentale consultare i log. Apache registra errori e accessi nella directory:
/var/log/httpd/
I file più comuni sono:
/var/log/httpd/error_log /var/log/httpd/access_log
Per seguire gli errori in tempo reale:
sudo tail -f /var/log/httpd/error_log
Per analizzare i messaggi del servizio tramite systemd:
journalctl -u httpd -xe
Per MariaDB:
journalctl -u mariadb -xe
Comandi utili di gestione
Riavviare Apache: sudo systemctl restart httpd Ricaricare Apache senza arresto completo: sudo systemctl reload httpd Verificare configurazione Apache: sudo apachectl configtest Avviare MariaDB: sudo systemctl start mariadb Riavviare MariaDB: sudo systemctl restart mariadb Accedere alla console MariaDB: sudo mariadb Elenco moduli PHP caricati: php -m Versione PHP: php -v
Installazione opzionale di phpMyAdmin
phpMyAdmin è un’interfaccia web per la gestione di database MySQL e MariaDB. Può essere utile in ambienti di test o sviluppo, ma su server pubblici deve essere protetto con attenzione, perché rappresenta un bersaglio frequente per tentativi di accesso non autorizzati.
sudo dnf install -y phpMyAdmin
Dopo l’installazione, verificare la configurazione Apache generata dal pacchetto e limitare l’accesso solo agli indirizzi IP autorizzati, se il server è esposto su Internet.
Hardening di base
Un server LAMP appena installato funziona, ma non deve essere considerato automaticamente pronto per la produzione. È opportuno applicare alcune misure di sicurezza minime: mantenere il sistema aggiornato, non esporre MariaDB sulla rete pubblica, usare password robuste, rimuovere file di test, limitare i permessi di scrittura e consultare periodicamente i log.
Aggiornamento periodico: sudo dnf update Verifica porte in ascolto: sudo ss -tulpn Verifica servizi abilitati: systemctl list-unit-files --type=service --state=enabled
È consigliabile evitare permessi troppo permissivi come chmod 777 sulle directory web. Un’applicazione dovrebbe poter scrivere solo nelle cartelle strettamente necessarie, ad esempio upload, cache o log applicativi.
HTTPS e certificati TLS
Per un server pubblico, HTTPS è ormai indispensabile. Permette di cifrare il traffico tra browser e server, proteggendo credenziali, cookie di sessione e dati inviati tramite form. Su Fedora è possibile utilizzare Certbot con Apache per richiedere certificati gratuiti da Let’s Encrypt, a condizione che il dominio punti correttamente all’indirizzo IP del server.
sudo dnf install -y certbot python3-certbot-apache
Avviare quindi la procedura guidata:
sudo certbot --apache
Per testare il rinnovo automatico:
sudo certbot renew --dry-run
Risoluzione dei problemi comuni
Se Apache non parte, il primo controllo da eseguire riguarda la sintassi della configurazione.
sudo apachectl configtest
Se una pagina PHP viene scaricata invece di essere interpretata, verificare che PHP sia installato correttamente e che Apache sia stato riavviato.
php -v sudo systemctl restart httpd
Se il browser non raggiunge il server da un altro dispositivo, controllare firewall, indirizzo IP e stato del servizio Apache.
sudo firewall-cmd --list-services systemctl status httpd ip a
Se PHP non riesce a connettersi a MariaDB, verificare credenziali, nome database, presenza del modulo php-mysqlnd e stato del servizio database.
php -m | grep -i mysql systemctl status mariadb sudo mariadb
Struttura consigliata per un piccolo progetto PHP
Per evitare di esporre file sensibili, è buona pratica separare la directory pubblica dal codice applicativo. Solo la cartella public dovrebbe essere usata come document root del Virtual Host.
/var/www/miosito/ ├── app/ │ ├── config.php │ └── database.php ├── public/ │ ├── index.php │ └── assets/ ├── storage/ │ ├── cache/ │ └── logs/ └── vendor/
In questo modo file di configurazione, credenziali e librerie non sono direttamente raggiungibili tramite browser.

