[GUIDA] Installazione LAMP Server

Aperto da ilCapo, Lunedì 10 Giugno 2013, 01:05:07

Discussione precedente - Discussione successiva

ilCapo

Ciao a tutti,
come prima guida di questa nuova sezione dedicata ai Server ho pensato ad un Lamp Server. Prima di entrare nel vivo della guida vorrei spiegare brevemente il significato della parola Lamp.

PREMESSA
LAMP è una piattarforma software per lo sviluppo Web composta da vari componenti ed è l'acronimo di Linux Apache MySql Php (Perl o Python)
Apache o meglio Apache Http Server, rappresenta un Server Web. E' una delle piattaforme Server più diffuse ed apprezzate attualmente in circolazione e relativamente facile da configurare. Inoltre è dotata di una vasta documentazione utilissima per la risoluzione delle problematiche più comuni. Nel caso di un Server Lamp è proprio Apache che si occupa di gestire le varie richieste dei client fornendo le informazioni richieste, come ad esempio una pagina web.
MySql è un Database relazionale detto RDBMS (Relational database management system) per la raccolta e consultazione dei dati. Possiede delle interfacce per diversi linguaggi, compreso un driver ODBC, driver Java, un driver per Mono e DOT NET ed una libreria per Python.
PHP è un linguaggio di programmazione interpretato. E' utilizzato principalmente per sviluppare applicazioni Web lato Server, ma può essere usato anche per scrivere script a riga di comando o applicazioni standalone con interfaccia grafica.
Perl è un linguaggio di programmazione ad alto livello, procedurale e interpretato: ha un singolare insieme di funzionalità ereditate dal C, scripting shell Unix, Awk e da molti altri linguaggi di programmazione.
Python è un linguaggio di programmazione ad alto livello, orientato agli oggetti, adatto tra gli altri usi, per sviluppare applicazioni distribuite, scripting, computazione numerica e system testing.

La realizzazione di un Server Web con LAMP può essere fatta installando i singoli componenti su una distro Linux qualsiasi ma in questo caso utilizzerò, per semplicità, Ubuntu Server che ha una voce specifica durante la fase di "Software selection" che permette un'installazione più semplice e veloce.

