Amigos, ¡ésta es una solución a lo Freake!: Squeeze, WordPress, Lighhtpd y FastCGI, MySQL y PHP5. Lo cierto es que si instalamos el paquete wordpress_3.0.4+dfsg-1_all.deb que viene en el repositorio del Debian 6, nos monta al Apache como el servidor web principal, aunque tengamos instalados el Lighttpd. Y si no queremos esa solución, tenemos que hacer una instalación y configuración manuales. Buscando, encontré en el sitio http://theorgllc.com/ un excelente artículo sobre el tema. Después de probarlo un par de veces y ver los resultados, decidí escribir un artículo al respecto.

light and wordpress logos

Siempre que hablemos de Servicios, será necesaria una pequeña Intro o Parte Teórica o “Muela”, la cual no debe ser tomada a la ligera, ya que es tan importante como la parte práctica.

Los Deseperados Habituales que saltan éstas partes casi siempre sufren con los palos que reciben al implementar servicios. Luego los veremos preguntando sobre temas que ya están respondidos en el artículo o que son muy evidentes. 😉

A continuación veremos:

Definiciones útiles tomadas de Wikipedia

Interfaz de entrada común (en inglés Common Gateway Interface, abreviado CGI) es una importante tecnología de la World Wide Web que permite a un cliente (navegador web) solicitar datos de un programa ejecutado en un servidor web. CGI especifica un estándar para transferir datos entre el cliente y el programa. Es un mecanismo de comunicación entre el servidor web y una aplicación externa cuyo resultado final de la ejecución son objetos MIME. Las aplicaciones que se ejecutan en el servidor reciben el nombre de CGIs.

FastCGI es un protocolo para interconectar programas interactivos con un servidor web. FastCGI es una variación de la ya conocida Common Gateway Interface (CGI ó Interfaz Común de Entrada). El principal objetivo de FastCGI es reducir la carga asociada con el hecho de interconectar el servidor web y los programas Common Gateway Interface, permitiéndole a un servidor atender más peticiones a la vez.

Spawn, en informática se refiere a una función que carga y ejecuta un nuevo proceso hijo.  El proceso actual puede esperar a que el proceso hijo termine, o puede continuar su ejecución de forma asíncrona. La creación de nuevos subprocesos requiere suficiente memoria para la ejecución del proceso actual y el proceso hijo.

Solución recomendada en la documentación para grandes prestaciones

Si leemos el documento descargado de Docs_ModFastCGI, incluido en el artículo “Instalar un servidor web ligero en Debian Squeeze/Ubuntu Lucid Lynx (II y final)“, hay un párrafo con el siguiente contenido, que traducido al español sería:

Spawning Externo

Ejecutar los procesos Spawning del FastCGI directamente en el servidor de páginas web, presenta algunas desventajas tales como:

  • El proceso FastCGI solo se podrá ejecutar localmente
  • tendrá el mismo permiso que el servidor de páginas web
  • tendrá el mismo directorio base que el servidor de páginas web

Tan pronto como usted utilice un servidor FastCGI separado -o externo- para quitarle alguna carga al servidor web, tendrá que controlar el proceso FastCGI mediante un programa externo tal como el “spawn-fcgi”. El programa “spawn-fcgi” se utiliza para iniciar el proceso FastCGI en su propio ambiente, y fijar el user-id, group-id, y cambiar hacia otro directorio raiz (chroot).

Aclaro que la traducción de Spawn como sustantivo es “huevo de marisco”, mientras que como verbo, Spawning significa más o menos “desovando externamente”. Un poquito jodedores los ingleses al usar en informática esa palabra, no? 😉

Lo fundamental es tener clara la idea para propósitos prácticos de que, mediante la solución planteada, se ejecutará el proceso FastCGI y tantos subprocesos hijos (child processes) como sean necesarios en uno o más servidores externos al servidor web. Que al ser ejecutados en un servidor diferente al que usamos como servidor web, por supuesto que éste se verá sometido a una carga menor. Y por último, que para usar un servidor FastCGI externo el proceso FastCGI se debe iniciar y controlar mediante el programa spawn-fcgi.

El Spawning Externo es para aquellos que necesiten instalar uno o más servidores para asumir una gran cantidad de peticiones, como el caso de un Proveedor de Acceso a Internet (ISP), o de sitios como humanOS, Cubadebate, etc. Explicar detalladamente esa solución está fuera de nuestro alcance.

