L'ingegnere quantistico Seth Lloyd è convinto che l'universo sia un gigantesco computer. Speriamo non faccia girare Windows.

— Kevin Kelly

ArchLinux Small Business Server (24) - LAMP

  • user warning: Table './stenoweb/node_comment_statistics' is marked as crashed and should be repaired query: SELECT last_comment_timestamp, last_comment_name, comment_count FROM node_comment_statistics WHERE nid = 114 in /home/stenoweb/public_html/modules/comment/comment.module on line 596.
  • user warning: Table './stenoweb/node_comment_statistics' is marked as crashed and should be repaired query: SELECT last_comment_timestamp, last_comment_name, comment_count FROM node_comment_statistics WHERE nid = 19 in /home/stenoweb/public_html/modules/comment/comment.module on line 596.
  • user warning: Table './stenoweb/node_comment_statistics' is marked as crashed and should be repaired query: SELECT comment_count FROM node_comment_statistics WHERE nid = 19 in /home/stenoweb/public_html/modules/comment/comment.module on line 1121.

http://www.stenoweb.it/files/blog/archlogo.png Ancora con queste guide LAMP ? No, non preoccupatevi, questa è ben lontana da essere come le altre. Meno approfondita e meno "tecnica". In fondo in fondo cosa ce ne facciamo di un servizio di questo genere nella nostra Small Business ? Molto, poco o nulla del tutto. Non siamo un provider, in questo caso installiamo LAMP solo perchè ci serve il suo aiuto come "spalla" per altri servizi come ad esempio webmail e magari altre applicazioni da "corredo".

LAMP

Come, non sapete cosa sia LAMP ? Lo sapete ? Bhè io vi annoio un pochino lo stesso per l' 1% delle persone che capitano qui e che ancora non hanno ben chiaro di cosa stia parlando.

LAMP è un acronimo che indica una piattaforma per lo sviluppo di applicazioni web che prende il nome dalle iniziali dei componenti software con cui è realizzata.

Papale papale a quanto scrive wikipedia.

Ecco i nostri interpreti :

  • L - Linux : sistema operativo
  • A - Apache : web server
  • M - MySQL : database
  • P - PHP (o Perl o Pyton) : Linguaggio di scripting

Senza dubbio una delle piattaforme più usate al mondo. Credo di non essere distante se dico che il 95% del blog mondiali poggiano su questa struttura, se poi aggiungiamo le varianti WAMP (Windows al posto di Linux) e quelle che poggiano su BSD credo si possa raggiungere una quota ancora più bulgara.

Installazione

L' installazione non è certo una sfida di alto livello, bisogna solo aggiungere libxml2 alla lista dei pacchetti che tutti oramai abbiamo in mente:

sudo pacman -Sy apache php mysql libxml2

Le dipendenza verranno installate in modo automatico.
Alla fine dell'installazione di PHP pacman ci segnala questo :
==> PHP modules

PHP has been built with optional modules. To enable these modules,
uncomment the modules from php.ini

Some of them require extra packages to be installed:

* bz2 : bzip2
* curl : curl
* dba : gdbm
* gd : libpng, libjpeg, freetype2
* imap : pam
* ldap : libldap
* mcrypt : mcrypt, libtool
* mysql/mysqli : libmysqlclient
* odbc/pdo_odbc : unixodbc
* openssl : openssl
* pgsql/pdo_pgsql : postgresql-libs
* pspell : aspell
* snmp : net-snmp
* sqlite : sqlite3
* tidy : tidyhtml
* xsl : libxslt


Importante tenerne conto, ci vengono segnalati i pacchetti che dobbiamo installare per avere il supporto a particolari funzionalità di PHP. Ad esempio per avere le librerie GD, spesso usate dai CMS (tipo Wordpress, Drupal ecc.) per manipolare le immagini, dobbiamo installare :
pacman -Sy libpng libjpeg freetype2

e poi attivare il modulo.

Configurazione

Vediamo le due cose due da configurare per il nostro minuscolo LAMP :

Apache

Cominciamo dal nostro web server editando il file :

sudo nano /etc/httpd/conf/httpd.conf

Su cui per prima cosa andiamo a disabilitare il modulo unique_id. Questo modulo credo serva ad identificare un solo utente per ogni richiesta. Probabilmente serve ad impedire che un utente, in determinate condizioni, faccia 1000 richieste contemporanee. Non credo che a noi serva, e ad essere sinceri, forse a causa della mia incompetenza, mi ha dato qualche problema. Scrivetemi pure se volete "illuminarmi" in merito.
Commentiamo la riga relativa:
#LoadModule unique_id_module modules/mod_unique_id.so

Proseguiamo con i parametri :
ServerAdmin admin@mede.it
ServerName archi.mede.it:80

