Montar una web con apache+php+postgreSQL en Linux

En este articulo vamos a tratar la instalación y configuración de un servidor web, utilizando Apache como servidor, PHP como lenguaje interpretado de alto nivel y PostgreSQL como base de datos. Con esta combinacion podremos crear páginas dinamicas y obtener informacion de nuestra base de datos para presentarla via web. Por ultimo, daremos unos cuantos ejemplos de como programar nuestras páginas web utilizando estos programas.

Partimos de la base de que tenemos una máquina con Linux instalado y funcionando y con todas las herramientas necesarias para la compilación de programas (gcc,make,..). Este artículo se basará en Apache 1.3.x, PHP 3.0.x y PostgreSQL 6.5.x y ha sido comprobado en un equipo con Apache 1.3.6, PHP 3.0.12 y PostgreSQL 6.5.1. Lo primero que tenemos que hacer es bajarnos los tres paquetes con los programas necesarios y grabarlos en un directorio de nuestro sistema (por ejemplo, /local/download/):

Una vez que tenemos los programas, tendremos que elegir el lugar donde los vamos a instalar. En este artículo suponemos que instalaremos:

Apache en: /usr/local/apache/

PHP como módulo de Apache

PostgreSQL en: /usr/local/pgsql/

Catalogo Web: /home/httpd/html/

Instalación de PostgreSQL

Lo primero que tenemos que hacer es crear una cuenta que administrará la base de datos:

Cuenta de administración de la BD
   [localhost]$ su
   [localhost]$ /usr/sbin/adduser postgres
   [localhost]$ passwd postgres
   [localhost]$ exit

Una vez creada la cuenta Postgres crearemos los directorios que utilizaremos para instalar PostgreSQL con los permisos adecuados:

Creación de directorios para la correcta instalación de PostgreSQL
   [localhost]$ su
   [localhost]$ cd /usr/src
   [localhost]$ mkdir pgsql
   [localhost]$ chown postgres:postgres pgsql
   [localhost]$ cd /usr/local
   [localhost]$ mkdir pgsql
   [localhost]$ chown postgres:postgres pgsql
   [localhost]$ exit 

Empezamos con el proceso de compilación/instalación:

Proceso de compilación/instalación
   [localhost]$ su postgres
   [localhost]$ cd /usr/src/pgsql
   [localhost]$ gunzip -c /local/download/postgresql-6.5.x.tar.gz 
                | tar xvf -

   [localhost]$ cd /usr/src/pgsql/postgresql-6.5.x/src
   [localhost]$ ./configure --prefix=/usr/local/pgsql 
                --with-tcl --with-perl

   [localhost]$ gmake all > make.log 2>&1 &
   [localhost]$ tail -f make.log

   [localhost]$ gmake install > make.install.log 2>&1 &
   [localhost]$ tail -f make.install.log
   [localhost]$ exit

Ahora tenemos que decirle al sistema donde poder encontrar las librerias necesarias, para ello actualizamos el fichero /etc/ld.so.conf:

Actualización del fichero de configuración
   [localhost]$ su
   [localhost]$ echo /usr/local/pgsql/lib >> /etc/ld.so.conf
   [localhost]$ /sbin/ldconfig.
   [localhost]$ exit

Tambien tendremos que actualizar el fichero ~/.bash_profile de la cuenta administradora de la base de datos, en este caso Postgres (si utilizais otro shell que no sea bash, tendreis que cambiar el archivo correspondiente, en vez de .bash_profile):

Actualización del fichero profile
   [localhost]$ su postgres

   ****************************************
   Editar el archivo ~/.bash_profile y 
   anadirle lo siguiente
   ****************************************

   PATH=$PATH:/usr/local/pgsql/bin
   MANPATH=$MANPATH:/usr/local/pgsql/man
   PGLIB=/usr/local/pgsql/lib
   PGDATA=/usr/local/pgsql/data
   export PATH MANPATH PGLIB PGDATA

   ****************************************
   Salir para que los cambios surtan efecto
   ****************************************

   [localhost]$ exit

Una vez que hemos terminado de instalar la base de datos y configurar nuestro sistema, tenemos que inicializarla y arrancarla:

Inicialización y arranque de la BD
   [localhost]$ su postgres
   [localhost]$ initdb
   [localhost]$ cd 
   [localhost]$ nohup postmaster -i > pgserver.log 2>&1 &
   [localhost]$ exit

Ya tenemos nuestra base de datos PostgreSQL, instalada y funcionando. Ahora solo tenemos que administrarla, para ello nada mejor que leerse los manuales de documentación de la misma y aprender SQL. Solamente nos queda hacer un par de ajustes en la configuración para que podamos acceder a postgreSQL via PHP/web. Lo primero es incluir en el archivo /usr/local/pgsql/data/pg_hba.conf la siguiente linea:

host all tu_maquina_IP tu_maquina_NETMASK trust

Y la segunda es dar privilegios de acceso en tu base de datos/tablas al usuario "Nobody"para que pueda coger los datos de la misma (Nobody es el usuario que ejecuta el servidor Apache por defecto). Para ello puedes hacer lo siguiente:

Dar privilegios a la BD
   ***************************************
   Suponemos que tenemos una base de datos
   llamada prueba, con una tabla llamada
   direcciones
   ***************************************

   [localhost]$ su postgres
   [localhost]$ psql prueba
   prueba=> GRANT SELECT ON direcciones
   prueba=> TO nobody;

   prueba=> z
   prueba=> q
   [localhost]$ exit

