Server e reti

Server LAMP su Raspberry PI

Installiamo Apache2, MySQL, PHP7 e phpMyAdmin su Raspbian, realizzando di fatto un vero e proprio server web.

La seguente guida vi accompagnerà nell’installazione di una suite di software che vi permetterà di ottenere con facilità un server web sicuro, performante e stabile. L’acronimo LAMP si può infatti scomporre negli ingredienti necessari: Linux, Apache, MySQL (su Raspberry Pi OS sostituito dal compatibile MariaDB) e PHP. In aggiunta, installeremo l’applicativo web phpMyAdmin, che permette di gestire il server MySQL tramite un’interfaccia grafica semplificata.

Prima di tutto aggiorniamo l’elenco dei pacchetti disponibili:

sudo apt update

e, se il sistema non è aggiornato da tempo, installiamo gli aggiornamenti disponibili:

sudo apt full-upgrade -y

Installare Apache

La prima cosa di cui abbiamo bisogno è apache2, il software che gestisce il server HTTP. Con il seguente comando installiamo l’applicativo:

sudo apt install apache2 -y

Possiamo verificare che l’installazione sia andata a buon fine visitando con un browser il server appena installato, aprendo uno dei due seguenti indirizzi (entrambi puntano al computer da cui li aprite, quindi funzionano solo dal browser del Raspberry Pi stesso):

  • http://localhost
  • http://127.0.0.1

Se il Raspberry Pi è senza monitor, da un altro computer della stessa rete usate http://IP-del-Raspberry (l’indirizzo si ricava con il comando hostname -I) oppure http://nomehost.local.

La pagina visualizzata corrisponde al file /var/www/html/index.html.

Installare PHP

Ora possiamo procedere con l’installazione di PHP, del modulo per Apache e dell’estensione per MySQL (verrà installata la versione di PHP più recente disponibile nei repository della vostra distribuzione):

sudo apt install php libapache2-mod-php php-mysql -y

Al termine è necessario riavviare il server Apache:

sudo systemctl restart apache2

Per verificare il corretto funzionamento creiamo con l’editor nano una pagina dinamica PHP:

sudo nano /var/www/html/prova.php

e scriviamo all’interno della pagina:

<?php phpinfo(); ?>

Per salvare premiamo Ctrl+O seguito da Invio, poi Ctrl+X per uscire da nano. Visitando ora uno dei seguenti indirizzi vedremo la pagina di informazioni sulla configurazione di PHP:

  • http://IP-del-Raspberry/prova.php (da un altro computer della rete)
  • http://localhost/prova.php (dal Raspberry Pi stesso)

Attenzione: questa pagina espone molte informazioni sul sistema. Terminata la verifica, è consigliabile eliminarla:

sudo rm /var/www/html/prova.php

Installare MariaDB

Ora procediamo con l’installazione del server di database. Raspberry Pi OS, basato su Debian, non fornisce il pacchetto mysql-server: al suo posto si usa MariaDB, compatibile con MySQL (i comandi mysql restano gli stessi):

sudo apt install mariadb-server -y

Possiamo verificare che Apache e MariaDB siano attivi con:

systemctl status apache2 mariadb

Avviamo quindi la procedura guidata di messa in sicurezza di MariaDB. Verrà chiesta la password attuale di root (premere Invio, perché non è impostata), se passare all’autenticazione unix_socket e se cambiare la password di root: a queste due domande si può rispondere n, perché root accede già tramite l’utente di sistema. Seguono le domande per rimuovere gli utenti anonimi, l’accesso remoto di root e il database di test e per ricaricare i privilegi: salvo esigenze particolari, conviene rispondere affermativamente.

sudo mysql_secure_installation

Nota: su Raspberry Pi OS l’utente root di MariaDB si autentica tramite l’utente di sistema (plugin unix_socket), quindi per accedere come root basta digitare sudo mysql, senza password.

Installare phpMyAdmin

Al termine della procedura guidata installiamo phpMyAdmin:

sudo apt install phpmyadmin -y

Durante l’installazione verranno poste alcune domande:

  • alla scelta del server web, selezionare apache2 premendo la barra spaziatrice (deve comparire un asterisco), poi confermare con Invio;
  • alla domanda sulla configurazione del database con dbconfig-common, rispondere Sì;
  • infine verrà richiesta la password per l’utente MySQL di nome phpmyadmin: sceglietene una e ricordatela.

Se durante l’installazione non avete selezionato apache2, potete abilitare manualmente la configurazione di phpMyAdmin con i seguenti comandi:

