Caso reale completato • Raspberry Pi + Apache + Disco esterno

Spostare un sito web
su disco esterno

Guida completa e aggiornata con la procedura realmente eseguita su Raspberry Pi: copia del sito dalla SD al disco esterno, aggiornamento del VirtualHost Apache corretto, verifica dei permessi, test del sito, eliminazione della vecchia copia dalla SD, configurazione del mount automatico con fstab e consigli utili per il futuro.

Percorso sorgente originale
/media/var/www/html/sito2
Nuova destinazione
/media/pi/SARDO1/sito2
Disco esterno
/dev/sda1 • LABEL="SARDO"
UUID usato in fstab
6232f8ab-1dc6-4a59-9df8-fd7f8887c6e3
VirtualHost aggiornato
/etc/apache2/sites-enabled/giuseppemontisci.conf
Risultato finale
SD da 95% a 72% di utilizzo
Procedura completa aggiornata
1

Creare la cartella di destinazione

Prima si prepara la cartella sul disco esterno in cui verrà copiato il sito.
Questo comando crea la cartella sul disco esterno. Non tocca il sito originale e non cancella nulla.
Comando
sudo mkdir -p /media/pi/SARDO1/sito2
2

Copiare tutto il sito con rsync

Si usa rsync perché mantiene file, date, permessi e copia anche gli elementi nascosti.
La copia crea un duplicato completo nella nuova posizione. Il sito originale resta attivo sulla SD finché non decidi di eliminarlo.
Comando
sudo rsync -avh /media/var/www/html/sito2/ /media/pi/SARDO1/sito2/
3

Verificare che la copia sia completa

Controlla la dimensione della cartella vecchia e di quella nuova. Devono risultare molto simili.
Questo controllo è utile prima di cambiare Apache. Se i valori coincidono, la copia è stata eseguita correttamente.
Comandi
du -sh /media/var/www/html/sito2
du -sh /media/pi/SARDO1/sito2
4

Impostare i permessi corretti per Apache

Apache usa normalmente l'utente www-data, quindi la nuova cartella deve essere leggibile dal servizio web.
Se i permessi non sono corretti, il sito può rispondere con errori 403, non caricare immagini o non leggere correttamente i file PHP.
Comando
sudo chown -R www-data:www-data /media/pi/SARDO1/sito2
5

Controllare quale VirtualHost Apache usa davvero

In presenza di più siti o certificati SSL, Apache può usare file diversi da quelli previsti.
Questo controllo serve a capire da quale file Apache sta leggendo i DocumentRoot effettivi.
Controllo VirtualHost
apachectl -S
Controllo DocumentRoot attivi
grep -R DocumentRoot /etc/apache2/sites-enabled
6

Modificare il VirtualHost corretto

Nel caso reale, il sito in uso non puntava a 000-default.conf, ma a giuseppemontisci.conf.
Questo è stato il passaggio decisivo: Apache continuava a leggere la cartella vecchia sulla SD perché il VirtualHost attivo era un altro.
Apri il file reale del sito
sudo nano /etc/apache2/sites-enabled/giuseppemontisci.conf
Sostituire questa riga
DocumentRoot /media/var/www/html/sito2
Con questa riga
DocumentRoot /media/pi/SARDO1/sito2
7

Consentire ad Apache l'accesso alla cartella sotto /media

Se Apache deve servire file da una cartella fuori da /var/www, conviene aggiungere un blocco Directory.
Questo passaggio è utile per evitare problemi di accesso quando il sito si trova su un disco esterno montato sotto /media.
Apri apache2.conf
sudo nano /etc/apache2/apache2.conf
Aggiungi questo blocco
<Directory /media/pi/SARDO1/sito2>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>
8

Controllare la configurazione Apache

Prima del riavvio è sempre bene verificare che non ci siano errori di sintassi.
Se il comando restituisce Syntax OK, la configurazione è valida.
Comando
sudo apachectl configtest
9

Riavviare Apache

Una volta aggiornata la configurazione, il servizio deve essere riavviato per applicare il nuovo DocumentRoot.
Comando
sudo systemctl restart apache2
10

Verificare che Apache stia servendo davvero il sito nuovo

Dopo il riavvio conviene controllare che la cartella attiva sia davvero quella sul disco esterno.
Questo controllo mostra il contenuto della cartella nuova. Se il sito funziona e i file sono presenti, lo switch è riuscito.
Controllo cartella attiva
ls -lah /media/pi/SARDO1/sito2 | head
11

Testare il sito da browser

Verifica che pagine, immagini, login, upload, database e percorsi funzionino normalmente.
Nel caso reale il sito ha funzionato correttamente dalla nuova posizione sul disco esterno.
URL di test
http://192.168.1.180
12

Eliminare la vecchia copia dalla SD

Solo dopo aver verificato tutto, si può cancellare la cartella originale per recuperare spazio.
Questo comando cancella definitivamente la vecchia copia sulla SD. Eseguire solo dopo aver provato il sito dalla nuova posizione.
Comando finale di pulizia
sudo rm -rf /media/var/www/html/sito2
13

Prendere l'UUID del disco esterno

Per montare sempre il disco all'avvio, serve identificare il disco in modo stabile tramite UUID.
Nel caso reale, il disco esterno era /dev/sda1 con filesystem ext4 e UUID specifico.
Comando
sudo blkid
UUID del caso reale
UUID="6232f8ab-1dc6-4a59-9df8-fd7f8887c6e3"
14