Per l'installazione quindi è necessario scaricare Ubuntu Server 12.04.2 LTS a 64Bit:
http://www.ubuntu.com/download/server
per mancanza di hardware ho utilizzato VirtualBox ma è chiaro che i punti spiegati sono gli stessi nel caso di utilizzo di un Server fisico (escludendo l'installazione delle "Guest Additions").

Durante l'installazione ho selezionato il partizionamento guidato sull'intero disco per una questione di semplicità ma anche perché scegliere la migliore soluzione di partizionamento per un Sever non è lo scopo di questa guida, che diciamo è impostata per un Server a livello casalingo. In ogni caso, è buona prassi per i Server fisici creare uno o più RAID con i dischi a disposizione per una questione di performance o di ridondanza dei dati; nel caso di Server Virtuali si presuppone che il RAID sia stato creato a monte prima di installare il prodotto per la virtualizzaione, e casomai facendo uso di un buon NAS professionale o addirittura di una SAN.

INSTALLAZIONE SISTEMA OPERATIVO
Far partire l'installazione di Ubuntu Server e selezionare la lingua per l'installazione:

E' mia prassi, quando installo un Server, selezionare sempre e solo English !


Selezionare la location "Other" ==> "Europe" ==> "Italy"




Per la combinazione selezionata fino ad ora (lingua e paese) siamo costretti ad impostare come impostazioni locali di defaut "en_US.UTF-8" anziché "it_IT.UTF.8" perché non disponibile (non è un problema perché questa impostazione verrà modificata a fine installazione).


Continuare impostando la tastiera, selezionando "NO" al rilevamento e selezionado il layout italiano nelle schermate successive:






Successivamente attendere che vengano caricati i componenti addizionali e configurare la rete impostando il nome host:


utente


e relativa password


Nella schermata successiva viene chiesto se si vuole cryptare la cartella home per una questione di sicurezza: per i Server che conterranno dati importanti é preferibile rispondere "Si" ma in questo caso essendo un Server casalingo rispondere "No".

Continuare configurando l'orologio:


per poi passare alla fase di partizionamento. Come detto nella "Premessa", selezionare il partizionamento guidato utilizzando l'intero disco ed attendere l'installazione del sistema base:






Finita l'installazione del sistema base è necessario specificare se si utilizza un proxy per accedere ad internet. In questo caso il collegamento è diretto quindi lasciare "blank". Nel caso di utilizzo di proxy impostare la stringa in questa maniera:

senza autenticazione utente (ad esempio perché l'autenticazione viene concessa attraverso l'IP del client)
http://IpProxy:Porta/

con autenticazione utente
http://utente:password@IpProxy:Porta/



Successivamente configurare gli aggiornamenti automatici. Per i Server, a differenza dei client, è consigliabile non lasciare che il sistema effettui gli aggiornamenti in automatico ma lanciarli manualmente quando lo riteniamo opportuno.


Nella finestra successiva selezionare i pacchetti da installare, cioè "LAMP Server" e "OpenSSH Server", quest'ultimo per permettere la connessione in remoto con il terminale attraverso il protocollo SSH


Successivamente inserire la password per l'utente amministratore del Database MySQL possibilmente diversa dalla password che avete impostato per l'utente del Server Ubuntu


Attendere quindi l'installazione dei pacchetti...


quindi rispondere "SI" all'installazione del Grub e completare il tutto con il riavvio del Server!




E' doveroso precisare che, per impostazione predefinita, Ubuntu Server non installa nessun DE quindi tutte le operazioni
devono essere eseguite attraverso il terminale.



CONFIGURAZIONE SISTEMA OPERATIVO
La prima cosa da fare dopo il riavvio è la configurazione del network: se il Server è stato collegato alla rete prima dell'installazione del sistema operativo, il programma di installazione ha configurato il DHCP in modo tale che l'indirizzo IP venga assegnato automaticamente. Questa però è la configurazione classica di un client che non si presta ad un ambiente Server che invece ha necessità di avere un indirizzo IP statico.

Quindi effettuiamo il login sul Server, con l'utente creato durante l'installazione, ed otteniamo i permessi di root con:
$ sudo su

Apriamo il file della configurazione della rete:
# vi /etc/network/interfaces

e supponedo che il nostro Server sia collegato ad una rete il cui router ha il classico indirizzo "192.168.0.1" modifichiamo il file assegnando al Server l'IP "192.168.0.100" (ovviamente bisogna anche creare la cosiddetta "reservation" sul server DHCP per impedire ovviamente a quest'ultimo di assegnare questo IP ad un altro PC/Server/periferica di rete; comunemente nei router casalinghi piuttosto che la "reservation" viene impostato solamente un range di IP da cui il DHCP può attingere i nuovi indirizzi da assegnare):
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
        address 192.168.0.100
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255
        gateway 192.168.0.1



Nello step successivo bisogna modificare il file host andando ad integrare al suo interno l'indirizzo IP ed hostname del server (rispettivamente 192.168.0.100 e lampserver), quindi apriamo il file:
# vi /etc/hosts

e poi aggiungiamo la seguente riga:
192.168.0.100            lampserver

A questo punto la configurazione della rete è praticamente finita e non ci resta che dare un bel "restart" al servizio del networking!  :good:


Prima di farlo però vorrei effettuare delle precisazioni sui DNS. Durante l'installazione il Server in automatico oltre ad aver impostato il DHCP ha impostato anche gli IP dei Server DNS, che sono quelli del provider che ci fornisce l'accesso ad Internet.
Volendo questi IP si possono cambiare (o integrare) con altri Server più veloci e open!  Inoltre, molti provider hanno preso la cattiva abitudine in caso di errore di digitazione dell'indirizzo Web, di reindirizzare il client che fa la richiesta verso pagine dei loro siti, probabilmente a scopo pubblicitario...Un'ottima scelta è quella di utilizzare "OpenDNS" http://www.opendns.com/ con gli IP 208.67.222.222 e 208.67.220.220.
Normalmente per aggiungere altri DNS o per modificare quelli esistenti bisognerebbe editare il file /etc/resolv.conf ma da questa versione di Ubuntu il file resolv.conf viene rigenerato ad ogni riavvio, quindi questa modifica risulta inutile. Il motivo è presto detto: è stato sostituito il metodo di gestione dei DNS a favore del resolvconf ossia una implementazione del foundations-p-dns-resolving, come descritto qui https://blueprints.launchpad.net/ubuntu/+spec/foundations-p-dns-resolving
Quindi, se si vogliono aggiungere altri DNS bisogna editare un file che abbiamo già modificato in precedenza, ossia /etc/network/interfaces. E' sufficiente aggiungere a questo file la riga seguente:
dns-nameservers 208.67.222.222 208.67.220.220