sudo ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf-available/phpmyadmin.conf
sudo a2enconf phpmyadmin
sudo systemctl reload apache2

A questo punto con il nostro browser possiamo visitare uno dei seguenti indirizzi:

  • http://IP-del-Raspberry/phpmyadmin (da un altro computer della rete)
  • http://localhost/phpmyadmin (dal Raspberry Pi stesso)

Se abbiamo eseguito tutto correttamente ci ritroveremo alla schermata di login di phpMyAdmin. Le credenziali sono le seguenti:

  • utente: phpmyadmin
  • password: quella digitata durante l’installazione di phpMyAdmin

Limitare l’accesso alla rete locale con ufw

phpMyAdmin dà accesso completo ai database: non va mai esposto su Internet (nessun port forwarding della porta 80 sul router). Se il Raspberry è in una rete condivisa conviene limitare l’accesso alla sola LAN con il firewall ufw, consentendo anche SSH prima di attivarlo per non perdere l’accesso remoto (sostituite 192.168.1.0/24 con la vostra rete locale):

sudo apt install ufw -y
sudo ufw allow from 192.168.1.0/24 to any port 22 proto tcp
sudo ufw allow from 192.168.1.0/24 to any port 80 proto tcp
sudo ufw enable
sudo ufw status verbose

Una volta attivato, ufw blocca tutte le connessioni in ingresso non esplicitamente consentite: prima di chiudere la sessione SSH controllate con sudo ufw status verbose che la regola per la porta 22 sia presente. Se in seguito attivate HTTPS, aggiungete anche la regola per la porta 443:

sudo ufw allow from 192.168.1.0/24 to any port 443 proto tcp

Se phpMyAdmin deve essere raggiunto da altre reti, usatelo solo tramite HTTPS o una VPN.

Utenti del database

L’utente phpmyadmin ha permessi limitati. Se abbiamo bisogno di operare su phpMyAdmin come amministratore è utile creare un nuovo utente. Accediamo a MySQL come root:

sudo mysql

e digitiamo:

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

sostituendo ovviamente NOME e PASSWORD con i vostri dati (scegliete una password robusta). Ora assegniamo a questo nuovo utente i permessi di amministrazione con:

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

sostituendo nuovamente NOME con il nome utente scelto in precedenza. Questo utente ha il controllo completo di tutti i database: usatelo solo per l’amministrazione e, per i siti o le applicazioni, create utenti con permessi limitati al singolo database. Ad esempio, per un utente applicativo che deve operare solo sul database NOME_DB:

CREATE USER 'APP'@'localhost' IDENTIFIED BY 'PASSWORD';
GRANT ALL PRIVILEGES ON NOME_DB.* TO 'APP'@'localhost';

Indicando ‘localhost’ l’utente potrà collegarsi solo dal Raspberry stesso (phpMyAdmin compreso) e non da altri host della rete. Per uscire da MySQL basterà digitare:

exit

Aumentare il limite di upload di PHP

Come ultima cosa: di default PHP impone un limite alla dimensione dei file caricati sul server, e ciò può essere scomodo nel caso in cui volessimo importare in phpMyAdmin un database già esistente. Per aumentare questo limite dobbiamo modificare il file php.ini di Apache. Il percorso dipende dalla versione di PHP installata (7.4 su Bullseye, 8.2 su Bookworm, 8.4 su Trixie), che possiamo scoprire con:

php -v

Ad esempio, con PHP 8.4 il file da modificare sarà:

sudo nano /etc/php/8.4/apache2/php.ini

Cerchiamo (con Ctrl+W) le righe

upload_max_filesize = 2M
post_max_size = 8M

e modifichiamole in

upload_max_filesize = 20M
post_max_size = 25M

(il valore di post_max_size deve essere maggiore o uguale a quello di upload_max_filesize). Salviamo con Ctrl+O, usciamo con Ctrl+X e riavviamo Apache per applicare le modifiche:

sudo systemctl restart apache2

A questo punto abbiamo terminato e possiamo sfruttare il nostro nuovo server LAMP per sperimentare, per installare CMS come WordPress o Joomla!, per creare pagine web personalizzate o per raccogliere i dati di sistemi IoT esterni nel database.

Admin | MST-Tutorial

Appassionato di elettronica, elettrotecnica e programmazione. Fondatore di MST-Tutorial, condivido con entusiasmo conoscenze, esperienze e progetti legati all’innovazione tecnologica, con l’obiettivo di rendere accessibili concetti tecnici complessi attraverso tutorial chiari e pratici.
Pulsante per tornare all'inizio