Un servidor web en su propia máquina

Hace un tiempo que estoy instalando/desinstalando servers en mi PC para tener un pequeño servidor web en mi PC, armar una intranet y poder probar cosas para el trabajo; Fabio es uno de esos webloggers geeks que hasta arman su propio sistema de CMS para poder tener un weblog a su gusto.

Le pedí que escriba un "pequeño post" para explicar como uno puede armarse un server en su casa y se despacho con una nota de 5 páginas, con ejemplos, y comparaciones entre los "paquetes prearmados" y el "hecho a pulmón", el resultado esta muy buena nota y esta versión en PDF para poder leer y seguir las instrucciones si recién empezás o te trabás en algo.

Un servidor web en su propia máquina
Muchas veces en los sitios de tecnología o programación hablamos normalmente sobre nuestros servidores y nunca explicamos cómo tener uno.
Las opciones son claras, comprarlo o alquilarlo es la más sencilla para quien no sabe o está aprendiendo, pero parte de ese proceso de aprendizaje, desde mi punto de vista, debería comenzar con la instalación de un servidor web.

La creencia popular y la mala información hacen que uno piense que el equipo de escritorio que tiene cada uno es distinto en gran medida a un servidor, como si éstos fuesen viejos mainframes (computadoras enormes que todavía usan los bancos por ejemplo) enormes que jamás podríamos tener en nuestro hogar. Pero muy distinta es la realidad, la mayoría de los servidores web son equipos tan parecidos a los de escritorio que a veces se usan PCs baratas para alojar webs.

Es que la única diferencia está en la calidad de un producto o el fin para el que fue fabricado, pero técnicamente son iguales, así que, señores, aunque uds. No lo sepan, están leyendo este artículo desde un potencial servidor y será lo que explicaré a continuación.

¿Para qué un servidor web?
Primero hay que entender algo, cuando nos conectamos a Internet comenzamos a tener “presencia” en el medio, anónima o no, al poseer un número de IP (siempre se nos asigna uno al conectarnos) ya somos alguien más en la red, y ya al encender la máquina misma estamos en una red de una sola PC, sólo falta conectarla al mundo.

Toda página web debe ser alojada en un servidor, obviamente, la mejor forma es un servidor conectado las 24 horas del día todos los días del año, pero muchas veces necesitamos desarrollar nuestras webs antes de subirlas y mostrarlas al mundo, entonces ahí es cuando necesitamos un servidor “local”.

Yo utilizo un servidor todos los días, para mis proyectos personales, también se puede utilizar como base de aplicaciones web como calendarios, agendas, y muchas opciones más. Asi que el uso no se cierra en diseño y desarrollo sino en uso diario. Hasta conozco varios que alojan sus webs en su domicilio sin necesidad de pagar ningún hosting ni nada parecido, simplemente una buena conexión a la red (Cablemodem, ADSL, etc.) y una PC encendida día y noche.

¿Qué es un servidor web?
No voy a ser muy detallista ni prolijo para explicarlo, pero un servidor web es un programa que cuando recibe un pedido de una página, la envía a quien la pidió. Sólo eso, recibe pedidos, los contesta, envía HTML, imagenes, todo lo que se pida y que éste esté manejando. Nada más que eso, luego hay cosas que se pueden “agregar” al servidor web.

¿Que servidor me recomiendan?
Aquí podemos discutir horas o ir al grano. Apache, ¿por qué? Porque es gratis, libre, abierto y funciona, podríamos utilizar el Internet Information Services de Microsoft (IIS) pero es un desastre para ciertas cosas, yo personalmente prefiero Apache que se descarga libremente de aquí (http://httpd.apache.org/download.cgi) y está bajo licencia GPL, es decir, es libre, lo podemos usar sin restricciones y sin que nadie nos pida una licencia paga ya que lo cubre la anterior.

Bajando, instalando, funcionando (versión complicada)
La descarga que recomiendo es la del Apache 2.0.48 (o el último que esté disponible en el momento que lean el artículo), si bien algunos argumentan que todavía no está al 100% para mí es excelente bajo windows. Hay que descargar el Win32 Binary (MSI Installer) que es un instalador de windows, así que necesitan tener el MSI Installer en su PC, cosa que es normal poseer en Windows XP o 2000, pero más raro en 95 (no recomiendo usar ese win tan viejo!)

La instalación es más sencilla todavía, típica de programa donde nos pregunta en qué carpeta queremos instalarlo, yo recomiendo dejarlo en el c:\Apache Group que es el que voy a usar de referencia para explicar todo.

Una vez instalado nos pregunta si queremos dejar al Apache como servicio. Los servicios son aplicaciones que se inician al comienzo del arranque del sistema operativo, no necesitan ser ejecutados a mano, ya funcionan sin pedirlo, y es normal para un servidor web.

Lo recomiendo solamente para aquellos que tengan más de 256Mb de memoria si es que lo van a usar de “prueba”, igualmente el Apache viene con una pequeña aplicación que nos permite “levantar” el servicio y “bajarlo” cuando querramos, así no ocupamos tanta memoria.

Para probar si está funcionando basta con abrir el navegador que usen habitualmente y tipear “http:///localhost” ó “http://127.0.0.1” y una linda página de apache debería decirles que ya está funcionando el servidor.

Tip: localhost ó 127.0.0.1 es la dirección de la máquina mísma cuando se quiere mirar al espejo, desde afuera nos ven con el ip que nuestro porveedor nos haya entregado, pero desde adentro no necesitamos conectarnos para vernos.

¿Dónde alojo mis páginas?
La carpeta donde Apache mira para entregar archivos es C:\Apache Group\Apache2\htdocs, todo lo que allí esté será mostrado al público, el resto no. Así que podemos borrar el contenido que allí está (para empezar de cero) y subir nuestro primer index.html (index.html será mostrado por defecto, si no hay index en vez de mostrar una página mostrará el contenido de la carpeta, esto es totalmente inseguro, así que mejor... dejen un index.html ahí adentro).

Hasta aquí el servidor sólo muestra HTML, imágenes y nada más, necesitamos algo de “potencia” y allí es donde entran el PHP y MySQL.

Webs dinámicas
PHP nos permite generar contenido HTML en el acto, es decir, procesa lo que nosotros querramos que haga, y se lo dá al Apache para que nos lo envíe. Así de simple si yo quiero que PHP me muestre un “hola mundo” tendré que hacer un archivo “hola.php” que en su código diga:

<?
echo “hola mundo”;
?>

y cuando escriba en el navegador http://localhost/hola.php me mostrará “hola mundo” en pantalla, pero para que todo esto suceda, primero, debemos bajar, instalar y configurar el motor de PHP.

¿Para que tanto lío? Bueno lo interesante del PHP es que nos permite conectarnos con una base de datos y mostrar información en el acto, cambiarla e inmediatamente cambian los datos que se ven en la web. Así funcionan los foros, los weblogs, y casi todo sistema “dinámico”, un pequeño cambio de
la información en la base de datos y ya la web entera cambia su contenido sin necesidad de haber escrito una sola línea de código!

Imaginen un sitio estático, sólo HTML, donde queremos cambiar una noticia deberíamos editar la página de inicio, subirla al servidor y ni hablar si queremos cambiar un dato de un menú y nuestro sitio cuenta con 300 páginas, deberíamos cambiar 300 archivos y subirlos uno por uno. Con sitios
dinámicos sólo cambiamos un archivo del menú y se cambian todos a la vez!

Para descargar el PHP hay que entrar a: http://www.php.net/downloads.php, allí tenemos dos opciones, una es un instalador de 1Mb que viene “vacío”, sin ninguna librería extra, yo recomiendo el otro, el PHP 4.3.4 zip package ya que incluye todo lo que podríamos llegar a necesitar.

Este archivo .zip (se descomprime con winzip, winrar, etc.) tiene todo lo que necesitamos y lo debemos alojar en c:\Apache Group\PHP para que todo quede junto y no se nos desordene la instalación.

Ahora bien, tenemos el PHP, el Apache, pero nos falta algo, avisarle al Apache que está ahí su compañero! Aquí es donde debemos editar un archivo, pero antes lo más importante, apagar el apache.
Cuando instalaron el apache se encontraron con una aplicación nueva, el Control Apache Server, que es una sencilla aplicación con cuatro o cinco botones más que claros, “Start”, “Stop”, “Restart”, “Services”, “Connect”.

Primero, se ubican sobre “Stop” y un click, ahí murió por el momento el servidor y si quieren lo levantan con “Start”, sólo eso, no se necesita más.
Una vez apagado debemos ir al archivo C:\Apache Group\Apache2\conf\httpd.conf ahí está la configuración del Apache, no voy a entrar en detalles, pero si leen documentación podrán cambiar de todo a gusto.

Lo único que hay que agregar aquí, son estas líneas, donde están los “LoadModule”:
1- LoadModule php4_module "C:/Apache Group/php4/sapi/php4apache2.dll"

Tip: para comentar cosas que no querramos ejecutar en el archivo de configuración basta con un # numeral adelante para que toda esa línea no sea vista

2- Buscar “DirectoryIndex index.html index.html.var” y agregarle index.php para que quede así: DirectoryIndex index.html index.html.var index.php
3- Buscar “AddType” y agregar:AddType application/x-httpd-php .php

Como verán lo único que hice fue indicarle al Apache que de ahora en más va a utilizar el PHP, primero le dije que cargue el módulo, el módulo es “apache2” porque estamos usando esa versión, para los que usen un apache viejo lean la documentación correspondiente.

En el segundo paso le indicamos que además de considerar los archivos índice de HTML que se encargue también de interpretar los PHP y en el tercer paso le indicamos que hacer cuando se encuentra con un archivo PHP, nada más.

Ahora nos falta revisar el archivo PHP.ini, al igual que la configuración del Apache allí podremos cambiar lo que querramos (no me hago cargo de lo que hagan! Jejeje)
Pero ¿donde está el php.ini? Este, lamentablemente, va en cualquier lugar menos donde lo esperábamos, se instala en C:\WINDOWS , si en la carpeta de windows, así que ahí lo encontraremos.
Lo único que acostumbro revisar es que esté bien especificado esto:
doc_root = C:\Apache Group\Apache2\htdocs

Porque así apunta correctamente a los archivos, además hay un detalle con el PHP para windows y es que, desde hace años, se olvidan de configurar bien el path de los archivos temporales y tiene la ruta \tmp (de Linux) cuando debería ser c:\Temp o la carpeta temporal que deseemos (debe existir), este campo es: session.save_path = c:\temp

Apache nuevamente arriba.
Bueno, es el momento de levantar nuevamente al servidor web, si emite un error es que alguno de los pasos anteriores no funcionó, agregaron algo de más, o me faltó aclarar algo, espero que no ;)

Ahora nos falta algo crucial para cualquier servidor completo y es la base de datos, la misma sirve para mantener ordenada información, consultarla eficientemente y mantenterla. Antiguamente se utilizaban enormes archivos de texto para esto, inclusive hoy en día algunos usan bases por el estilo o casos peores, usan bases de Access, pero lo ideal es el MySQL, libre, abierto, gratuito, etc. Igual que el PHP y Apache.

MySQL el paso final
Para descargar la base de datos basta con visitar su sitio web, si bien es un producto que se vende al estar bajo licencia libre se puede descargar y usar, además es la mejor forma de marketing que tiene la empresa, el uso es libre, ellos cobran los extras. http://www.mysql.com/downloads/mysql-4.0.html

Esta base de datos se instala sin problemas y sin darnos cuenta comienza a funcionar, aquí tal vez comienza la confusión... ¿donde está funcionando? ¿ está realmente presente?

Yo utilizo una aplicación que me ayuda a administrar el sistema, el problema es que ya está vieja y nadie siguió programándola, pero busquen por la red el MySQL Front (http://www.fabio.com.ar/downloads/appz/MySQL-Front_2.5_Setup.exe) que les ayudará a crear tablas, datos, consultar, etc.

La otra opción es utilizar el PHPMyAdmin, que se instala dentro del htdocs y se usa desde el navegador.

Cualquiera que sea la aplicación que usen es ideal que lean un poco de la misma, lo primero que van a necesitar, por lo general, es ejecutar algún archivo SQL de algún sistema de foro o weblog, siempre vienen con estos, y es el que crea las tablas y demás.

Pero eso... ya es para otro artículo ;)

