Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

LAMP: Installare Apache, PHP e MySQL in ambiente Linux

Istruzioni pratiche e suggerimenti per installare un sistema PHP e MySQL sotto con Apache per Linux
Istruzioni pratiche e suggerimenti per installare un sistema PHP e MySQL sotto con Apache per Linux
Link copiato negli appunti

Introduzione

Allo stato attuale PHP è compatibile con diversi sistemi operativi, con diversi web server e può interfacciarsi a diversi database, anche se il suo habitat naturale è comunque un sistema unix-like, in compagnia del web server Apache. Considerando gli ambienti di produzione e di sviluppo, la combinazione più diffusa e collaudata è data da Linux, il famoso sistema operativo, Apache, il web server più utilizzato su Internet, MySQL, il noto RDBMS ed infine PHP, il nostro linguaggio di programmazione preferito. In questo articolo esamineremo l'installazione di Apache, PHP e MySQL compilando i sorgenti, mentre daremo per scontato che il sistema operativo sia già installato e funzionante, che siate in possesso
della password di root e che gli strumenti di sviluppo, come il compilatore, presenti. Una conoscenza basilare della shell di Linux ci consentirà di muoverci in maniera disinvolta durante i passi della compilazione.

La via della compilazione è molto spesso considerata come la strada più difficile da percorrere per installare un software. Indubbiamente è più laborioso compilare piuttosto che installare un pacchetto precompilato (ad esempio un RPM), ma questa operazione ci consente una certa flessibilità e la possibilità di personalizzare al meglio l'installazione, cosa che i precompilati non ci permettono.

Operazioni preliminari

Molte delle attuali distribuzioni di Linux ci vengono fornite con una quantità smisurata di software, e spesso accade di trovarsi con un web server
già installato e magari funzionante. Per prima cosa assicuriamoci quindi di non aver già installato Apache/PHP/MySQL, facendo riferimento al
gestore di pacchetti della nostra distribuzione.

Un altro passo importante è assicurarsi che gli strumenti di sviluppo siano presenti, in particolare avremo bisogno di un compilatore e di un
programma "make". Da shell digitiamo questi due comandi:

gcc --version
make --version

Se non ci sono errori, possiamo procedere, scaricando i pacchetti che ci interessano dai rispettivi siti:
Apache 1.3.*
MySQL 3.23.*
PHP 4.3.*

La compilazione di Apache

Prima di cominciare, vale la pena di spendere qualche parola sulle due possibili vie da seguire: compilare PHP staticamente o come shared
object. La prima via è forse più performante, nel senso che PHP sarà parte integrante del webserver e verrà caricato ed eseguito più
rapidamente. Per contro, l'installazione come shared object ci consente di rendere indipendenti le due compilazioni: ricompilando PHP per
aggiungere una qualche opzione, non dovremo ricompilare anche Apache come invece accade nel primo metodo.

In questo articolo approfondiremo il secondo metodo, ma si consiglia comunque di dare un'occhiata alla documentazione di Apache relativa
al supporto DSO.

Ed ora siamo pronti per cominciare. È necessario essere root quando si agisce su directory di sistema, per cui la prima operazione è acquisire
i privilegi di amministratore, con il comando "su". Ora possiamo scompattare i tre pacchetti in una directory "a piacere":
/usr/local/src potrebbe andare benissimo.

cd /usr/local/src
tar zxvf /path/to/apache_x.y.z.tar.gz
tar zxvf /path/to/php_x.y.z.tar.gz
tar zxvf /path/to/mysql_x.y.z.tar.gz

Naturalmente è necessario adattare /path/to al percorso in cui avete salvato i tre pacchetti, ed adattate i nomi dei pacchetti in base ai numeri
di versione, qui rappresentati con x.y.z. Se avete scaricato un pacchetto *.tar.bz2, potrete scompattarlo con

tar jxvf pacchetto.tar.bz2

Ora dovreste avere in /usr/local/src le tre directory che contengono i sorgenti delle rispettive applicazioni. Iniziamo con Apache:

cd apache_x.y.z
./configure --help

Leggetevi per bene l'help del configure, in modo da individuare tutte le possibili opzioni da personalizzare. Ad esempio:

./configure --prefix=/usr/local/apache_x.y.z
--enable-module=so

Il carattere (backslash) ci consente di andare a capo proseguendo la digitazione del comando e viene qui utilizzato per ragioni di
formattazione: possiamo benissimo ometterlo ed inserire tutte le opzioni su un'unica riga.

Analizziamo rapidamente le direttive passate al configure:

  • --prefix indica il path in cui installare apache;
  • --enable-module consente di attivare dei moduli, in questo caso "so" (che permette di attivare ulteriori moduli in fase di "runtime").

Ora possiamo creare gli eseguibili ed installare Apache:

make
make install

Se non ci sono errori, per vedere se tutto funziona, proviamo a lanciare Apache:

apachectl start

e puntiamo il nostro browser su http://localhost.

Tenete presente che installando i file binari in percorsi non compresi nel $PATH, dovremmo lanciarli con il percorso completo, nel nostro caso:

