Ricetta: server LAMP con Debian

Informatica

La volta scorsa vi ho parlato di come ho installato e fatto funzionare VMware Server su Mandriva 2008, nel contesto del mio progetto di realizzare "dal basso", componente per componente, un portale per una scuola di specializzazione.

Oggi vediamo come ho installato Debian Etch sul server virtuale, quali componenti ho installato e, cosa più importante, perchè.
La configurazione dei servizi e la migrazione dell'installazione dalla macchina virtuale ad una pendrive avviabile da usare con Linutop saranno trattati nei prossimi post.

Innanzi tutto, il nostro obiettivo: costruire un portale web basato su Drupal per una scuola di specializzazione per psicologi.
Cosa serve per realizzare questo? Un computer dotato di un'adeguata connessione ad Internet e un sistema operativo con installati i giusti componenti software. Il miglior modo di fare una cosa del genere è usare software libero.

Ecco allora gli ingredienti software che ci servono (IMHO).

Sistema operativo: Debian GNU/Linux 4.0 "Etch"
Un sistema operativo è una collezione di software necessari per far funzionare un computer e per far girare programmi su un computer. GNU/Linux è un sistema operativo completo distribuito sotto licenze libere da varie società e fondazioni. Debian è una delle distribuzioni GNU/Linux più affidabili e semplici da gestire oggi disponibili. Ci permette di installare facilmente un sistema che comprenda solo i componenti che ci servono (facendoci risparmiare spazio su disco), e ci permette di amministrarlo in modo semplice senza ricorrere ad interfacce grafiche. Inoltre i pacchetti inclusi nel ramo stabile di Debian sono sottoposti a rigorosissimi controlli di stabilità che ci garantiscono un sistema operativo estremamente affidabile. Infine, Debian è anche un'ottima scelta dal punto di vista legale, in quanto fornisce solo pacchetti distribuiti con licenze libere, che possiamo usare come vogliamo negli ambiti che vogliamo.
Server Web: Apache 2
Il server web è il programma che sta in ascolto e che si occupa di inviarci le pagine dei siti web che navighiamo. Il Server Web HTTP Apache è al momento il server web più utilizzato al mondo, grazie alle molte funzioni che fornisce e alla sua affidabilità. Tra le funzioni interessanti fornite da Apache, c'è il supporto a vari linguaggi di scripting, in grado di creare pagine "dinamiche" che aggiornano i propri contenuti in base a regole definite dalle cosidette applicazioni web, come Drupal. La gran parte delle volte questo accade consultando informazioni memorizzate in un database e poi impaginandole secondo le istruzioni fornite dalla nostra applicazione web.
Software di gestione di database: MySQL 5
Un database è una collezione di dati strutturati, utilizzata per conservare vari tipi di dati e le relazioni tra insiemi di dati. Per accedere e gestire i dati in un database è necessario un software apposito, chiamato appunto DBMS. MySQL è uno dei DBMS più veloci esistenti, ed è utilizzato per moltissimi progetti, anche grazie all'ottima integrazione con Linux, Apache e PHP. Drupal usa MySQL per memorizzare tutte le informazioni che saranno contenute nel portale: articoli, fotografie, profili degli utenti, ...
Un interprete per un linguaggio di scripting: PHP 5
Le istruzioni necessarie per creare i contenuti delle pagine web dinamiche devono essere dati al server web in un linguaggio cheesso possa capire. Tra le tante scelte disponibili in ambiente GNU/Linux, PHP è il più usato per gli scopi simili al nostro. Drupal è un'applicazione scritta in PHP. In realtà, poichè usiamo Drupal, non useremo quasi mai PHP direttamente.
Un sistema di gestione di contenuti (CMS): Drupal 5
Un CMS è un programma che ci permette di organizzare e facilitare la creazione di documenti in collaborazione con altri utenti. In questo modo ci è possibile realizzare un sito semplice da gestire cui possano contribuire più persone simultaneamente, scrivendo articoli, discussioni in forum, o commentando pagine, il tutto senza che gli utenti debbano conoscere i dettagli tecnici necessari per la normale pubblicazione di pagine sul web. Usando un CMS aggiungere pagine è semplice come compilare un modulo. Inoltre, il CMS ci permette di organizzare i contenuti del nostro sito in molti modi, creando automaticamente indici e riferimenti tra dati (che possono essere di varia natura) non appena un utente ha aggiunto un contenuto. Drupal è un CMS sofisticato ed estremamente flessibile, in grado di realizzare siti semplici come blog o siti complessi come portali che raccolgono contributi di centinaia di utenti.
Una shell sicura per l'amministrazione e il trasferimento di file: OpenSSH
Il computer su cui andrà installato il server web è privo di monitor, e comunque non è desiderabile che un operatore possa avervi accesso fisico. Per questo è necessario uno strumento per aprire una shell per eseguire comandi direttamente sul server via rete. SSH consente di impartire comandi sul server tramite la rete attraverso un canale sicuro. In questo modo, per accedere al server basta far uso di un qualsiasi client SSH. Avrete notato che in questa lista non ho inserito alcun server FTP, il servizio usato tradizionalmente per caricare file sul server: questo perché OpenSSH fornisce già un servizio analogo, chiamato SFTP, che in più grarantisce che i file siano trasmessi in modo sicuro. Il supporto SFTP è sempre presente in ambiente GNU/Linux, mentre in MS Windows si può usare WinSCP.
Uno strumento per amministrare i database in modo semplice: phpMyAdmin
La gran parte delle operazioni sul database verranno eseguite da Drupal in modo trasparente, ma ci serve comunque uno strumento per risolvere eventuali problemi e per fare copie di riserva del database del portale. phpMyAdmin fa esattamente questo: ci permette di amministrare il database in modo completo direttamente dal nostro browser web, tramite un'interfaccia semplice da usare. Onestamente, le stesse operazioni possono essere fatte anche tramite alcuni strumenti da riga di comando forniti insieme a MySQL, per cui la sua presenza potrebbe essere pleonastica. Ma in ogni caso è uno strumento che è comodo avere a disposizione. Se si rilevasse inutile o dannoso possiamo sempre rimuoverlo in un secondo momento.
Uno strumento per aumentare la sicurezza del server web Apache: ModSecurity
ModSecurity fa proprio questo: sorveglia il funzionamento del server web e lo protegge da attacchi o abusi potenzialmente dannosi. Quella sicurezza in più che fa dormire sonni più tranquilli.
Un sistema per fare copie di riserva dei dati sul server in modo efficiente: rsync
Senza dubbio SFTP è più che sufficiente per spostare file da e verso il server, ma se dobbiamo fare backup periodici del sistema (che ovviamente comportano la copia di grandi quantità di dati) ci serve uno strumento che sia efficiente, nel senso che deve copiare solo i file modificati dall'ultimo backup, e non tutto quanto, in modo da ridurre al minimo i tempi necessari per il backup. Rsync fa proprio questo, e per spostare dati in modo sicuro fa uso di SSH.
Un sistema per eseguire operazioni di manutenzione periodicamente: cron e anacron
Naturalmente il nostro server dovrà fare delle operazioni periodiche di manutenzione. Per questi scopi nel sistema è già incluso cron, uno strumento che lancia periodicamente i comandi nella sua "agenda". Ma se all'ora in cui era prevista da cron l'esecuzione di un'operazione il computer era spento, l'operazione salta. Anacron risolve il problema: controlla periodicamente quanto tempo è passato dall'ultima esecuzione di un'operazione pianificata, e se è maggiore del tempo previsto, la esegue. È vero, non dovrebbe essere necessario in un computer che deve stare sempre acceso, ma non fa male sapere che comunque, anche in caso di imprevisti, anacron eseguirà tutte le operazioni che mettiamo in "agenda".
Un demone per la sincronizzazione dell'ora: ntpd
Molti ignorano che una delle cause più frequenti di problemi di connettività è dovuta al fatto che l'orologio del computer è regolato in modo sbagilato. Il demone NTP si occupa di contattare periodicamente dei server che di mestiere dànno l'ora, in modo da tenere l'orologio di sistema sincronizzato ad essi nel modo più preciso possibile.

