====== Configurazione di un server web ======
Appunti dalla lezione del //15 gennaio 2008//:
**Configurazione di un server web su sistema Debian GNU/Linux**
===== Panoramica sulle distribuzioni Linux =====
=== Debian ===
**[[wpit>Debian|Debian]]** è l'unica distribuzione interamente guidata dalla comunità, vanta una comunità di qualche migliaio di sviluppatori ed è famosa per il rigore con cui aderisce agli standard ed alla filosofia del software libero. E' la distribuzione che conta il maggior numero di pacchetti disponibili e che è stata adattata al maggior numero di piattaforme hardware.
=== Ubuntu ===
**[[wpit>Ubuntu|Ubuntu]]** è derivata da Debian, risultato dell'investimento del miliardario sudafricano **[[wpit>Mark_Shuttleworth|Mark Shuttleworth]]**. Orientata al settore desktop, è caratterizzata da rilasci frequenti, quindi versioni molto aggiornate del software. Installazione semplificata e riconoscimento dell'hardware automatico.
=== Red Hat ===
**[[wpit>Red_Hat|Red Hat]]** è una delle prima distribuzioni commerciali di GNU/Linux, orientata al segmento enterprise, per chi vuole un prodotto con un supporto commerciale.
=== Fedora ===
**[[wpit>Fedora (distribuzione Linux)|Fedora]]** è una distribuzione derivata da Red Hat, è il risultato dello sforzo comunitario in reazione alla decisione di Red Hat di abbandonare l'utenza privata per concentrasi solo su quella commerciale di tipo enterprise.
===== Debian =====
La distribuzione Debian non ha una politica commerciale di rilasci, la nuova versione esce solo //quando è pronta//. Per questo motivo la versione **stable** non contiene in generale software di ultima generazione, ma di 6/12 mesi. La comunità garantisce per la versione //stable// solo aggiornamenti di sicurezza e correzione di bug gravi, ma in generale nuove versioni di un programma non entreranno in essa. Per chi ha bisogno di software più aggiornato o chi vuole comunque sperimentare esiste la versione **testing** che offre comunque un livello di affidabilità di tutto rispetto. Attualmente la versione **stable 4.1** ha nome **Etch**, mentre le versione **testing** ha nome **Lenny**.
Per la versione //testing// non ha senso avere dei CD di installazione, si utilizza un CD minimale detto **[[http://www.debian.org/CD/netinst/|netinst]]** e tutto il resto del software viene prelevato via rete.
===== Ricerca di un pacchetto =====
La prima difficoltà nell'installare un software in Debian è la ricerca del **nome del pacchetto** che si desidera. Non è compito facile visto che ad oggi Debian offre oltre 20mila pacchetti software.
La pagina **[[http://www.debian.org/distrib/packages|packages]]** di www.debian.org offre uno strumento per la ricerca dei pacchetti. Per fortuna non bisogna preoccuparsi delle **dipendenze**: se un pacchetto per funzionare ha bisogno di altro software, questo verrà installato automaticamente.
La ricerca per la parola chiave **apache** nella distribuzione **testing** ha prodotto come risultato il pacchetto **apache_1.3.34-4.1_i386.deb**, dobbiamo invece cercare la nuova versione e quindi la parola **apache2**.
Notiamo che **apache2** in realtà è un pacchetto fittizio. Esistono diverse incarnazioni del programma Apache 2, ognuna adatta ad uno scopo specifico, scegliendo il generico pacchetto **apache2** in realtà viene installato il pacchetto **apache2-mpm-worker**, ed è qeusto pacchetto che contiene effettivamente l'eseguibile del programma. Questo avviene grazie al meccanismo delle **dipendenze** fornito dai pacchetti Debian. Sempre per via delle dipendenze altri pacchetti vengono installati automaticamente:
* **apache2-mpm-worker** l'incarnazione più performante di Apache
* **apache2.2-common** file di configurazione, etc.
* **apache2-utils** programmi accessori
* ...
===== Installazione =====
Prima di installare un pacchetto Debian dobbiamo verificare alcune cose:
- Il sistema deve sapere dove prelevare i pacchetti via rete (il repository).
- Eventualmente si deve indicare il **proxy HTTP**
- Bisogna prelevare l'elenco aggiornato dei pacchetti presenti sul repository Debian.
Il repository si configura nel file **''/etc/apt/sources.list''**, questo è il contenuto tipico:
deb http://ftp.us.debian.org/debian/ lenny main contrib non-free
deb-src http://ftp.us.debian.org/debian/ lenny main contrib non-free
La prima colonna indica il tipo di pacchetti presenti: pacchetti precompilati (**deb**) oppure pacchetti con i sorgenti (**deb-src**), quindi viene riportato l'URL. Bisogna anche indicare la versione della distribuzione desiderata per nome (**lenny**, come in questo caso) oppure per stato (**testing**). L'ultima parte indica che vogliamo attingere all'archivio principale (**main**), ma anche all'archivio dei pacchetti **non-free** e **contrib**, cioè quei pacchetti che non fanno propriamente parte di Debian magari per qualche restrizione sulla licenza d'uso.
Se l'accesso a internet avviene tramite proxy HTTP si esegue un comando del tipo:
export http_proxy="http://192.168.50.254:3128/
Se si usa la distribuzione **testing** è opportuno aggiornare periodicamente l'elenco dei pacchetti disponibili e **aggiornare i pacchetti all'ultima versione**. Queste operazioni andrebbero effettuate almeno **una volta al mese**:
apt-get update
apt-get upgrade
Se invece si utilizza la distribuzione **stable** l'operazione di aggiornamento va fatta solo nel caso che venga annunciato sul sito www.debian.org.
Sistemati tutti i prerequisiti, è estremamente semplice installare un pacchetto da riga di comando:
apt-get install apache2
===== Rimozione di un pacchetto =====
Alcuni comandi interessanti per gestire i pacchetti.
Per vedere quali pacchetti sono installati sul sistema si usa **dpkg --list**
dpkg --list
Vedere quali file sono stati installati da un pacchetto si usa **dpkg -L nome_pacchetto**:
dpkg -L apache2.2-common
/.
/etc
/etc/default
/etc/default/apache2
/etc/cron.daily
/etc/cron.daily/apache2
/etc/init.d
...
Per rimuovere un pacchetto, compresi i file di configurazione, c'è il comando **dpkg --purge nome_pacchetto**:
dpkg --purge apache2.2-common
===== Apache2 =====
Terminata l'installazione del programma, il servizio è già in esecuzione, lo si controlla con il comando **ps aux**:
ps uax | grep apache
root 9015 0.0 1.4 21780 7496 ? Ss Jan13 0:00 /usr/sbin/apache2 -k start
www-data 9028 0.0 1.1 21932 5944 ? S Jan13 0:00 /usr/sbin/apache2 -k start
www-data 9029 0.0 1.1 21932 5864 ? S Jan13 0:00 /usr/sbin/apache2 -k start
www-data 9030 0.0 1.1 21932 5936 ? S Jan13 0:00 /usr/sbin/apache2 -k start
www-data 9031 0.0 0.9 21932 4632 ? S Jan13 0:00 /usr/sbin/apache2 -k start
www-data 9042 0.0 1.1 21932 5820 ? S Jan13 0:00 /usr/sbin/apache2 -k start
www-data 21993 0.0 0.9 21932 4632 ? S Jan14 0:00 /usr/sbin/apache2 -k start
root 30981 0.0 0.1 1636 516 pts/0 R+ 10:10 0:00 grep apache
Il programma scrive il proprio log in **''/var/log/apache2/access.log''**, per vedere in tempo reale gli accessi fatti al server web si usa il comando **tail -f**:
tail -f /var/log/apache2/access.log
88.44.185.233 - - [16/Jan/2008:10:00:31 +0100] "GET /wiki/lib/tpl/sidebar/images/sidebar-border.gif
HTTP/1.1" 200 34 "http://paros.rigacci.org/wiki/lib/exe/css.php"
"Mozilla/5.0 (X11; U; Linux i686; it; rv:1.8.1.11) Gecko/20071204 Ubuntu/7.10 (gutsy) Firefox/2.0.0.11"
Per fermare e far ripartire il servizio apache esiste uno script nella directory **''/etc/init.d/''**:
/etc/init.d/apache2 stop
/etc/init.d/apache2 start
Molte le opzioni disponibili: **stop**, **start**, **restart**, **reload**, ... Utile l'opzione **reload** che rilegge il file di configurazione senza fermare il programma.
I file di configurazione sono contenuti nella directory **''/etc/apache2/''**, la struttura di questa directory è stabilita dal pacchettizzatore Debian, non è obbligatorio seguirla, ma è altamente consigliato.
^ /etc/apache2/sites-available/ | Contiene un file di configurazione per ogni sito web. |
^ /etc/apache2/sites-enabled/ | Se il sito web è attivo, si crea un link al corrispondente file in sites-available . |
^ /etc/apache2/mods-available/ | File di configurazione per i moduli aggiuntivi di Apache (es PHP). |
^ /etc/apache2/mods-enabled/ | Contiene dei link simbolici a mods-available per ogni modulo attivo. |
Dopo l'installazione di apache2 l'unico sito web disponibile è definito dal file **''/etc/apache2/sites-available/default''**, il file è suddiviso in sezioni e comprende diverse direttive. La sintassi del file di configurazione è documentata sul sito **[[http://httpd.apache.org/docs/2.2/|httpd.apache.org]]**
===== Installazione PHP =====
Il linguaggio PHP estende le capacità del server web, viene distribuito com un modulo per Apache.
Cercano tra i pacchetti Debian si trova il pacchetto **php5**, si tratta in realtà di un pacchetto fittizio che tramite il meccanismo delle dipendenze installa:
* **libapache2-mod-php5** il vero pacchetto che contiene il modulo per Apache
* **php5-common**
Al termine dell'installazione la configurazione di Apache è già effettuata grazie ai due file di configurazione:
/etc/apache2/mods-available/php5.conf
/etc/apache2/mods-available/php5.load
I file di configurazione sono attivi grazie ai due link omonimi che si trovano nella directory **''/etc/apache2/mods-enabled/''**. Per rendere effettiva la configurazione è sufficiente dare il comando
/etc/init.d/apache2 reload
Per testare il funzionamento del modulo è sufficiente creare un file nella **DocumentRoot**, ad esempio **''/var/www/prova.php''**:
Puntando un browser sull'indiritto del server web **%%http://ip_address/prova.php%%** si ottiene l'output della funzione ''**[[http://www.php.net/manual/it/function.phpinfo.php|phpinfo()]]**''.