A prescindere se avete aggiunto o meno gli IP di DNS gratutiti, adesso possiamo riavviare il servizio della rete
# /etc/init.d/networking restart

e per testare il tutto è sufficiente effettuare un ping verso un sito web qualsiasi:
$ ping www.linuxminditalia.org
( :hmm: mi sembra di conoscerlo questo sito....  ;D)

Ricevendo una risposta ai pacchetti inviati dal comando ping significa che abbiamo configurato bene la rete

in caso contrario bisogna controllare tutti i parametri di rete impostati o modificati e correggere eventuali errori commessi.


INSTALLAZIONE GUEST ADDITIONS
Nel caso il vostro Server sia fisico saltate questo step...
Adesso è necessario effettuare l'installazione di alcuni pacchetti di base che servono per la compilazione dei sorgenti (gcc, make, binutils, etc...), altrimenti non sarà possibile installare le Guest Additions:
# apt-get update && apt-get install linux-headers-$(uname -r) build-essential dkms

Dal menù della macchina virtuale di VBox selezionare "Dispositivi" e poi "Installa Guest Additions".
Proseguire lanciando il comando per montare il cdrom
# mount /dev/cdrom /media/cdrom
spostarsi nella partizione appena montata
# cd /media/cdrom
e lanciare l'installazione
# ./VBoxLinuxAdditions.run
Al completamento dell'installazione delle Guest Additions verrà visualizzato l'errore "Installing the Window System drivers...fail!": è normale visto che non è stato installato nessun DE!



CONFIGURAZIONE WEB SERVER
Prima di procedere con la configurazione dei servizi che compongono il LAMP, sarebbe opportuno effettuare un refresh dei repository con relativo aggiornamento del sistema operativo:
# apt-get update && apt-get upgrade
ed infine riavviare il Server:
# reboot


Al riavvio effettuiamo il login ed otteniamo i permessi di root:
$ sudo su

Verifichiamo quindi che i vari servizi siano partiti regolarmente, iniziando con quello di Apache:
# /etc/init.d/apache2 status
poi con quello di mySql:
# service mysql status

Se tutto è stato installato correttamente il risultato dei comandi dovrebbero essere simile a questo:
root@lampserver:/home/utente# /etc/init.d/apache2 status
Apache2 is running (pid 911).
root@lampserver:/home/utente#

root@lampserver:/home/utente# service mysql status
mysql start/running, process 750
root@lampserver:/home/utente#


I file di configurazione di Apache sono diversi e per default sono posizionati sotto il percorso "/etc/apache2". Le principali opzioni settate di default sono concentrate all'interno del file "apache2.conf" e permettono di avere una buona configurazione di base (ma comunque migliorabile in base al Server ed alle proprie esigenze).  Le opzioni e parametri configurabili dall'utente vanno settati nel file "httpd.conf" che appena dopo l'installazione di Apache risulta essere vuoto, mentre nel file "ports.conf" è presente l'elenco delle porte sulle quali Apache rimane in ascolto per eventuali connessioni.

Tutte le eventuali modifiche apportate ai file "httpd.conf" e "ports.conf" saranno riflesse anche al file "apache2.conf" che ingloba i parametri di configurazione di questi file grazie alle istruzioni:
# Include all the user configurations:
Include httpd.conf
# Include ports listing
Include ports.conf


La sintassi da utilizzare nei file di configurazione di Apache2 è abbastanza semplice: ogni riga contiene una direttiva, e alcune direttive possono definire un container, ovvero permettono di impostare alcune opzioni su file, directory o entrambi. Possono essere inclusi commenti, preceduti dal simbolo cancelletto "#", e nel caso si necessiti di utilizzare più di una riga per una direttiva è possibile utilizzare il backslash per indicare ad Apache che la direttiva continua sulla riga successiva.

Dopo aver modificato la configurazione di Apache è possibile testarla attraverso il comando:
# apache2ctl configtest
e se tutto è stato configurato correttamente il risulato del comando dovrebbe essere simile a questo:

Syntax OK
root@lampserver:/etc/apache2#





Possiamo procedere quindi con la configurazione dei servizi che compongono il LAMP.
Iniziamo modificando il file di configurazione di Apache, che come detto in precedenza, è praticamente vuoto:
sudo vi /etc/apache2/httpd.conf

impostiamo alcune variabili per indicare:
- il nome del ServerWeb attraverso "ServerName"
- il percorso e cartella dei file pubblici e del sito/siti web che si voglio pubblicare attraverso "DocumentRoot"
- il percorso e la cartella di default del ServerWeb attraverso "ServerRoot"
- le porte di ascolto del servizio attraverso "Listen"
- gli utenti ed i gruppi per l'accesso ad Apache attraverso "User" e "Group"