Los que necesiten una gran disponibilidad y mayor seguridad, que consulten la ayuda acompañante de los paquetes lighttpd y spawn-fcgi; el material descargado en artículos anteriores; la documentación que se encuentra en los propios sitios web de cada programa, y la literatura especializada.

Solución que abordaremos

Usaremos solamente un servidor para acomodar a todos los servicios necesarios. Funciona y resulta adecuado para un sitio de modestas prestaciones, como por ejemplo en una LAN.  Puede servir de Guía o Punto de Entrada a aquellos que necesiten mayor disponibilidad y seguridad.

Aclarado lo anterior, ¡entremos en materia!.

El Servidor Base

Instalamos un servidor según lo indicado en cualquiera de los tres artículos siguientes:

Nuestro servidor de ejemplo tendrá los siguientes datos principales:

Nombre web.amigos.cu
Dirección IP 192.168.10.20
Dominio amigos.cu

Preferentemente, el servidor debe instalarse sin ambiente gráfico. Si va a utilizarse como un servidor de trabajo, o como se dice “en un ambiente de producción”, entonces recomendamos fuertemente no se instale ningún ambiente gráfico, porque no es necesario y además, por posibles problemas de seguridad. Los Newbies o Nuevos, que se lo hagan con ambiente gráfico para aprender. También, si van a brindar el servicio en una red empresarial de pequeñas dimensiones y utilizarán su propia estación de trabajo, es válido tener el ambiente gráfico, no?. 😉

Si quieren tener un ambiente gráfico no muy traumático y ligero de verdad, instalen sobre el servidor base (modo consola nada más) los paquetes wmaker y wmakerconf y cachareen con ellos. Ah!, no olviden los paquetes xserver-xorg y xinit. Para iniciar el Window Maker desde la consola, inicien sesión como un usuario normal (diferente del root) y ejecuten startx.

OJO con las particiones que creemos de forma que dejemos suficiente espacio en la partición donde alojaremos al WordPress y a todas las páginas web de nuestro sitio.

También debemos disponer en nuestra LAN de un servidor DNS. Si no lo tiene aun, debe hacerlo acorde a lo indicado en los artículos Cómo instalar y configurar un DNS Maestro Primario para una LAN en Debian 6.0 (I al V), o pedirle a su Administrador de la Red que registre el nombre y la dirección IP de su servidor web. Es que nos referiremos al servidor web por su nombre FQDN y porque es muy bueno acostumbrarnos a trabajar los servicios con un DNS instalado.

Instalando paquetes necesarios

Como el usuario root ejecutamos:

aptitude install lighttpd lighttpd-doc
aptitude install php5-cgi php5-gd mysql-server mysql-client php5-mysql

Durante el proceso de instalación observen que el paquete lighttpd instala el programa spawn-fcgi por defecto. También cuando instalamos el paquete mysql-server, nos piden que indiquemos cual será la contraseña del usuario root para el MySql. Recomendamos usen la misma contraseña que tienen ya declarada para el usuario root en su servidor.

mysql-password

Como ya terminamos con la instalación del servidor web base, empecemos con su configuración.

Configurando y comprobando

Para que todo funcione correctamente, tenemos que habilitar los módulos fastcgi-php y simple-vhost. Después debemos reiniciar el Lighty para que los cambios surtan efecto:

lighttpd-enable-mod  fastcgi-php  simple-vhost 
service lighttpd restart

Ahora comprobemos si funciona nuestro servidor. Abrimos el navegador y escribimos el URL http://web.amigos.cu, y al menos seremos capaces de listar el directorio /var/www.

Index of /

Name Last Modified Size Type
Parent Directory/ Directory
index.lighttpd.html 2013-Jan-19 18:16:41 3.5K text/html
lighttpd/1.4.28

También comprobemos que el PHP está funcionando correctamente. Para ello creamos un archivo (temporalmente) en el directorio /var/www:

nano /var/www/index.php

y el contenido del archivo anterior solamente será:

Si refrescamos nuestro sitio http://web.amigos.cu en el navegador, nos devolverá un feo error 403 – Forbiden (403 – Prohibido). Para determinar cual fue la causa del error, debemos ejecutar comoroot:

