Come integrare, in ambiente Debian Linux un server Web con un server SQL

Di Stefano Salvi

L'installazione passo passo di MySQL

Per prima cosa, fatto login come root, lanceremo dselect, scrivendo dselect dopo il prompt #, e premendo il tasto a capo:

Occorre lanciare DSELECT come root

Quindi sceglieremo la selezione pacchetti:

Entriamo nella SELEZIONE PACCHETTI

Ci verrà mostrata la schermata di aiuto, dalla quale usciremo premendo la barra spaziatrice:

Usciremo dalla SCHERMATA DI HELP con la barra spaziatrice

Raggiungeremo così l'elenco dei pacchetti. Utilizzando la barra (/) entreremo nella ricerca. Cercheremo mysql ed avvieremo la ricerca premendo il tasto a capo:

ricerco MYSQL con / e poi con A CAPO

Il primo pacchetto che verrà trovato non è quello che ci interessa. Passeremo al successivo utilizzando la barra rovesciata (\):

Il primo trovato non va' bene; contonueremo con \

Continueremo la ricerca utilizzando la barra rovesciata (\) fino a che non troveremo mysql-client, che selewioneremo con il tasto ins:

Selezioneremo POSTGRESQL-DOC con il tasto INS

Il pacchetto php4 richiede dei pacchetti aggiuntivi, per essere instllato. Ci viene quindi presentata la relativa schermata di aiuto, dalla quale usciremo premendo la barra spaziatrice:

SCHERMATA DI AIUTO della risoluzione delle dipendenze

Il sistema ci indica che è anche necessario installare i pacchetti libdbi-perl, libdbd-mysql-perl, libmysqlclient10, e mysql-common, già tutti selezionati. Con il tasto a capo accetteremo l'installazione e passeremo alla fase successiva:

selezioneremo con INS anche il pacchetto suggerito APACHE

Torneremo così all'elenco dei pacchetti. Ci sposteremo su mysql-server con i tasti freccia e lo selezioneremo con il tasto INS).:

seleziono MYSQL-SERVER con INS e poi con A CAPO

Entreremo nella ricerca con il tasto barra (/). Cercheremo libmyodbc ed avvieremo la ricerca premendo il tasto a capo

cerco LIBMYODBC con la /

Raggiungiamo quindi il pacchetto libmyodbc, che selezioneremo con il tasto ins. Passeremo quindi alla fase successiva con il tasto a capo:

Selezioneremo LIBMYODBC con il tasto INS

Ci verrà mostrata la schermata di aiuto, dalla quale usciremo premendo la barra spaziatrice:

Usciremo dalla SCHERMATA DI HELP con la barra spaziatrice

Il sistema ci indica che è anche necessario installare i pacchetti odbcinst1, unixodbc, libqt2-mt, libjpeg62, libmng1, e liblcms, già tutti selezionati. Con il tasto a capo accetteremo l'installazione e passeremo alla fase successiva:

selezioneremo con INS anche il pacchetto suggerito APACHE

Ritorniamo alla schermata dell'elenco principale. Potremo ora passare alla fase successiva con il tasto a capo:

ritorniamo al MENU PRINCIPALE con A CAPO

Siamo di nuovo nel menù principale di dselect, ma la voce selezionata è quella del'installazione. La avvieremo con il tasto a capo:

con A CAPO avvieremo l'INSTALLAZIONE

