¿Cómo Instalar y Configurar un Servidor LEMP en Debian 8?

¿Cómo Instalar y Configurar un Servidor LEMP en Debian 8?

Escrito por Felipe Bravo
Última actualización martes, oct 13, 2020

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.

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;
     servername www.ejemplo.com ejemplo.com;
     accesslog /var/www/html/ejemplo.com/logs/access.log;
     errorlog /var/www/html/ejemplo.com/logs/error.log;
    
     location / {
         root   /var/www/html/ejemplo.com/publichtml;
         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 https://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 https://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/fastcgiparams;
         fastcgipass  127.0.0.1:9000;
         fastcgiindex index.php;
         fastcgiparam SCRIPTFILENAME /var/www/html/ejemplo.com/publichtml$fastcgiscriptname;
     }
    

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$ {
	   tryfiles $uri =404;
	   include /etc/nginx/fastcgiparams;
	   fastcgipass 127.0.0.1:9000;
	   fastcgiindex index.php;
	   fastcgiparam SCRIPTFILENAME /var/www/html/ejemplo.com/publichtml$fastcgiscript_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/fastcgiparams;
	   if ($uri !~ "^/imagenes/") {
	       fastcgipass 127.0.0.1:9000;
	   }
	   fastcgiindex index.php;
	   fastcgiparam SCRIPTFILENAME /var/www/html/ejemplo.com/publichtml$fastcgiscriptname;
	}
  1. 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.

  1. 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';
    
  2. Salga de MySQL:

     quit
    
  3. 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.

Linux

65 artículo en esta categoria.
Escrito por Felipe Bravo.