Questo è quel che serve.

A questi programmi, IMHO necessari per un server web, ho aggiunto qualche utilità per semplificarmi la vita quotidiana, visto che non ho installato alcuna interfaccia grafica sul server e che le poche operazioni di gestione necessarie avverranno solo tramite riga di comando. Queste utilità sono un file manager semi-grafico (mc alias Midnight Commander), un editor di testo avanzato (Vim), un "task manager" amichevole e comodo da usare (htop) e sudo, un'utilità per consentire agli utenti normal di eseguire alcuni comandi amministrativi in condizioni controllate (questo per evitare il più possibile l'uso dell'account root pericoloso per l'utente distratto), oltre ad alcuni pacchetti di documentazione di sistema.

Addirittura, se avviamo mc, vim, htop o aptitude (il programma semi-grafico di gestione dei pacchetti di Debian) dentro un terminale linux dopo che ci siamo connessi tramite ssh, possiamo interagire con i programmi anche tramite il mouse!

Tutto ciò che non è né necessario al sistema operativo, né è stato citato finora è superfluo, e va rimosso.

Ma veniamo alla pratica, che ho tanto rinviato perché fin troppo facile, almeno secondo me.

Ecco la ricetta:

Prima di tutto, mi sono procurato l'immagine ISO da circa 180 MB del CD Debian netsinst per fare un'installazione via rete da un CD minimale. Dovendo installare il sistema su una macchina virtuale, non ho neanche masterizzato l'immagine su CD-R, ma ho semplicemente fatto puntare il lettore CD della macchina virtuale all'immagine scaricata.

Ho poi fatto avviare la macchina virtuale dal CD (premere ESC al boot), e ho fatto partire l'installazione grafica, digitando "installgui" al prompt del boot del CD. Ho seguito l'installazione, che è stata piuttosto semplice, anche grazie alla Guida all'installazione di Debian, veramente ben fatta. Sostanzialmente ho creato una sola partizione che riempiva tutto il disco virtuale da 4GB (nessuno swap), l'ho fatta formattare in ext3, e poi ho definito la password di root e ho creato un nuovo utente.

