WordPress sobre Lighttpd + APC en Squeeze (I)

¡Hola Amigos! Les traigo una propuesta de como publicar un Blog basado en WordPress, con el Lighty como servidor de páginas web, el Spawn-FastCGI, PHP, el Caché Alternativo PHP (Alternative PHP Cache) APC, y todo en Debian Squeeze. Aclaro que las traducciones que hago del inglés al español, son muy libres de mi parte y puede que no sean del todo exactas desde el punto de vista lingüístico o semántico. En lo personal, me son suficientes.

Y señores, éste artículo es sólo la “Puerta de Entrada” al fascinante mundo de servir páginas web estáticas y/o dinámicas. No soy un experto en servidores web. Sin embargo muchos ya me han preguntado que ¿con cual servidor te quedas, Federico, con el Nginx, el Lighty o el Apache?. Siempre respondo que con los tres. Cada uno tiene su encanto y el Apache Es El Apache. En próximos posts abordaremos soluciones como ésta con el Nginx y con el Apache. Por cierto, existen rumores en la Aldea www  acerca del fin del Lighty, y la verdad es que Debian 7 aun lo mantiene en sus repositorios. Por algo será, no?.

Veremos:

  • Definiciones para los principiantes
  • Solución recomendada por Lighty
  • Solución que abordaremos
  • Datos del servidor de ejemplo
  • Instalando paquetes necesarios
  • Configurando y comprobando

Definiciones útiles para los principiantes

Servidores Web: Es la tecnología que tiene implícito programas informáticos que procesan aplicaciones realizando conexiones bidireccionales y/o unidireccionales y síncronas o asíncronas con el cliente, generando o cediendo una respuesta en cualquier lenguaje o aplicación del lado del cliente. […] Los Servicios Web surgieron ante una necesidad de estandarizar la comunicación entre distintas plataformas (PC, Mainframe, Mac, etc.) y lenguajes de programación (PHP, C, Java, etc.). Anteriormente se habían realizado intentos de crear estándares pero fracasaron o no tuvieron el suficiente éxito, algunos de ellos son DCOM y CORBA, por ser dependientes de la implementación del vendedor DCOM – Microsoft, y CORBA – ORB. […] A pesar de mucho limitar el uso de los servicios Web al Protocolo http, los servicios Web no fueron pensados para un protocolo en particular, es decir, nada impidió utilizar SOAP sobre algún otro protocolo de Internet (SMTP, FTP, etc.). Se utiliza principalmente HTTP por ser un protocolo ampliamente difundido y que se encuentra menos restringido por firewalls (generalmente se bloquean puertos como el FTP, pero el HTTP es muy probable que no este bloqueado).

Lighttpd: Servidor Web para los Sistemas operativos Unix/Linux y Microsoft Windows. También conocido como Lighty, es una alternativa a el servidor Web Apache. Está diseñado para ser seguro, rápido (muy rápido a decir verdad), compatible con los estándares, y flexible. Especialmente pensado para asumir cargas pesadas sin perder el balance utilizando poca RAM y poca CPU. Brinda altas velocidades de respuestas. Algunos sitios que lo utilizan son Youtube, Wikipedia y otros, los cuales soportan un gran tráfico. Se distribuye bajo Licencia BSD.

De WikipediaCGI: 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 conectar 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 conectar el servidor web y los programas Common Gateway Interface, lo que permite 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 secundario o hijo. El proceso primario o padre puede esperar a que el proceso hijo termine, o puede continuar su ejecución de forma asíncrona. La creación de nuevos procesos secundarios requiere de suficiente memoria para la ejecución del proceso primario y el proceso secundario, o de varios procesos secundarios.

Solución recomendada en la documentación de la Wiki Oficial del Lighttpd para grandes prestaciones

Si leemos el documento Docs_ModFastCGI del sitio antes señalado, hay un párrafo que traducido muy libremente al español de parte mía dirí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 puede ejecutar en el servidor local.
  • Tiene el mismo permiso que el servidor de páginas web.
  • Tiene el mismo directorio base que el servidor de páginas web.