tail /var/log/lighttpd/error.log
….
2013-01-19 18:41:06: (server.c.1512) server stopped by UID = 0 PID = 2969
2013-01-19 18:41:06: (log.c.166) server started
2013-01-19 18:41:06: (server.c.961) WARNING: unknown config-key: fastcgi.server (ignored)
Nota: Para una salida continua de los mensajes, ejecutemos tail -f /var/log/lighttpd/error.log y para terminar la salida presionamos Ctrl + c.

No nos asustemos por ese error. Se debe a que no hemos habilitado el módulo mod_rewrite del Lighty. Si editamos su archivo de configuración mediante:

nano /etc/lighttpd/lighttpd.conf

Obtendremos la salida siguiente:

Fichero de configuración

Eliminemos el signo de comentario # de la línea que contiene “mod_rewrite” y además, adicionemos “mod_fastcgi”, debajo. Guardamos los cambios y ejecutamos:

service lighttpd restart

Refresquemos nuestro navegador y comprobemos que el PHP Version 5.3.3-7 o algo por el estilo funciona correctamente.

Es muy interesante conocer los cambios en la configuración del Lighty después de habilitar el módulo mod_fastcgi. Mediante less /etc/lighttpd/conf-enabled/15-fastcgi-php.conf, nos podemos enterar. Compare la configuración leída con la que viene en la documentación del paquete lighttpd-doc o con la que puede descargar en “Instalar un servidor…”

Ahora debemos indicarle al Lighty hacia cual directorio debe dirigir el tráfico por el puerto 80, mediante la configuración de un Host Virtual.  Los valores que modificaremos en el archivo /etc/lighttpd/conf-enabled/10-simple-vhost.conf, son personales y responderán a las características de cada instalación. Nosotros aceptaremos los valores del directorio raiz del servidor, y del directorio raiz de los documentos, que nos recomienda el Lighty por defecto y modificaremos solamente el nombre FQDN del host virtual.

nano /etc/lighttpd/conf-enabled/10-simple-vhost.conf

Y el contenido final del archivo deberá ser (recuerden adecuarlo a sus necesidades):

# /usr/share/doc/lighttpd-doc/simple-vhost.txtserver.modules += ( "mod_simple_vhost" )## The document root of a virtual host is document-root =
##   simple-vhost.server-root + $HTTP["host"] + simple-vhost.document-root
simple-vhost.server-root         = "/srv"
simple-vhost.document-root       = "htdocs"## the default host if no host is sent
simple-vhost.default-host        = "web.amigos.cu"

Después de guardar los cambios, procedemos a la creación de los directorios necesarios acorde a lo declarado anteriormente. El directorio /srv fue creado durante la instalación del Squeeze, por tanto no necesitamos crearlo:

mkdir /srv/web.amigos.cu
mkdir /srv/web.amigos.cu/htdocs

Como ya tenemos correctamente declarados el host virtual y el directorio asociados a nuestro nombre de dominio, podemos prescindir de los archivos creados en /var/www, y crear un nuevo index.phpmás personalizado en el directorio htdocs o directorio raiz de los documentos del host virtual:

rm /var/www/index.*
nano /srv/web.amigos.cu/htdocs/index.php

Añadimos al archivo anterior el contenido siguiente:

Hola Amigos!

Seguro que todo se muestra OK

Guardamos los cambios y reiniciamos el servicio:

service lighttpd restart

Refresquemos nuestro navegador y comprobemos que la página mostrada cambió y que ahora refleja, además de la salida del comando phpinfo(), el saludo.

No será necesario reiniciar el servicio en lo adelante si cambiamos el contenido del index.php o de otra página web. Esa operación solo se hará si cambiamos la configuración del Lighty.

¡Y enhorabuena Amigos!. Ya tenemos un Debian 6.0 Squeeze con el servidor de páginas web Lighttpd configurado para trabajar con el lenguaje PHP5 y el MySql como servidor de base de datos. También contamos con la correcta configuración del archivo Vhost del Lighty para manejar múltiples dominios.

Continuará…

Y entonces, ¿cómo quedo yo?, preguntará el WordPress. Siga con nosotros en la II parte y final y final de este artículo.

Plus: Es saludable comprobar el consumo de recursos Antes y Después que instalemos el WordPress. Instale el paquete htop. Abra una consola remota en el servidor web mediante ssh. Ejecute htop en ella y entreténgase en refrescar repetidamente la página con el resultado del phpinfo(), haciendo clic en el botón refrescar o presionando F5 sobre la página web. Compruebe mientras tanto el consumo de recursos sin tener instalado el WordPress.