Quando il programma di installazione mi ha chiesto se poteva scaricare alcuni pacchetti aggiuntivi per il sistema ho dato il mio assenso, ma quando mi ha chiesto se volevo che installasse automaticamente dei pacchetti specifici in relazione allo scopo cui è destinato il sistema ho rifiutato, perchè preferisco scegliere io i pacchetti da installare.

Finita l'installazione, al primo avvio mi sono loggato come root, ho configurato la rete, ho aggiornato l'indice dei pacchetti e i pacchetti installati con i due comandi:

apt-get update
apt-get upgrade

E poi ho installato quel che mi serviva. Il bello di Debian è che installare uno o più nuovi pacchetto è semplice come dire il nome del programma che vogliamo. Nel mio caso (occhio che va tutto in una riga):

apt-get install apache2-mpm-prefork libapache2-mod-php5 mysql-server php5-mysql php5-gd phpmyadmin rsync ntp ntp-simple anacron mc htop sudo debian-reference-it

A questo punto il sistema di gestione dei pacchetti di Debian si è dato da fare per scaricare tutto il necessario e installarlo per me. In pochi minuti avevo (quasi) tutto quello che mi serviva, già pronto per l'uso!

Mancano infatti all'appello solo Drupal e ModSecurity. Per ragioni di licenza (gli sviluppatori Debian sono molto pignoli) ModSecurity non può essere fornito direttamente da Debian, e sono dovuto andare sul sito del progetto e rintracciare i pacchetti già pronti prodotti dalla comunità (Community-Produced Binary packages). Anche in questo caso è stato facile scaricarli e installarli (2 passi invece che uno solo):

wget http://etc.inittab.org/%7Eagi/debian/libapache-mod-security2/etch/mod-security2-common_2.1.1-0_all.deb  http://etc.inittab.org/%7Eagi/debian/libapache-mod-security2/etch/libapache2-mod-security2_2.1.1-0_i386.deb
dpkg -i mod-security2-common_2.1.1-0_all.deb libapache2-mod-security2_2.1.1-0_i386.deb

Prima di installare Drupal ho controllato il corretto funzionamento di Apache, PHP, MySQL e php-mysql, ho creato un nuovo database e nuovi utenti del database, come suggerito in questa utile guida:
http://php.html.it/guide/leggi/92/guida-php-su-linux/

Per Drupal sono andato sul sito http://drupal.org/, ho scaricato dalla sezione download l'ultima release, ho scompattato il pacchetto nella directory /var/www e ho seguito l'ottima guida all'installazione di Drupal dal sito ufficiale:
http://drupal.org/getting-started/5

A questo punto, potevo già cominciare a creare il mio sito, era tutto funzionante! Della configurazione di Drupal e degli altri programmi parlerò la prossima volta.

Un'ultima nota riguardo all'installazione. Dopo aver completato l'installazione dei pacchetti che ci servono (di solito, provando tante cose si finisce per pasticciare un po'), è una buona idea installare deborphan, per individuare e rimuovere i pacchetti superflui al nostro sistema. Finito questo controllo, rimuoviamo anche i pacchetti deborphan e dialog (richiesto da deborphan, non più necessario).
Così facendo mi sono ritrovato con un sistema che richiede poco più di 650 MB sul disco (e che probabilmente potrebbe "dimagrire" ancora!), niente male quanto a richiesta di spazio, eh? (Windows XP nudo e crudo, senza niente installato richiede più di 2 GB!)

In un prossimo post parlerò della configurazione dei vari componenti, ma se nel frattempo avete commenti, consigli o correzioni da darmi non esitate ad aggiungere un commento a questa pagina! Non mi considero ancora un esperto, e sto imparando cose nuove anche adesso mentre scrivo queste righe.
Scrivetemi se anche avete delle curiosità o dei dubbi!

Trackback URL for this post:

http://gerlos.altervista.org/trackback/249

commenti

ritratto di Salvatore Barbera

allora non sono l'unico che

allora non sono l'unico che si occupa di questo tipo di cose... ;)

Invia nuovo commento

Il contenuto di questo campo è privato e non verrà mostrato pubblicamente.
  • Allowed HTML tags: <a> <em> <strong> <del> <cite> <code> <img> <ul> <ol> <li> <dl> <dt> <dd> <pre>
  • Linee e paragrafi vanno a capo automaticamente.
  • Insert Flickr images: [flickr-photo:id=230452326,size=s] or [flickr-photoset:id=72157594262419167,size=m].
  • Indirizzi web o e-mail vengono trasformati in link automaticamente

Maggiori informazioni sulle opzioni di formattazione.

CAPTCHA
Per provare che sei un visitatore umano, rispondi a questa domanda. È per evitare l'inserimento di messaggi spam.
Image CAPTCHA
Enter the characters shown in the image without spaces, also respect upper and lower case.