Di default, il server web Apache serve documenti memorizzati nella directory var/www/html. Questa directory viene chiamata document root. Quando un un utente fa una richiesta al server, questo risponderà con i file appropriati della document root.
Di solito, questa directory si trova sul filesystem root insieme al resto del sistema operativo. A volte, però, può essere utile spostare la root del documento in un'altra posizione, ad esempio in un filesystem montato separato. Ad esempio, se si servono più siti web dalla stessa istanza di Apache, mettere la document root di ogni sito su un volume separato permette di scalare in base alle esigenze di un sito o di un client specifico.
Di recente ho avuto la necessità di spostare alcune installazioni nella cartella home dell’utente, in quanto la maggior parte dei client Git non riesce ad accedere alla cartella /var/www/html.
In questa guida, vedremo come spostare la document root di un virtual host Apache dalla sua posizione predefinita all’interno di var/www/html nella nuova cartella home/user/www.
Nel mio caso la cartella si trova al percorso var/www/html/sviluppo/lucaterribili e la voglio spostare in home/jarvis/lucaterribili, dove jarvis è l’utente di sistema che utilizzo.
Utilizzerò il comando rsync per copiare la cartella. Rsync è uno strumento di sincronizzazione di file utilizzato in sistemi operativi basati su Unix come Linux e macOS. Permette di copiare file e directory da una posizione a un'altra, in modo simile al comando cp. Tuttavia, rsync offre alcune funzionalità aggiuntive che lo rendono più efficace in determinate situazioni.
Una delle principali differenze tra rsync e cp è che rsync è in grado di sincronizzare solo le parti dei file che sono cambiate, invece di copiare l'intero file ogni volta. Ciò rende rsync molto più veloce quando si copiano grandi quantità di dati o quando si devono eseguire molte copie consecutive. Inoltre, rsync è in grado di gestire la copia di file su reti di computer, mentre cp è limitato all'uso sulla stessa macchina.
Rsync supporta inoltre l'utilizzo di opzioni per escludere determinati file o directory dalla sincronizzazione, per esempio i file temporanei o i file di backup. Inoltre, rsync può essere utilizzato per creare copie di backup dei file con la sua opzione di sincronizzazione bidirezionale, che permette di mantenere le modifiche sia nella sorgente che nella destinazione.
In sintesi, rsync è uno strumento più potente e flessibile rispetto a cp per la copia e la sincronizzazione dei file, soprattutto in ambienti di rete o quando è necessario copiare grandi quantità di dati. Tuttavia, cp è spesso sufficiente per le operazioni di copia di base e può essere più semplice da utilizzare in alcune situazioni.
sudo rsync -av /var/www/html/sviluppo/lucaterribili/ /home/jarvis/www/lucaterribili
Aggiornare il virtual host
Prossimo step è aggiornare il virtual host. Nel mio caso, nel corso degli anni, ho inserito tutti i virtual hosts all’interno dello stesso file: /etc/apache2/sites-available/000-default.conf. Questa migrazione rappresenta anche un’occasione per fare un pò d’ordine.
Per cui, apro il file in questione ed elimino il blocco relativo al virtual host di mio interesse, avendo cura di copiarlo da qualche parte.
<VirtualHost *:80>
ServerAdmin webmaster@lucaterribili.loc
ServerName wwww.lucaterribili.loc
ServerAlias lucaterribili.loc
DirectoryIndex index.html index.htm index.php
DocumentRoot /var/www/html/sviluppo/lucaterribili/web
<Directory /var/www/html/sviluppo/lucaterribili/web>
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
Include /etc/apache2/conf-available/php8.1-fpm.conf
</VirtualHost>
Adesso creo un file di configurazione apposito, dove incollerò il blocco precedente, cambiando però i percorsi con la nuova locazione dell’applicattivo.
<VirtualHost *:80>
ServerAdmin webmaster@lucaterribili.loc
ServerName wwww.lucaterribili.loc
ServerAlias lucaterribili.loc
DirectoryIndex index.html index.htm index.php
DocumentRoot /home/jarvis/www/lucaterribili/web
<Directory /home/jarvis/www/lucaterribili/web>
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
Include /etc/apache2/conf-available/php8.1-fpm.conf
</VirtualHost>
Abilito la nuova configurazione creando un link simbolico verso /etc/apache2/sites-enabled
sudo ln -s /etc/apache2/sites-available/lucaterribili.loc.conf /etc/apache2/sites-enabled/
Ora dobbiamo permettere al web server di accedere a questa cartella, la procedura io l’ho già fatta nella migrazione precedente. In ogni dobbiamo aggiungere questo blocco nel file /etc/apache2/apache2.conf
<Directory /home/jarvis/www>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
Ricordo sempre che jarvis è il mio utente di sistema, quindi dovete sostituirlo con il vostro.
Aggiornare permessi e riavviare Apache
Prossimo step, impostiamo i permessi alla nuova cartella dell’applicazione
sudo chown -R $USER:www-data /home/jarvis/www/lucaterribili/web
sudo chmod -R 775 /home/jarvis/www/lucaterribili/web/
E infine riavviamo Apache
sudo systemctl restart apache2