Instalación de Apache y PHP como módulo mismo

Pasamos a la segunda parte de este artículo, para ello procederemos como sigue:

Instalación de Apache/Php
 
   [localhost]$ su 
   [localhost]$ cd /usr/src
   [localhost]$ gunzip -c /local/download/apache_1.3.x.tar.gz 
                | tar xvf -
   [localhost]$ gunzip -c /local/download/php-3.0.x.tar.gz 
                | tar xvf -
   [localhost]$ cd apache_1.3.x
   [localhost]$ ./configure --prefix=/usr/local/apache
   [localhost]$ cd ../php-3.0.x
   [localhost]$ ./configure --with-pgsql=/usr/local/pgsql 
                --with-apache=../apache_1.3.x --enable-track-vars 
                --enable-sysvsem --enable-sysvshm
                --enable-url-includes
   [localhost]$ make
   [localhost]$ make install
   [localhost]$ cd ../apache_1.3.x
   [localhost]$ ./configure --prefix=/usr/local/apache 
                --activate-module=src/modules/php3/libphp3.a
   [localhost]$ make
   [localhost]$ make install
   [localhost]$ cd ../php-3.0.x
   [localhost]$ cp php3.ini-dist /usr/local/lib/php3.ini
   [localhost]$ exit

Ya tenemos apache instalado y PHP como módulo del mismo. Ahora tenemos que hacer unos cuantos ajustes en la configuración para que todo funcione. Tenemos que editar el fichero /usr/local/apache/conf/httpd.conf y añadirle lo siguiente:

Actualización del fichero de configuración
   AddType application/x-httpd-php3 .php
   DirectoryIndex index.html index.php

Estas dos lineas son las únicas necesarias para que Apache sepa que hacer con un fichero que contenga código PHP. Existen otras opciones que deberias actualizar en vuestro fichero /usr/local/apache/conf/httpd.conf para terminar de configurar Apache, por ejemplo: ServerAdmin, ServerName, DocumentRoot, directivas "Directory", etc. Los comentarios incluidos en este fichero son autoexplicativos y no deberiais tener ningun problema para ajustar la configuración a vuestro sistema. Ahora sólo nos queda arrancar el servidor Apache:

Arranque del servidor
   [localhost]$ su
   [localhost]$ /usr/local/apache/bin/httpd 
                -f /usr/local/apache/conf/httpd.conf
   [localhost]$ exit

NOTA: Para obtener toda la información/documentación completa pasaros por Apache documentación y PHP documentación.

Ejemplos

Lo primero que tenemos que hacer es comprobar que PHP funciona bien. Para ello podemos crear un fichero index.php en nuestro catalogo web /home/httpd/html/ con las siguientes lineas:

Creación fichero index.php
  <HTML>
   <HEAD>
      <TITLE>Pagina index de prueba</TITLE>
   </HEAD>
   <BODY>

   <?php

   /*  Codigo php de esta pagina */

   echo "Esto es una prueba<BR>
         Dia/hora: ".date("d/m/Y - H:i:s")."<BR>";
   ?>

   </BODY>
  </HTML> 

Este fichero deberia de daros como resultado dos lineas en pantalla, una de ellas con el dia y la hora de vuestro servidor. Una vez comprobado que PHP funciona, vamos a crear una página web, que acceda mediante PHP a PostgreSQL y que nos devuelva como resultado el contenido de una de las tablas de la base de datos. Suponemos que ya tenemos una base de datos llamada prueba, con una tabla direcciones que contiene tres campos calle, ciudad,pais. La máquina que estamos utilizando es servidor.domain.es y PostgreSQL utiliza el puerto 5432(puerto por defecto).

Acceso a PostgreSQL
  <HTML>
   <HEAD>
      <TITLE>Pagina index de prueba</TITLE>
   </HEAD>
   <BODY>

   <?php

   /* ********************* */
   /* Conexion a PostgreSQL */
   /* ********************* */

   /* Conexion a la base de datos */
   $conexion = pg_pconnect("host=servidor.domain.es 
                            port=5432 dbname=prueba");

   if (!$conexion) {
        echo "<CENTER>
              Problemas de conexion con la base de datos.
              </CENTER>";
        exit;
   }

   $sql="SELECT * FROM direcciones ORDER BY pais;";


   /* Ejecuta y almacena el resultado de la orden 
      SQL en $resultado_set */
   $resultado_set = pg_Exec ($conexion, $sql);
   $filas = pg_NumRows($resultado_set);


   /* Presenta la informacion almacenada en $resultado_set */
   for ($j=0; $j < $filas; $j++) {

   echo "Direccion: ".pg_result($resultado_set, $j, 0)." <BR>
         Ciudad: ".pg_result($resultado_set, $j, 1)." <BR>
         Pais: ".pg_result($resultado_set, $j, 2)." <P>";
   }


   /* Cierra la conexion con la base de datos */
   pg_close($conexion);

   ?>

   </BODY>
  </HTML>

Esta página web nos deberia de presentar la información contenida en la tabla direcciones de la base de datos prueba. Y a partir de aquí solamente teneis que leer la documentación y usar vuestra imaginación para crear páginas web dinámicas, actualizadas y que presenten la información contenida en vuestras bases de datos.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP