Cómo instalar un servidor web con Nginx + MySQL + PHP5 + APC + Spawn_FastCGI [1ra Parte: Presentación]

Hace no mucho les mencionamos que ahora DesdeLinux (todos sus servicios) están funcionando en servidores de GNUTransfer.com. El blog ha mejorado muchísimo en cuanto a velocidad, fluidez, aún cuando pasamos de tener (tras la fusión de UsemosLinux) más de 30.000 visitas cada día (casi 200 usuarios conectados de forma simultánea). ¿cómo lograr un buen rendimiento en el servidor aún con este volumen de tráfico?

Actualmente Justice (VPS donde está el blog y algún otro servicio) cuenta con 3GB de RAM, no obstante se consumen menos de 500MB, esto es posible con la correcta elección del software a usar y una adecuada configuración de los mismos. Por ejemplo, Apache es sin lugar a dudas un grande en el mundo, el No.1 en cuando a hosting se refiere, pero precisamente por eso Apache no es siempre la mejor opción. Cuando el tráfico es elevado y el hardware del servidor no es realmente amplio (Ej: 8 u 16GB de RAM) Apache bien puede consumirnos demasiada RAM haciendo que el server en determinados momentos demore demasiado en responder, o peor, que nuestro sitio esté offline por recursos insuficientes. Es por ello que muchos elegimos a Nginx en vez de Apache.

Nginx:

Ya les hablamos de Nginx antes en el artículo Nginx: Una interesante alternativa a Apache, ahí les comentamos que es un servidor web como Apache, LightHttpd o Cherokee, pero que comparado con Apache destaca por su rendimiento y bajo consumo de hardware, precisamente por eso es que muchos sitios grandes como Facebook, MyOpera.com, DropBox o inclusive WordPress.com usan Nginx en vez de Apache. En el mundillo de Linux DesdeLinux no es el único que usa Nginx, hasta donde sé, emsLinux y MuyLinux también lo usan :)

Mi experiencia personal con Nginx data de hace varios años, cuando por necesidad empecé a buscar alternativas ligeras a Apache. En ese momento Nginx iba por la versión 0.6 y su compatibilidad con sitios de alta demanda hechos en PHP no era la más óptima, no obstante hoy en día desde la versión 0.9 en adelante (v1.2.1 disponible en Debian Stable, v1.4.2 disponible en ArchLinux) ha mejorado muchísimo, a tal punto de que con una adecuada configuración y unión de Nginx + PHP todo funcionará a las mil maravillas.

En esta serie de tutoriales usaré la versión 1.2.1-2.2 de Nginx, disponible en los repos Stable de Debian (Wheezy).

PHP5:

PHP, ese lenguaje de programación con que funcionan muchísimos de los sitios (y CMS) actualmente, es a mi forma de ver, la oveja negra de la familia. O sea, en mi experiencia personal sitios grandes, con un gran volumen de visitas, con muchas opciones, funciones, etc, si un sitio así está hecho en PHP consumirá más recursos que un sitio similar hecho por ejemplo en RoR. Mi experiencia ha sido esa amigos, PHP es un gran dragón de recursos, PHP+Apache es suficiente para tragarse cientos y cientos de MB de RAM sin una necesidad real.

El por qué de no usar RoR, Django o algún otro es simplemente que DesdeLinux (el blog, nuestro buque insignia) funciona con WordPress, un CMS desarrollado con PHP que nos ofrece tantas pero tantas comodidades, que simplemente no pensamos cambiarlo en corto o mediano plazo, honestamente, WordPress aún cuando no es perfecto nos sirve para lo que necesitamos y tal vez más.

Respecto a PHP, en estos tutoriales usaré la versión de PHP 5.4.4-14 disponible en Debian Wheezy (Stable)

Spawn_FastCGI:

Esto se puede decir que es lo que une a Nginx con PHP, o sea, aún cuando tengan el paquete PHP5 instalado si no tienen instalado y ejecutado Spawn_FastCGI cuando abran algún sitio en PHP el navegador les descargará el archivo, no les mostrará nada que el .php tenga programado pues el servidor no sabe cómo procesar archivos .php, es por ello que se hace imprescindible instalar y configurar Spawn_FastCGI.

Si usáramos Apache sería algo tan simple como instalar el paquete libapache2-mod-php5 pero como usamos Nginx deberemos instalar el paquete spawn-fcgi en su lugar. Además, en el tutorial les explicaré cómo crear un script de inicio del mismo en /etc/init.d/ para que puedan controlarlo con más comodidad.

MySQL:

Esta podría ser la gran interrogante o tal vez, para algunos, la nota discordante. Muchos sé que me harán la pregunta: ¿por qué usar MySQL y no MariaDB?

El asunto es simplemente que no tengo el tiempo suficiente para dedicarme a hacer una migración en este momento de MySQL a MariaDB, migración que en teoría debería ser transparente para todos, 100% compatible todo, pero eso es… como dije, en teoría. En el momento en que empecé a mover servicios de DesdeLinux de un VPS hacia otro tuve que dejar atrás a Apache y usar Nginx, esto implicaba archivos de configuración distintos, diferentes maneras de declarar VHosts, instalación y configuración desde cero del servidor y sus servicios, no podía en ese momento sumar otra tarea más a la lista, además y siendo honestos, cambié Apache por Nginx porque Apache no me satisfacía mis necesidades, no obstante, MySQL hasta el momento me satisface mis necesidades al 100%, no veo motivos para en ese momento yo aumentar mi carga de trabajo cambiando algo que ya me funcionaba técnicamente bien.

Una vez explicado el por qué no instalé MariaDB, también explicar que como la inmensa mayoría de los sitios webs necesitan una base de datos para su funcionamiento, pues en ella es donde se almacenará mucha información (o casi toda) del mismo. Hay algunos que gustan de Postgre u algún otro, en esta serie de tutoriales les explicaré cómo instalar MySQL y configurar usuarios independientes para cada sitio.

La versión de MySQL que usaré es la v5.5.31

APC:

APC es un optimizador para PHP (explicándolo de forma muy simple). Nos permite una vez configurado adecuadamente que el procesamiento PHP funcione mejor, que las respuestas del servidor sean más rápidas.

Existen alternativas como memcache no obstante, yo siempre he usado APC y he tenido resultados muy favorables. Les recomiendo leer este artículo en inglés: Comparing APC and Memcache as local content cache

Usaré en el tutorial la versión de php-apc v3.1.13-1 disponible también en los repos de Debian Stable.

Resumiendo:

Esta forma de instalar un configurar un servidor web no es la más óptima ni mucho menos, por ejemplo muchos recomendarán Varnish, que hasta donde he leído hace verdaderos milagros pues todo o casi todo lo almacena en caché, pero, en nuestro caso no necesitamos que el 100% del sitio esté siempre almacenado en caché pues no deseamos ni necesitamos llegar a ese extremo. No obstante aclaro, como dije arriba: “hasta donde he leído”, yo en lo personal no he usado Varnish hasta el día de hoy, por lo que no les puedo dar una opinión 100% objetiva.

Esto será una serie de tutoriales en los cuales les mostraré cómo instalar un servidor web como el que tiene hostedo en este minuto a DesdeLinux (blog, foro, paste, etc). El blog cuenta con 30.000 visitas cada día, casi 200 usuarios accediendo al mismo de forma simultánea, y aún así la RAM no sobrepasa los 500MB consumidos, esto para algunos puede ser un consumo excesivo pero… eh, tenemos 3GB de RAM, menos de 500MB (que incluyen servicio FTP, SSH, etc) está realmente bien no? :)

Toda la ‘magia’ no la hace solamente Nginx+Spawn_FastCGI+APC, nuestro sistema de caché del blog está realmente bien configurado y las reglas para Nginx son precisas, esto hace que el blog aún cuando recibe un gran tráfico procese mucho menos PHP que lo habitual, pues tiene mucho ya almacenado en caché. Si tienen un sitio de gran demanda y tienen problemas de recursos, les recomiendo sin lugar a dudas que estudien a ver qué sistema de caché les funcionará mejor, cuál se adaptará más a sus necesidades.

Espero les resulten interesantes estos tutoriales, en cada uno de ellos lo intentaré explicar todo de forma amplia, detallada y tan simple como me sea posible.

 

Fuente: desdelinux

¿Quién está en línea?

Hay 2812 invitados y ningún miembro en línea