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:
[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:
[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:
[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:
[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):
[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:
[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:
*************************************** 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:
[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:
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:
[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:
<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).
<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.