Non che sia obbligatorio, ma un po' di ordine non fà male.

PHP

PHP è quasi configurato a dovere, dobbiamo solo abilitare il modulo di Apache e poco altro.

sudo nano /etc/httpd/conf/httpd.conf

Togliamo il commento dalle righe (o aggiungiamole):
LoadModule php5_module modules/libphp5.so
AddHandler php5-script php

per fare in modo che il nostro web server carichi il supporto a PHP5 e ne riconosca i file.
Per ultimo assicuramoci che Apache esegua index.php qualora esista:
<IfModule dir_module>
DirectoryIndex index.html index.php

Nel nostro esempio precedente abbiamo installato anche le librerie grafiche gd, in questo caso dobbiamo abilitare il relativo modulo di PHP :

sudo nano /etc/php/php.ini

e togliamo il commento dalla riga (il ";"):
extension=gd.so
extension=mysql.so
extension=mysqli.so

Dovrebbe bastare. Possiamo avviare il servizio :
sudo /etc/rc.d/httpd start

MySQL

Di base non c'e' molto da fare, devo ricordarmi solo di impostare una password all'utente root. Per fare questo avviamo il servizio:

sudo /etc/rc.d/mysqld start

e impostiamo la password (in questo caso "archimede"):
/usr/bin/mysqladmin -u root password archimede

phpMyAdmin

PhpMyAdmin è un'applicazione PHP open source che consente di amministrare in modo semplificato database di MySQL tramite un qualsiasi browser. Ci può tornare utile, installiamolo e configuriamolo.

sudo pacman -S phpmyadmin

Chissà per quale arcano motivo l'installazione di phpMyAdmin finisce nella directory /srv/www/phpMyAdmin ...
Va bhé non voglio indagare creiamo un symlink e buonanotte:
sudo ln -s /srv/http/phpMyAdmin/ /home/httpd/phpmyadmin

Ricordiamoci di configurare la direttiva open_basedir di PHP per includere anche /srv/www, altrimenti gli script PHP si rifiuteranno di andare in esecuzione:
sudo nano /etc/php/php.ini

mettiamo a posto la riga aggiungendo /srv/www :
open_basedir = /home/:/tmp/:/usr/share/pear/:/srv/www/

e riavviamo il servizio:
sudo /etc/rc.d/httpd restart

Ora forniamo a phpMyAdmin una configurazione di base :
sudo nano /home/httpd/html/phpmyadmin/config.inc.php

mettendoci questo :
<?php
$i = 0;
$cfg['PmaAbsoluteUri'] = 'http://archi.mede.it/phpmyadmin';
$cfg['blowfish_secret'] = ;
$i++;
$cfg['Servers'][$i]['auth_type'] = 'http';
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['AllowRoot'] = TRUE;
$cfg['UploadDir'] =
;
$cfg['SaveDir'] = '';
?>

Dovremmo essere a posto. Non è il non plus ultra ma funziona, se volete approfondire consultate la guida ufficiale.

Test

Vediamo se funziona ?
Creiamo un piccolo file di test per PHP (/home/httpd/html/ è la "root" del nostro web server):

sudo nano /home/httpd/html/test.php

e scriviamoci dentro questo :
<?php
phpinfo();
?>

Ora andiamo su un nostro PC della rete e nel browser scriviamo :
http://archi.mede.it/test.php

Dovrebbe uscirmi una pagina riepilogativa di PHP e Apache. Se questo non succede controlliamo il firewall e il file /etc/hosts.allow che potrebbero essere i responsabili.

Proviamo anche mySQL, digitiamo questo indirizzo :

http://archi.mede.it/phpmyadmin

Digitate utente e password (nel nostro caso "root" e "archimede") e dovrebbe uscirvi la pagina principale di phpMyAdmin.

Conclusioni

Io mi fermo qui. Certo non è il massimo che si possa fare ma per i nostri scopi è più che sufficiente dal momento che il server http ci serve solo da "accessorio" per altri servizi.

Ripeto: attenzione al firewall. MySQL dovrebbe essere accessibile solo dal server stesso, quindi non è necessario "aprire" la sua porta (per la cronaca è la "3306") verso la rete interna. Deve invece essere aperta la porta "80" di http aggiungendo al file:

sudo /etc/shorewall/rules

la direttiva giusta:
HTTP/ACCEPT loc $FW

e, se voglio sia accessibile dall'esterno, anche:
HTTP/ACCEPT net $FW

Ricordiamoci, per concludere, di abilitare i servizi nel solito array DAEMONS di rc.conf:

DAEMONS=(...httpd mysqld ...)

Alla prossima.

Come posso rendere httpd raggiungibile dall'esterno?
Io riesco a vedere le pagine da un altro pc in locale, ma dall'esterno non si riesce a caricare la pagina (risulta irrangiungibile).