/usr/local/apache_x.y.z/apachectl start

Oltre a "start" possiamo utilizzare anche altri parametri, tra cui "stop" e "restart", il cui significato dovrebbe essere ovvio.

A questo punto, per comodità, andiamo a create un link simbolico /usr/local/apache, che punto alla directory /usr/local/apache_x.y.z:
questo ci consentirà di aggiornare il software senza troppi problemi in quanto sarà sufficiente solo ricreare il link:

cd /usr/local
ln -s apache_x.y.z apache

ed il gioco è fatto.

Installiamo MySQL

L'installazione di MySQL è leggermente più laboriosa. Per prima cosa, dobbiamo tenere a mente il fatto che avremo a che fare con due diverse
directory: una per i programmi ed una per i dati. Per i programmi il percorso di default è /usr/local/mysql, con delle sottodirectory contenenti
file binari, documentazione, script ed accessori. Per i dati invece il percorso di default è /usr/local/var. Una seconda considerazione importante
è che sarà opportuno far girare il vostro database con i minimi privilegi, ossia non da root, ma di questo ce ne occuperemo dopo.

Iniziamo con la compilazione:

cd /usr/local/src/mysql_x.y.z
./configure --help
./configure --prefix=/usr/local/mysql_x.y.z
make
make install

Ora possiamo preoccuparci di inizializzare il nostro database, con un apposito script. Dalla stessa directory dei sorgenti:

scripts/mysql_install_db

Possiamo anche creare un link come abbiamo fatto per Apache:

cd /usr/local
ln -s mysql_x.y.z mysql

Controlliamo l'esistenza di un utente mysql e di un gruppo mysql:

cat /etc/passwd | grep mysql
cat /etc/group | grep mysql

Se i due comandi danno esito negativo (nessun output), dobbiamo creare gruppo ed utente:

groupadd mysql
useradd -g mysql mysql

Ora possiamo assegnare i permessi opportuni alle directory di MySQL:

chown -R root:mysql /usr/local/mysql
chown -R mysql:mysql /usr/local/mysql/var

Ora proviamo a lanciare il server database con:

safe_mysqld --user=mysql &

uno script "sicuro" (safe) che richiama mysqld in maniera appropriata. La & dopo il comando serve a mandare il processo in background.

Testiamo il corretto funzionamento di mysqld con il comando:

mysqladmin ping

il quale dovrebbe fornire un output di conferma.

Teniamo però presente che i programmi potrebbero non essere installati nel nostro $PATH, per cui dovremmo fornire il percorso completo:

/usr/local/mysql/bin/safe_mysqld --user=mysql &
/usr/local/mysql/bin/mysqladmin ping

Ora è doveroso inserire una password per l'amministratore del database. Attenzione che l'amministratore del database si chiama root,
come l'amministratore del sistema, ma potrebbero tranquillamente essere due entità separate, con password diverse.

Discorso analogo lo si fa per gli utenti. La documentazione di MySQL è molto ben fatta, per cui approfondite questi concetti sul
manuale di MySQL

Cambiamo la password:

mysqladmin -u root password [nuova_pass]

Dove [nuova_pass] sarà naturalmente la nostra nuova password per amministrare mysql. Ora per connetterci al database come root,
dovremmo utilizzare il comando:

mysql -u root -p

che ci chiederà di inserire la password opportuna (attenzione sempre al $PATH).

Lo "spegnimento" del server MySQL avviene con il comando:

mysqladmin -u root -p shutdown

seguito dalla password opportuna.

Installiamo PHP

A questo punto siamo arrivati al PHP. Come accennato prima, ci sono in sostanza due modi per installare PHP da sorgenti: in questo articolo
scegliamo la via dell'installazione come shared object:

cd /usr/local/src/php_x.y.z
./configure --prefix=/usr/local/php_x.y.z
--with-apxs=/usr/local/apache/bin/apxs
--with-mysql
--with-config-file-path=/usr/local/apache/conf
make
make install

Anche qui, --prefix ci consente di scegliere un path diverso da /usr/local per l'installazione, --with-apxs è l'opzione che ci consente di
installare PHP come "shared module" piuttosto che come "static module", --with-mysql indica di abilitare il supporto per MySQL,
mentre l'opzione --with-config-file-path specifica il percorso del file di configurazione.

Una piccola nota riguardante il supporto MySQL: PHP comprende la libreria client di MySQL, per cui è sufficiente utilizzare la relativa opzione.
Con le versioni più recenti di MySQL però c'è stato un cambiamento nella licenza, causando una incompatibilità con la licenza di PHP. Per
questo motivo PHP non potrà contenere la libreria client delle nuove versioni di MySQL, e sarà necessario utilizzare l'opzione --with-mysql
specificando il path di installazione di MySQL, che comprende la libreria in questione.

A questo punto copiamo il file di configurazione della directory opportuna. Dalla directory dei sorgenti di PHP:

cp php.ini-dist /usr/local/apache/conf/php.ini

Ora modifichiamo il file di configurazione di Apache, httpd.conf, che si trova nel percorso appena indicato, con il nostro editor di testi preferito,
ed assicuriamoci che siano presenti le seguenti linee (se c'è il simbolo cancelletto # davanti alle linee, togliamolo, perchè si tratta di un
commento e come tale verrà ignorato):

