¿Cómo instalar y configurar un servidor LEMP en Debian 8?

Actualizado el 14 de septiembre, 2016. Por BlueHosting.

Este documento describe una alternativa compatible con una infraestructura LAMP (Linux, Apache, MySQL y PHP). La infraestructura LEMP remplaza el componente del servidor web Apache (que se corresponde con la "A" en LAMP) con Nginx (o "Engine x", lo que se corresponde con la E en LEMP). LEMP está compuesto de una variedad de programas con software de código abierto, utilizados para construir y ejecutar servidores web.

Esta guía está escrita para un usuario root. Los comandos que requieren privilegios elevados están precedidos por sudo. Si usted inició sesión como root obvie el uso de este prefijo.

Antes de comenzar

Antes de instalar LEMP en su servidor asegúrese de:

  • Tener una configuración inicial en su servidor que provea al menos los requisitos mínimos de seguridad y estabilidad.
  • Tener configurado un hostname y un nombre de dominio completamente calificado (o FQDN, por sus siglas en inglés). Para comprobarlo ejecute:
    hostname
    hostname -f
    

    El primer comando debería mostrar el hostname corto, y el segundo debería mostrar el FQDN. * Actualizar los repositorios y paquetes en su servidor:

    sudo apt-get update && sudo apt-get upgrade
    

Instalar el servidor web Nginx

Hay varias formas de instalar Nginx. El método aquí presentado obtiene los paquetes desde el repositorio del proyecto Debian y proporciona una versión estable y probada de este servidor web. Existen otros métodos, pero no son abordados en este tutorial.

Instale Nginx:

sudo apt-get install nginx

Configurar los bloques server

  1. En Nginx los bloques server son equivalentes a los hosts virtuales de Apache. Cree el archivo /etc/nginx/sites-available/ejemplo.com con el bloque server. En este y todos los pasos subsecuentes remplace ejemplo.com con los datos de su dominio:
    Extracto del archivo: /etc/nginx/sites-available/ejemplo.com

    server {
    listen   80;
    server_name www.ejemplo.com ejemplo.com;
    access_log /var/www/html/ejemplo.com/logs/access.log;
    error_log /var/www/html/ejemplo.com/logs/error.log;
    
    location / {
        root   /var/www/html/ejemplo.com/public_html;
        index  index.html index.htm;
    }
    }
    
  2. Cree los directorios public_html y log a los cuales se hace referencia arriba:

    sudo mkdir -p /var/www/html/ejemplo.com/{public_html,logs}
    
  3. Habilite el sitio y reinicie el servidor web:

    sudo ln -s /etc/nginx/sites-available/ejemplo.com /etc/nginx/sites-enabled
    sudo /etc/init.d/nginx restart
    

    Para desactivar un sitio, simplemente elimine en enlace simbólico y reinicie Nginx:

    sudo rm /etc/nginx/sites-enabled/ejemplo.com
    sudo /etc/init.d/nginx restart
    

    El archivo fuente es guardado y puede volver a activar el sitio en cualquier momento.

Implementar PHP con FastCGI

Para poder desarrollar aplicaciones que usan PHP debe implementar “PHP-FastCGI”, el cual permite que Nginx maneje e interprete el código PHP de sus páginas. Comience instalado las dependencias requeridas:

sudo apt-get install php5-cli php5-cgi spawn-fcgi php-pear
  1. La siguiente secuencia de comandos:

    • Descarga un script compacto para PHP-FastCGI.
    • Configura un script de inicialización para el control del proceso.
    • Inicia el proceso por primera vez.
    • Asegura que el proceso se iniciará después de un ciclo de reinicio.
      cd /opt/ 
      sudo wget -O php-fastcgi-deb.sh http://www.linode.com/docs/assets/1548-php-fastcgi-deb.sh
      sudo mv /opt/php-fastcgi-deb.sh /usr/bin/php-fastcgi
      sudo chmod +x /usr/bin/php-fastcgi
      sudo wget -O init-php-fastcgi-deb.sh http://www.linode.com/docs/assets/1549-init-php-fastcgi-deb.sh
      sudo mv /opt/init-php-fastcgi-deb.sh /etc/init.d/php-fastcgi
      sudo chmod +x /etc/init.d/php-fastcgi
      sudo /etc/init.d/php-fastcgi start
      sudo update-rc.d php-fastcgi defaults
      
  2. En el bloque server, añada una directiva location para poder pasar PHP a través de FastCGI:
    Archivo: /etc/nginx/sites-available/ejemplo.com

    location ~ \.php$ {
        include /etc/nginx/fastcgi_params;
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /var/www/html/ejemplo.com/public_html$fastcgi_script_name;
    }
    

    Advertencia: si usted está planificando ejecutar aplicaciones que soporten cargas de archivos —imágenes, por ejemplo—, la configuración arriba puede exponerlo a riesgos de seguridad permitiendo la ejecución arbitraria de código. La explicación corta para este comportamiento es que un URI diseñado adecuadamente, el cual termina en .php, en combinación con un archivo malicioso de imagen que en realidad contiene un PHP válido, puede resultar en que la imagen sea procesada como si fuera PHP.
    Para mitigar este problema, puede modificar su configuración para que incluya una directiva try_files si lo desea. Por favor tenga en cuenta que esta corrección requiere que Nginx y php-fcgi residan en el mismo servidor.

    location ~ \.php$ {
       try_files $uri =404;
       include /etc/nginx/fastcgi_params;
       fastcgi_pass 127.0.0.1:9000;
       fastcgi_index index.php;
       fastcgi_param SCRIPT_FILENAME /var/www/html/ejemplo.com/public_html$fastcgi_script_name;
    }
    

    También es una buena idea asegurar los directorios cargados que su aplicación pueda usar. El siguiente extracto de configuración demuestra cómo asegurar el directorio "/imagenes"

    location ~ \.php$ {
       include /etc/nginx/fastcgi_params;
       if ($uri !~ "^/imagenes/") {
           fastcgi_pass 127.0.0.1:9000;
       }
       fastcgi_index index.php;
       fastcgi_param SCRIPT_FILENAME /var/www/html/ejemplo.com/public_html$fastcgi_script_name;
    }
    
  3. Cuando haya completado las modificaciones a la configuración, asegúrese de que el bloque server esté habilitado y luego reinicie el servicio Nginx:

    /etc/init.d/nginx restart
    

Ahora podrá implementar scripts PHP con su infraestructura LEMP.

Instalar el servidor de bases de datos MySQL

MySQL es probablemente el motor de base de datos relacional de código abierto líder, y es una solución de base de datos popular para aplicaciones basadas en web. La instalación se explica en los siguientes pasos:

  1. Ingrese el siguiente comando para instalar los paquetes del servidor MySQL y el soporte PHP (requerido para MySQL):

    sudo apt-get install mysql-server php5-mysql
    

    Se le pedirá que ingrese una contraseña segura para el usuario root de MySQL. 2. Abra la línea de comandos de MySQL:

    mysql -u root -p
    

    Cuando se le solicite, ingrese la contraseña root que configuró anteriormente.

  2. Cree una base de datos y otorgue a sus usuarios los permisos correspondientes. Cambie el nombre de la base de datos (datosweb) y el nombre de usuario (usuarioejemplo). Además cambie el valor de SuContraseña:

    create database datosweb;
    grant all on datosweb.* to 'usuarioejemplo' identified by 'SuContraseña';
    
  3. Salga de MySQL:

    quit
    
  4. Ahora puede proporcionar las credenciales de la base de datos y el usuario a su aplicación para que esta las utilice según sus propósitos. Para asegurarse de que PHP podrá acceder al conector MySQL que acaba de instalar, reinicie el servicio PHP:

    sudo /etc/init.d/php-fastcgi restart
    

¡Felicidades, ha instalado y ha hecho una configuración básica de una infraestructura LEMP para el desarrollo de sus aplicaciones!

Recursos adicionales

Para complementar la información presentada en esta guía puede consultar los siguientes recursos. Aunque este material es provisto esperando que sea útil, tome en cuenta que no podemos certificar su actualidad o precisión.

¿QUÉ DESEAS SABER?

Intentaremos leer tu mente...