La solución sencilla
Hay varios paquetes que se encargan de hacer todo esto que expliqué ellos mísmos. Son paquetes “todo en uno” que incluyen el Apache, MySQL, PHP, Perl, SSL, PHPMyAdmin y demás aplicaciones listas para usar.

Hacen exactamente lo mismo que yo he hecho “a mano” y son recomendables si están apurados.

Si en cambio quieren aprender, sigan los pasos, pregunten e investiguen, no es difícil, pero seguro que de entrada no funcionará nada y eso los frustrará. Lo más importante es que aprendan qué están haciendo.

Los paquetes “todo en uno” también cambian un poco las cosas para hacerlas más sencillas, los que recomiendo son:
Apache friends
Un grupo alemán que tiene un paquete super completo, está en inglés para no hacerla tan difícil, el paquete posee: Apache, MySQL, PHP + PEAR, Perl, mod_php, mod_perl, mod_ssl, OpenSSL, phpMyAdmin, Webalizer, Mercury Mail Transport System para Win32 y NetWare Systems v3.32, JpGraph, FileZilla FTP Server, mcrypt, Turck MMCache, SQLite, y WEB-DAV + mod_auth_mysql.

Es decir, una bestia, tiene de todo en un paquete de 30Mb (aprox). Recuerden igualmente que no todos los proveedores de hosting ofrecen TODOS esos servicios, así que probablemente algo que funcione en sus máquinas no lo haga cuando quieran llevarlo a otro nivel. Pueden verlo acá

Easy PHP
Este paquete francés posee Apache 1.3.27 - PHP 4.3.3 - MySQL 4.0.15 - PhpMyAdmin 2.5.3 y funciona bastante bien, el único inconveniente es la falta de actualización, aunque con esos servicios tienen para un buen rato, el paquete es de menor tamaño que el anterior por obvias razones.
Pueden verlo acá

PHP Triad
No lo recomiendo para nada, porque se quedó en el tiempo (2002) con algunos pocos parches, lo nombro porque a este lo verán nombrar en foros y sitios, pero no lo recomiendo.
Pueden verlo acá

Nusphere
Es una opción comercial, la primera que utilicé, no la recomiendo ya que no es necesario pagar por algo que pueden armar uds. mismos
Pueden verlo acá

Otros sitio con explicaciones sobre este tema

Conclusión:
Poseer un servidor web en la PC hogareña es la mejor forma para aprender, programar y estudiar cómo funcionan los sistemas que habitualmente usamos. Desde hace años hago esto para poder trabajar y producir mis propios Scripts, páginas webs y sistemas. No es difícil por más que parezca largo, podría haber hecho este artículo en tres párrafos y nada se entendería, por eso traté de explicar cada detalle.

Por mi parte separo dos fines para esto, el primero es el estudio y la creación, el segundo el uso directo sin pensar mucho en problemas, uds. Elijan, tienen la solución para cada situación, yo elijo la primera ;)

Fabio Baccaglioni
fabio@fabio.com.ar
www.fabio.com.ar

Rants