¿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
-
En Nginx los bloques
server
son equivalentes a los hosts virtuales de Apache. Cree el archivo/etc/nginx/sites-available/ejemplo.com
con el bloqueserver
. En este y todos los pasos subsecuentes remplaceejemplo.com
con los datos de su dominio:
Extracto del archivo: /etc/nginx/sites-available/ejemplo.comserver { 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; } }
-
Cree los directorios
public_html
ylog
a los cuales se hace referencia arriba:sudo mkdir -p /var/www/html/ejemplo.com/{public_html,logs}
-
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
-
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
-
En el bloque
server
, añada una directivalocation
para poder pasar PHP a través de FastCGI:
Archivo: /etc/nginx/sites-available/ejemplo.comlocation ~ \.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 directivatry_files
si lo desea. Por favor tenga en cuenta que esta corrección requiere queNginx
yphp-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; }
-
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:
-
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.
-
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 deSuContraseña
:create database datosweb; grant all on datosweb.* to 'usuarioejemplo' identified by 'SuContraseña';
-
Salga de MySQL:
quit
-
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.