Il sistema ci indica quanto dovrà essere recuperato dai CD (o dalla rete, se stiamo effettuando un'installazione di rete) e ci chiede se vogliamo procedere. Inseriremo il CD e premeremo il tasto a capo per proseguire:

con A CAPO accetteremo di installare

Il sistema ci chiede quindi di inserire il primo CD della distribuzione. Con il tasto a capo avviseremo che è inserito e che il sistema lo piò leggere:

vengono richiesti i CD della distribuzione. Li inseriremo nel lettore e procederemo con A CAPO

Allo stesso modo ci verranno chiesti anche il CD 2 ed il 2, che noi inseiremo nel lettore e faremo leggere premendo il tasto a capo. Qunidi ci verrà presentato un avviso, che noi leggeremo, poi passeremo oltre con a capo:

accettiamo con A CAPO di aggiungere il modulo per Postgres a PHP

Qunidi ci verrà ora chhiesto se vogliamo eliminare i database all'eliminazione del pacchetto (se lo vorremo disinstallare). Accetteremo la risposta proposta (No) con a capo:

accettiamo con A CAPO di aggiungere il modulo per Postgres a PHP

Il sistema ci chiede ora di inserire il terzo CD della distribuzione. Con il tasto a capo avviseremo che è inserito e che il sistema lo piò leggere:

vengono richiesti i CD della distribuzione. Li inseriremo nel lettore e procederemo con A CAPO

Allo stesso modo ci verrà chiesto anche il CD 7, che noi inseiremo nel lettore e faremo leggere premendo il tasto a capo. Qunidi ci verrà presentata una richiesta, relativa all'installazione automatica della driver tra i driver ODBC. Noi ci sposteremo su Yes con le frecce e confermeremo con a capo:

accettiamo la registrazione del DRIVER ODBC

Allo stesso modo ci verrà chiesti anche il CD 3, che noi inseiremo nel lettore e faremo leggere premendo il tasto a capo. Alla fine ci verrà chiesto se vogliamo aggiugere una riga che richiami il modulo mysql alla configurazione di PHP. Con il tasto a capo accetteremo la risposta Y (yes) proseguiremo:

accettiamo con A CAPO di aggiungere il modulo per Postgres a PHP

Alla fine ci verrà chiesto se vogliamo cancellare i file temporanei eventualmente scaricati se si usa la rete come sorgente. Con il tasto a capo accetteremo la risposta Y (Si) termineremo l'installazione:

accettiamo con A CAPO di cancellare i file temporanei eventualmente scaricati sul computer

Ci viene chiesto ancora di premere il tasto a capo per proseuire:

ci viene chiesto un ltro A CAPo per proseguire

Premendo il tasto q ed il tasto a capo terminiamo l'installazione:

terminiamo premendo Q e A CAPO

La distribuzione Debian Woody non contiene la driver jdbc per Mysql, dovremo quindi scaricarla. Il file da scaricare è http://ftp.debian.org/debian/pool/contrib/m/mysql-connector-java/libmysql-java_3.0.8-1_all.deb. Lo installeremo con il comando dpkg -i libmysql-java_3.0.8-1_all.deb

Ora il software necessario è installato. Per rendere attivo il tutto, riavvieremo sia mysql che apache:

Riavvio sia Apache che

Ora il software necessario è installato. Non ci resta che collaudarlo. Per fare questo dovremo creare un utente del database per il web server, che usa l'utente www_data. Creiamo per prima cosa l'utente www_data (il - non è usabile), collegandoci con il database tramite il comando mysql --user=root mysql e dando i comandi SQL grant ALL PRIVILEGES on *.* to www_data@localhost WITH GRANT OPTION; e poi FLUSH PRIVILEGES, quindi uscendo con \q.

creo l'utente WWW_DATA con opportuni diritti

A questo punto ci ricollegheremo come utente www_data con il comando mysql --user=www_data, creeremo il database www_data con la query create database www_data;, ci entreremo con il comando use www_data; creeremo la tabella prova con la query create table prova (nome text, numero integer);, ci inseriremo due righe con le query insert into prova values ('primo', 1); span class=grassetto>insert into prova values ('secondo', 2); ed usciremo di nuovo con \q.

creo il database WWW_DATA, la tabella PROVA e la popolo

A questo punto,con il nostro editor preferito, aggiungeremo al file public_html/index.php, le righe in verde:

<html>
<head>
<title>Pagina di prova PHP4</title>
</head>
<body>
  <h2 align=center>Con Postgres</h2>
<?php
  $connessione = pg_connect("dbname=www-data");
  $risultato = pg_exec ($connessione, "select * from prova;");

  print "<table align=center>\n";
  print "<tr><th>Nome</th><th>Numero</th></tr>\n";

  for ($i=0; $riga=@pg_fetch_object ($risultato,$i); $i++) {
    print "<tr><td>$riga->nome</td><td>$riga->numero</td></tr>\n";
  }

  print "</table>\n";
?>
  <h2 align=center>Con MySQL</h2>
<?php
  $myconn = mysql_connect("localhost","www_data");
  if (!$myconn) {
    echo "<h1><font color=#ff0000>Errore: non riesco a connettermi</font></h1>\n";
  }
  if (!mysql_select_db("www_data",$myconn)) {
    echo "<h1><font color=#ff0000>Errore: non riesco a selezionare il database</font></h1>\n";
  }
  $risultato = mysql_query("select * from prova;", $myconn);
  if (!$risultato) {
    echo "<h1><font color=#ff0000>Errore: query sbagliata</font></h1>\n";
  }

  print "<table align=center>\n";
  print "<tr><th>Nome</th><th>Numero</th></tr>\n";

  while ($riga=@mysql_fetch_object ($risultato)) {
    print "<tr><td>$riga->nome</td><td>$riga->numero</td></tr>\n";
  }
  print "</table>\n";
?>
</body>
</html>

Con la configurazione di default, puntando un browser sull'indirizzo IP della macchina/~utente/ (se è in rete) oppure lanciando un browser nella macchina stessa (se è installato X11 ed un browser) e puntandolo all'indirizzo localhost/~utente/, potremo vedere la pagina personale di ogni utente, che è in public_html/index.php nella directory home dell'utente:

otteniamo questa pagina nel browser

Veniamo alla configurazione della driver JDBC per Tomcat. La driver si trova nel file /usr/share/java/mysql-3.0.8.jar. Per farla vedere a Tomcat, dovremo creare un link alla libreira nella directory /usr/share/tomcat4/lib. Dopo aver fatto login come root, ci sposteremo nella directory destinazione con il comando cd /usr/share/tomcat4/lib e creeremo un soft link alla driver con il comando ln -s /usr/share/java/mysql-3.0.8.jar mysql.jar:

Creo in /USR/SHARE/TOMCAT4/LIB il link a /USR/SHARE/JAVA/MYSQL-3.0.8.JAR

Occorre abilitare il server MySQL ad ascoltare le connessioni tcp-ip, modificando il file /etc/mysql/my.cnf. Dovremo aggiungere il segno di commento alla riga contenente la direttiva skip-networking modificando la riga indicata in rosso

# The skip-networkin option will no longer be set via debconf menu.
# You have to manually change it if you want networking i.e. the server
# listening on port 3306. The default is "disable" - for security reasons.
skip-networking
set-variable    = key_buffer=16M

trasformandola quindi come quella in blu qui sotto:

# The skip-networkin option will no longer be set via debconf menu.
# You have to manually change it if you want networking i.e. the server
# listening on port 3306. The default is "disable" - for security reasons.
## skip-networking
set-variable    = key_buffer=16M

Si riavvierà quindi il DBMS con il comando /etc/init.d/mysql restart, da utente root.

Occorre poi concedere alle applicazioni WEB i diritti di connettersi al port del JDBC, aggiungendo nel file /usr/share/tomcat4/conf/policy.d/04webapps.policy le righe in verde come segue:

// The permission granted to the scrape taglib
// grant codeBase "file:${catalina.home}/webapps/examples/WEB-INF/lib/scrape.jar!/-" {
//      permission java.net.SocketPermission "*.noaa.gov:80", "connect";
// };

// The permission granted to your JDBC driver
Grant codeBase "file:${catalina.home}/lib/mysql.jar!/-" {
     permission java.net.SocketPermission "127.0.0.1:3306", "connect";
     permission java.net.SocketPermission "127.0.0.1:3306", "resolve";
};

// The permissions granted to the context root directory apply to JSP pages.
grant codeBase "file:${catalina.home}/webapps/examples/-" {
     permission java.net.SocketPermission "127.0.0.1:3306", "connect";
     permission java.net.SocketPermission "127.0.0.1:3306", "resolve";
     permission java.util.PropertyPermission "file.encoding", "read";
};

Potremo poi creare, con il nostor editor preferito, nella directory /var/lib/tomcat4/webapps/examples/jsp/mysql il file mysql.jsp con il seguente contenuto:

<html>
<head>
<title>Pagina di Prova JSP/Postgres</title>
</head>
<%@ page language="java" import="java.sql.*" import="java.util.Enumeration" %>
<body>
<%

 Class.forName("com.mysql.jdbc.Driver").newInstance();

  Connection myConn=DriverManager.getConnection("jdbc:mysql://127.0.0.1/www_data?user=www_data");

%>
  <table align=center>
  <tr><th>Nome</th><th>Numero</th></tr>

<%
   Statement dbst = myConn.createStatement();
   ResultSet rs = dbst.executeQuery("select * from prova;");
   while(rs.next()) {
      String nome = rs.getString("nome");
      int numero = rs.getInt("numero");
%>  <tr><td><%= nome %></td><td><%= numero %></td></tr>
<%
   }
   rs.close();  // Occorre sempre chiudere quando abbiamo finito
 %>


  </table>

</body>
</html>

Raggiungeremo la pagina scritta puntando un browser sull'indirizzo IP della macchina:8180//examples/jsp/mysql/mysql.jsp (se è in rete) oppure lanciando un browser nella macchina stessa (se è installato X11 ed un browser) e puntandolo all'indirizzo localhost//examples/jsp/mysql/mysql.jsp:

esempio di pagina JSP accede a database MySQL