Salta al contenuto principale

Come spostare la root di un sito web Apache in una nuova posizione su Ubuntu

Profile picture for user luca77king

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