LoadModule php4_module libexec/libphp4.so
AddType application/x-httpd-php .php

Siamo quasi giunti alla fine: verifichiamo all'interno di httpd.conf quale percorso sia stato impostato come DocumentRoot
(verosimilmente sarà /usr/local/apache_x.y.z/htdocs/) e creiamo in tale directory il file info.php che conterrà semplicemente la seguente
stringa:

<?php phpinfo(); ?>

Si tratta di una basilare funzione di PHP, che restituisce una pagina di informazioni. A questo punto avviamo (o riavviamo) Apache,
e puntiamo il nostro browser su http://localhost/info.php incrociando le dita.

Se tutto è andato a buon fine, dovremmo vedere l'output del phpinfo().

Se volessimo personalizzare al meglio l'installazione di PHP, potremmo giocare un po con le opzioni da passare al configure:

./configure --enable-ftp --enable-sockets [--altre-opzioni]

In questo caso andiamo ad abilitare le estensioni contenenti le funzioni FTP e le funzioni per l'interfaccia socket.

Anche qui l'opzione --help data al configure ci fornisce molte informazioni utili.

Risoluzione dei problemi

Non tutto funziona sempre come vorremmo, o comunque non al primo colpo. Di seguito vengono riportati alcuni dei problemi tipici che si
riscontrano.

Lanciando ./configure mi vengono restituiti degli errori
Le cause possono essere molto diverse: osservando il messaggio d'errore si può intuire che cosa non va. Solitamente è una libreria mancante, oppure un percorso specificato in maniera errata. Ricontrollate l'help del configure ed eventualmente aggiungete le librerie che vi mancano.

Lanciando apachectl ottengo l'errore "command not found"
Solitamente l'errore sta nel percorso specificato o nel fatto che la directory con gli eseguibili di Apache non è nel $PATH, per cui specificando il comando senza percorso, tale comando non viene trovato. Considerate la possibilità di aggiornare la variabile d'ambiente $PATH, oppure inserite il percorso corretto.

Il server MySQL non parte
Anche qui le cause possono essere molteplici. Solitamente il database non è stato inizializzato con mysql_install_db, oppure l'utente
mysql non è proprietario delle directory appropriate.

La password per un utente di MySQL non viene accettata
Le password sono case sensitive, per cui maiuscole e minuscole fanno la differenza. Inoltre gli utenti MySQL sono diversi dagli utenti di sistema,
per cui pur avendo lo stesso username, potrebbero avere password diverse. Sembra banale, ma è uno dei problemi più frequenti.

Ho creato un file con phpinfo(), ma invece di visualizzare un output, mi compare la richiesta di download
Non è stato modificato correttamente httpd.conf con le stringhe
LoadModule php4_module libexec/libphp4.so
AddType application/x-httpd-php .php

Inoltre, dopo ogni modifica al file di configurazione, il web server deve essere riavviato.

Ho creato un file con phpinfo(), ma l'output che visualizzo è lo stesso sorgente PHP
Come sopra, è necessario controllare la configurazione e riavviare Apache.

Non riesco a compilare PHP utilizzando Apache 2.0.*
Per compilare PHP come shared module di Apache 2 è necessario utilizzare l'opzione --with-apxs2 (e non --with-apxs) del configure,
specificando naturalmente il path opportuno. È però importante ricordare che l'accoppiata PHP-Apache2 non è ancora stata dichiarata
stabile
: anche se le cose funzionano, probabilmente è bene attendere ancora un po, rimanendo quindi su Apache 1.3 .

Utilizzo uno unix-like diverso da Linux: non riesco a scompattare i pacchetti tar.gz
In questo caso è necessaio fare riferimento alle man pages del proprio sistema, ed in particolare a quelle di tar e gunzip. Alcune utility di questo
tipo non consentono di decomprimere e "spacchettare" con un solo comando. Molto spesso la via da seguire è:
gunzip nomefile.tar.gz
tar xvf nomefile.tar

Nel caso di archivi tar.bz2, è necessario utilizzare bunzip2 al posto di gunzip.

Naturalmente i problemi possono essere molti e molto diversi tra di loro. Fate attentamente riferimento alla documentazione in linea,
eventualmente effettuate una ricerca sul forum di HTML.it (qualcuno potrebbe aver già
avuto il vostro stesso problema) e cercate di utilizzare sempre le versioni stabili del software che vi interessa. Installare una versione alpha
o beta solo per il gusto di avere the latest cool feature of the day talvolta diventa compromettente in termini di stabilità.

Gli indirizzi da cui scaricare i pacchetti che ci interessano sono stati indicati nella prima pagina dell'articolo. Di seguito alcuni link di interesse:

Manuale PHP, installazione su Linux
Manuale PHP, installazione su sistemi unix-like
Manuale PHP, installazione come modulo di Apache
Manuale di Apache, documentazione sul supporto ai DSO
Manuale di MySQL, installazione da sorgenti

Ti consigliamo anche