Quindi aggiungiamo queste righe:
ServerName lampserver
DocumentRoot /var/www
ServerRoot /etc/apache2
Listen 80
User utente
Group utente


e riavviamo apache con:
sudo /etc/init.d/apache2 restart
Se il riavvio del servizio produce questo tipo di errore:
* Restarting web server apache2                                                                     
... waiting (98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
Action 'start' failed.
The Apache error log may have more information.                                                  [fail]

controllare che nel file "/etc/apache2/ports.conf" non sia già precisata la porta 80 in ascolto; cercare la stringa "Listen 80" e se presente commentare la riga e riavviare il servizio apache.


Passiamo adesso alla configurazione di PHP.
In primis bisogna abilitare il modulo PHP in Apache, infatti essendo un web server modulare l'attivazione/disattivazione dei suoi "moduli" avviene semplicemente aggiungendo/togliendo quelli a disposizione, utilizzando la direttiva "LoadModule" seguita dal nome del modulo.
Apriamo di nuovo il file conf di Apache
sudo vi /etc/apache2/httpd.conf
ed aggiungiamo le seguenti righe:
# Direttiva per PHP
LoadModule php5_module modules/libphp5.so
<FilesMatch .php$>
        SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch .phps$>
        SetHandler application/x-httpd-php-source
</FilesMatch>

e riavviamo il servizio di apache per applicare le modifiche.
Se il riavvio del servizio genera questo tipo di errore:
root@lampserver:/home/utente# sudo /etc/init.d/apache2 restart
* Restarting web server apache2                                                                   
[Fri Jun 28 16:53:03 2013] [warn] module php5_module is already loaded, skipping
... waiting [Fri Jun 28 16:53:04 2013] [warn] module php5_module is already loaded, skipping  [ OK ]

controllare che non sia stato già attivato per default durante l'installazione attraverso questo comando:
cat /etc/apache2/mods-available/php5.load
se il file è presente e al suo interno è precisato
LoadModule php5_module /usr/lib/apache2/modules/libphp5.so
riaprire il file di configurazione di apache e cancellare le ultime modifiche effettuate con l'aggiunta della direttiva per PHP.
Riavviare quindi il servizio di apache.

Apriamo adesso il file conf di PHP ed abilitiamo il modulo MySQL:
sudo vi /etc/php5/apache2/php.ini

cerchiamo la sezione "Dynamic Extensions" (verso la meta del file) ed abilitiamo MySQL togliendo il punto e virgola alla riga
;extension=mysql.so

Passiamo adesso alla configurazione di MySQL.
Apriamo ed editiamo il suo file conf in modo tale da abilitare il servizio MySQL per l'ascolto su qualunque porta:
vi /etc/mysql/my.cnf
cerchiamo la stringa "bind-address 127.0.0.1" e commentiamola con il simbolo del cancelletto "#" e per finire riavviamo il Server Lamp con un bel reboot!

Essendo questa una guida per realizzare un Server a livello "domestico" possiamo ritenerci soddisfatti e concludere qui il nostro lavoro, ma in realtà ci sarebbero altri strumenti da installare e configurare. Un server che si rispetti dovrebbe avere un firewall attivo (ad esempio Iptables) perché le minacce che possono provenire dalla rete purtroppo sono numerose; si potrebbe installare il servizio FTP, oltre al servizio SSH installato durante la fase iniziale; infine si potrebbe installare anche BIND9 per la realizzazione un sistema di dns caching in modo tale da poter gestire autonomamente la risoluzione dei nomi a dominio relativi ai siti web che vogliamo gestire con il nostro server.
Disse un saggio, di cui non ricordo il nome: Coltiva Linux perché tanto Windows....si pianta da solo !  ;D ....... :rofl:  :rofl:

ilCapo

Ciao a tutti,
ho completato finalmente la prima guida di questa nuova sezione !  :good:
E' un po lunga nonostante siano state omesse alcune parti perché la guida è improntata per un Server ad uso casalingo, ma in realtà un Server Web che si rispetti andrebbe completato e migliorato ancora con Iptables, Ftp, Bind9, ect..
Spero possa essere utile alla comunità !  :ok:
Disse un saggio, di cui non ricordo il nome: Coltiva Linux perché tanto Windows....si pianta da solo !  ;D ....... :rofl:  :rofl:

bobol

 :ok: altro che piccola guida.... :entu: 

sailing60

ciao IlCapo,
prima di tutto complimenti vivissimi per la guida che hai prodotto :ok:
da pochi mesi mi sono avvicinato a Linux,ma....mi ha ampiamente conquistato!
Internet via router wireless va benissimo, ugualmente la stampante collegata via wireless!
Mi sta sempre più appassionando il mondo server-networking, per cui la tua guida mi ha molto colpito.
A questo punto formulo la domanda...per un uso casalingo del pc (quindi il massimo dei collegamenti possibili sarebbe con il tv smart, smartphone, photosmart) un server potrebbe essere utile...ed a che cosa, a livello operativo?
Ti ringrazio in anticipo e ti saluto
Windows 10
Ubuntu 14.04 Trusty 64 bit Unity e Gnome
HP15 notebook-Intel Core i7-HDD 1Tb-Scheda Grafica NVIDIA

ilCapo

#4
Citazione di: sailing60 il Sabato 01 Marzo 2014, 16:12:54
ciao IlCapo,
prima di tutto complimenti vivissimi per la guida che hai prodotto :ok:
da pochi mesi mi sono avvicinato a Linux,ma....mi ha ampiamente conquistato!
Internet via router wireless va benissimo, ugualmente la stampante collegata via wireless!
Mi sta sempre più appassionando il mondo server-networking, per cui la tua guida mi ha molto colpito.
A questo punto formulo la domanda...per un uso casalingo del pc (quindi il massimo dei collegamenti possibili sarebbe con il tv smart, smartphone, photosmart) un server potrebbe essere utile...ed a che cosa, a livello operativo?
Ti ringrazio in anticipo e ti saluto

Ciao sailing60,
grazie per i complimenti ma l'installazione di un Lamp Server è più semplice di quanto si pensi!

Per un uso casalingo di un Server la prima cosa che mi viene in mente è un MediaServer, per gestire, organizzare, catalogare, e propagare i contenuti multimediali attraverso il servizio DLNA, oggi per default presente in quasi tutti gli apparati tecnologici moderni. Ho iniziato un pò di tempo fa una guida su questo argomento (http://www.linuxminditalia.org/index.php?topic=18158.0) ma per mancanza di tempo non sono riuscito ancora a completarla e me ne scuso... :imba:

In riferimento invece ad un Server Web (Lamp Server come definito dalla Canonical) la sua reale utilità è quasi zero se preso in considerazione da "utenti" normali; per gli smanettoni invece un Lamp Server può essere molto utile, soprattutto per i programmatori, DataBase Administrator e WebMaster...
Disse un saggio, di cui non ricordo il nome: Coltiva Linux perché tanto Windows....si pianta da solo !  ;D ....... :rofl:  :rofl:

gokuale

Ciao a tutti  e complimenti per la guida.

Vorrei consigliarvi anche per server "casalinghi" l'utilizzo di un Pannello di gestione x siti, domini e DB mysql.
Devo dire che mi trovo benissimo con il pannelli ISPCONFIG.
L'ho installato anche in un serverino casalingo che uso pe lavoro (sviluppo siti web) e ti aiuta tantissimo soprattutto per la creazione di tutto cio' che ruota attorno a un webserver con funzione mail ftp mysql bind9 ecc. ecc.

e' opensource e anche gratuito quindi se voltere smanettarci su un bel virtual box con debian ci sono tante guide, googleando cercate perfect server debian ispconfig

ciao a tutti
Puoi arrivare fino a 11.000 giri
Ma soprattutto ........ VINCI!!!!
nd. Bunta - the real DK

pistolinux001

Citazione di: ilCapo il Lunedì 01 Luglio 2013, 09:46:41
Ciao a tutti,
ho completato finalmente la prima guida di questa nuova sezione !  :good:
E' un po lunga nonostante siano state omesse alcune parti perché la guida è improntata per un Server ad uso casalingo, ma in realtà un Server Web che si rispetti andrebbe completato e migliorato ancora con Iptables, Ftp, Bind9, ect..
Spero possa essere utile alla comunità !  :ok:
Ciao.

...allora un po'  alla volta potresti per favore integrare questa guida con tali completamenti e miglioramenti ?

...inoltre secondo me sarebbe anche interessante una guida che spiega come aggiungere (ripeto: aggiungere) le funzionalità di un server anche ad un'installazione desktop di linux (mint 17 MATE)

Grazie !
Distro: derivate di ubuntu e mint e debian