Aggiungere il mount automatico in /etc/fstab

Questo passaggio fa montare automaticamente il disco all'avvio del Raspberry.
Senza questo passaggio, dopo un riavvio il sito potrebbe non trovarsi più nella cartella prevista e Apache non servirebbe i file.
Apri fstab
sudo nano /etc/fstab
Riga da aggiungere in fondo
UUID=6232f8ab-1dc6-4a59-9df8-fd7f8887c6e3 /media/pi/SARDO1 ext4 defaults,nofail,x-systemd.device-timeout=10 0 2
Nota: l'opzione nofail evita che il Raspberry resti bloccato in avvio se il disco esterno non è collegato.
15

Ricaricare systemd e testare fstab

Dopo aver modificato fstab, systemd va ricaricato e il mount va testato senza riavvio.
Nel caso reale è comparso solo un avviso iniziale, risolto con systemctl daemon-reload. Dopo il reload, il mount è risultato corretto.
Ricaricare systemd
sudo systemctl daemon-reload
Test mount
sudo mount -a
Controllo finale spazio e mount
df -h
Stato finale raggiunto

Memoria SD

Dopo lo spostamento del sito e la rimozione della vecchia copia:

72%

58 GB totali • 40 GB usati • 16 GB liberi

Disco esterno

Il sito è ora ospitato sul disco esterno con ampio spazio disponibile:

1,5 TB liberi

1,8 TB totali • 260 GB usati • mount su /media/pi/SARDO1

Apache

Il VirtualHost corretto è stato aggiornato con successo:

OK

DocumentRoot attivo: /media/pi/SARDO1/sito2

Mount automatico

Il disco esterno viene montato automaticamente all'avvio:

OK

Configurazione salvata in /etc/fstab

Rollback rapido se qualcosa non va
R

Ripristinare il vecchio DocumentRoot

Se il sito non funziona dalla nuova posizione, puoi riportare Apache al percorso precedente e riavviare il servizio.
Nel caso reale il file corretto da ripristinare è stato /etc/apache2/sites-enabled/giuseppemontisci.conf.
Riapri il VirtualHost
sudo nano /etc/apache2/sites-enabled/giuseppemontisci.conf
Ripristina questa riga
DocumentRoot /media/var/www/html/sito2
Controlla e riavvia Apache
sudo apachectl configtest
sudo systemctl restart apache2
Note importanti

1. Il disco esterno deve restare disponibile

Se il disco esterno viene scollegato mentre Apache punta al nuovo percorso, il sito non potrà essere servito correttamente. Per questo è fondamentale il mount automatico e una connessione stabile del disco.

2. Attenzione ai percorsi assoluti nel codice

Se nei file PHP o negli script hai scritto manualmente percorsi come /media/var/www/html/sito2, vanno aggiornati al nuovo percorso /media/pi/SARDO1/sito2.

3. Testa soprattutto upload, immagini e allegati

Le funzioni che leggono o scrivono file sono quelle più sensibili dopo uno spostamento. Verifica sempre cartelle upload, esportazioni, PDF, immagini e file generati dal sito.

4. Hai ancora un altro sito sulla SD

Dai controlli Apache è emerso anche un altro percorso ancora sulla memoria principale: /media/var/www/html/sito1. In futuro potrai valutare di spostare anche quello sul disco esterno.

Consigli utili per il futuro

Aggiornamento una volta al mese

Una volta al mese conviene aggiornare il sistema. È una buona abitudine per sicurezza, stabilità e compatibilità del server.

Aggiornamento mensile
sudo apt update
sudo apt upgrade -y

Controllo spazio disco

Ogni tanto verifica rapidamente quanto spazio resta sulla SD e sul disco esterno, così eviti di ritrovarti di nuovo vicino al 95%.

Controllo spazio
df -h

Controllo cartelle più pesanti

Se vuoi capire subito cosa occupa più memoria nel Raspberry, usa questo comando. È molto utile per manutenzione e pulizia.

Analisi spazio
sudo du -xh / | sort -rh | head -20

Controllo stato Apache

Se il sito non risponde o vuoi fare un controllo veloce, verifica subito lo stato del servizio Apache.

Stato Apache
sudo systemctl status apache2

Controllo configurazione Apache prima dei riavvii

Ogni volta che modifichi VirtualHost, SSL, alias o cartelle, controlla prima la sintassi e poi riavvia.

Controllo + restart
sudo apachectl configtest
sudo systemctl restart apache2

Riavvio di controllo ogni tanto

Dopo grandi modifiche a dischi, mount o configurazioni web, un riavvio di test è utile per verificare che tutto torni operativo automaticamente.

Riavvio di verifica
sudo reboot

Controllo dischi montati

Se hai dubbi sul disco esterno, controlla sempre che sia ancora montato correttamente nel punto previsto.

Controllo mount
df -h
mount | grep /media

Backup futuro consigliato

Anche se in questa procedura hai scelto la strada più prudente con copia prima e cancellazione dopo, in futuro conviene pianificare un backup periodico del sito e del database.

Esempio copia di sicurezza
sudo rsync -avh /media/pi/SARDO1/sito2/ /media/pi/SARDO1/backup_sito2/
Comando copiato negli appunti