Cuando usamos un servidor FastCGI Separado -o Externo- con el objetivo de quitarle alguna carga al servidor web, tenemos 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, fijar su user-idgroup-id, y cambiar hacia otro directorio raíz (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 bromistas los ingleses al usar en informática esa palabra, no?

Lo fundamental para propósitos prácticos es que, mediante la solución planteada en la documentación, se ejecutará el proceso FastCGI y tantos procesos secundarios o hijos (child processes) como sean necesarios, en uno o más servidores externos al servidor de páginas 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 y asumir una gran cantidad de peticiones, como el caso de un Proveedor de Acceso a Internet (ISP), o de sitios como blog.desdelinux.net, etc. Explicar detalladamente esa solución está Totalmente Fuera de nuestro alcance.

Solución que abordaremos en el post

Sólo un servidor para acomodar a todos los servicios necesarios. Funciona y resulta adecuado para un sitio de modestas prestaciones, como por ejemplo el de una LAN Empresarial. El método explicado puede servir de Guía a aquellos que necesiten mayor disponibilidad y seguridad.

Datos del servidor de ejemplo

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

Por supuesto que, en un ambiente de producción -e incluso de pruebas o en la casa-, debemos tener los registros DNS directo e inverso que hagan referencia a nuestro servidor.

Instalando paquetes necesarios

Como el usuario root ejecutamos:

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

Los archivos de configuración del Lighty se instalan en /etc/lighttpd. El programa spwan-fcgi se instala automáticamente. Los archivos del paquete de la documentación lo podemos encontrar en /usr/share/doc/lighttpd-doc. Recomendamos encarecidamente lean la documentación, la cual está en inglés. Durante la instalación del paquete mysql-server, nos piden la contraseña del usuario root para el MySql. Recomendamos usen la misma contraseña que tienen ya declarada para ese usuario.

Configurando y comprobando

Como ya terminamos con la instalación del soporte para el WordPress, debemos comenzar con la configuración y pruebas.

Habilitamos módulos del Lighty:

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

Comprobamos si funciona nuestro servidor. Abrimos el navegador y escribimos el URLhttp://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
Habilitamos los módulos mod_rewrite y mod_fast_cgi en el archivo principal de configuración del Lighty /etc/lighttpd/lighttpd.conf:
nano /etc/lighttpd/lighttpd.conf

Eliminamos el símbolo de comentario o hash # que está delate de “mod_rewrite” y añadimos debajo de esa línea “mod_fastcgi”, de modo que el inicio del archivo quede de la siguiente forma:

server.modules = (
        "mod_access",
        "mod_alias",
        "mod_compress",
        "mod_redirect",
        "mod_rewrite",
        "mod_fastcgi",
)

Comprobamos 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á:

<?php phpinfo(); ?>

Después reiniciamos el servicio:

service lighttpd restart

Si apuntamos en nuestro navegador a http://web.amigos.cu, veremos la página de información del PHP Version 5.3.3-7. Por tanto, todo 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.

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.txt

server.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 -p /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.php má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:

<b>Hola Amigos!</b>
<p>Seguro que todo se muestra OK</p>
<?php phpinfo(); ?>

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 Señor WordPress. Siga con nosotros en la II parte y final y final de este artículo.



Ingeniero Termo Energético de profesión. Administrador de Redes desde hace ya varios años. Programador en Visual FoxPro. Debianero de Corazón, y "OldFashion Man". Contacto: federicotoujague@gmail.com / +53 5 5005735

3 comentarios

  1.   eliotime3000 dijo

    Felicidades. Lo pondré en práctica en mi máquina virtual.

    1.    fico dijo

      Muchas Gracias por tu comentario

  2.   Daniel dijo

    Dios que hermoso desktop el de tu debian podrias decir todo lo que usastes para ese tema porfavor?

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.