Instalar el paquete de Linux, Nginx, MySQL y PHP (LEMP) en Ubuntu 16.04
Introducción
Instalar el paquete de Linux, Nginx, MySQL y PHP (LEMP) en Ubuntu 16.04 El paquete de software de LEMP es un grupo de software que se puede utilizar para servir páginas web dinámicas y aplicaciones web. Este es un acrónimo que describe un sistema operativo Linux, con un servidor web Nginx. Los datos de back-end se almacenan en la base de datos MySQL y el procesamiento dinámico es manejado por PHP.
En este tutorial, demostraremos cómo instalar un paquete LEMP en un servidor Ubuntu 16.04. El sistema operativo Ubuntu se ocupa del primer requisito. Describiremos cómo poner en funcionamiento el resto de los componentes.
Prerrequisitos
Antes de completar este tutorial, debe tener una cuenta de usuario no root en su servidor con privilegios sudo
. Puede aprender a configurar este tipo de cuenta completando nuestra configuración de servidor inicial Ubuntu 16.04.
Una vez que tenga su usuario disponible, inicie sesión en su servidor con ese nombre de usuario. Ahora está listo para comenzar los pasos descritos en este tutorial.
Paso 1: Instale el Servidor Web de Nginx
Para mostrar las páginas web a los visitantes de nuestro sitio, vamos a emplear Nginx, un servidor web moderno y eficiente.
Todo el software que usaremos para este procedimiento vendrá directamente de los repositorios de paquetes predeterminados de Ubuntu. Esto significa que podemos utilizar el paquete de gestión de paquetes apt
para completar la instalación.
Como esta es la primera vez que utilizamos apt
para esta sesión, debemos comenzar por actualizar nuestro índice de paquete local. Entonces podemos instalar el servidor:
sudo apt-get update
sudo apt-get install nginx
En Ubuntu 16.04, Nginx está configurado para comenzar a funcionar después de la instalación.
Si tiene funcionando el Firewall ufw
, como se describe en nuestro tutorial de configuración inicial, deberá permitir las conexiones a Nginx. Nginx se registra con ufw
al momento de la instalación, por lo que el procedimiento es bastante directo.
Se recomienda que habilite el perfil más restrictivo que aún permita el tráfico que desea. Dado que aún no hemos configurado SSL para nuestro servidor, en este tutorial solo necesitaremos permitir el tráfico en el puerto 80.
Puede habilitar esto escribiendo:
sudo ufw allow 'Nginx HTTP'
Puede verificar el cambio escribiendo:
<pre
sudo ufw status
Debería ver el tráfico HTTP permitido en la salida mostrada:
Output
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
Con la nueva regla de Firewall agregada, puede probar si el servidor está en funcionamiento accediendo al nombre de dominio o dirección IP pública de su servidor en su navegador web.
Si no tiene un nombre de dominio apuntado a su servidor y no conoce la dirección IP pública de su servidor, puede encontrarlo escribiendo uno de los siguientes en su terminal:
ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
Esto imprimirá algunas direcciones IP. Puede probar cada uno de ellos en su navegador web.
Como alternativa, puede verificar a qué dirección IP se puede acceder desde otras ubicaciones en Internet:
curl -4 icanhazip.com
Escriba una de las direcciones que recibe en su navegador web. Debería llevarlo a la página de destino predeterminada de Nginx:
http://server_domain_or_IP
Si ve la página de arriba, ha instalado correctamente Nginx.
Paso 2: Instalar MySQL para Administrar los Datos del Sitio
Ahora que tenemos un servidor web, debemos instalar MySQL, un sistema de administración de bases de datos, para almacenar y administrar los datos de nuestro sitio.
Puede instalar esto fácilmente escribiendo:
sudo apt-get install mysql-server
Se le pedirá que proporcione una contraseña de root (administrativa) para usar dentro del sistema MySQL.
El software de la base de datos MySQL está ahora instalado, pero su configuración aún no está completa.
Para asegurar la instalación, podemos ejecutar un Script de seguridad sencillo que nos preguntará si queremos modificar algunos valores predeterminados inseguros. Comience la secuencia de comandos escribiendo:
mysql_secure_installation
Se le pedirá que introduzca la contraseña que estableció para la cuenta {0}root{/0} de MySQL. A continuación, se le preguntará si desea configurar VALIDATE PASSWORD PLUGIN
.
Advertencia. Habilitar esta función es será su decisión. Si está habilitado, las contraseñas que no coincidan con los criterios especificados serán rechazadas por MySQL con un error. Esto causará problemas si usa una contraseña débil junto con un software que configura automáticamente las credenciales de usuario de MySQL, como los paquetes de Ubuntu para phpMyAdmin. Es seguro dejar la validación desactivada, pero siempre debe usar contraseñas sólidas y únicas para las credenciales de la base de datos.
Responda y por sí o cualquier otra cosa para continuar sin habilitar.
VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?
Press y|Y for Yes, any other key for No:
Si ha habilitado la validación, se le pedirá que seleccione un nivel de validación de contraseña. Tenga en cuenta que si ingresa 2 , para el nivel más fuerte, recibirá errores al intentar establecer una contraseña que no contenga números, letras mayúsculas y minúsculas, y caracteres especiales, o que se base en palabras comunes del diccionario.
There are three levels of password validation policy:
LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1
Si activó la validación de la contraseña, se le mostrará la fortaleza de la contraseña de la contraseña de root existente y le preguntará si desea cambiar esa contraseña. Si está contento con su contraseña actual, ingrese n para "no" en el mensaje:
Using existing password for root.
Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : n
Para el resto de las preguntas, debe presionar Y y presionar la tecla Enter en cada aviso. Esto eliminará algunos usuarios anónimos y la base de datos de prueba, deshabilitará los inicios de sesión raíz remotos y cargará estas nuevas reglas para que MySQL respete inmediatamente los cambios que hemos realizado.
Hasta este punto, su sistema de base de datos está ahora configurado y podemos seguir adelante.
Paso 3: Instalar PHP para Procesamiento
Ahora tenemos Nginx instalado para servir nuestras páginas y MySQL instalado para almacenar y administrar nuestros datos. Sin embargo, todavía no tenemos nada que pueda generar contenido dinámico. Podemos usar PHP para esto.
Como Nginx no contiene procesamiento PHP nativo como otros servidores web, necesitaremos instalar php-fpm
, que significa "administrador de procesos fastCGI". Le diremos a Nginx que pase las solicitudes de PHP a este software para su procesamiento.
Podemos instalar este módulo y también obtendremos un paquete auxiliar adicional que permitirá que PHP se comunique con nuestro back-end de base de datos. La instalación extraerá los archivos core PHP necesarios. Haz esto escribiendo:
sudo apt-get install php-fpm php-mysql
Configurar el Procesador PHP
Ahora tenemos nuestros componentes PHP instalados, pero necesitamos hacer un pequeño cambio de configuración para hacer que nuestra configuración sea más segura.
Abra el archivo de configuración php-fpm
principal con privilegios de administrador:
sudo nano /etc/php/7.0/fpm/php.ini
Lo que estamos buscando en este archivo es el parámetro que establece cgi.fix_pathinfo
. Esto se comentará con un punto y coma (;) y se establecerá en "1" de manera predeterminada.
Esta es una configuración extremadamente insegura porque le dice a PHP que intente ejecutar el archivo más cercano que pueda encontrar si no se puede encontrar el archivo PHP solicitado. Esto básicamente permitiría a los usuarios crear solicitudes PHP de una forma que les permitiera ejecutar scripts que no deberían poder ejecutar.
Cambiaremos ambas condiciones al descomentar la línea y establecerla en "0" de esta manera:
cgi.fix_pathinfo=0
Ahora, guarde y cierre el archivo cuando haya terminado.
Ahora, solo tenemos que reiniciar nuestro procesador PHP escribiendo:
sudo systemctl restart php7.0-fpm
Esto implementará el cambio que hicimos.
Paso 4: Configure Nginx para Usar el Procesador PHP
Ahora, tenemos todos los componentes necesarios instalados. El único cambio de configuración que todavía necesitamos es decirle a Nginx que use nuestro procesador PHP para contenido dinámico.
Hacemos esto en el nivel de bloque de servidor (los bloques de servidor son similares a los hosts virtuales de Apache). Abra el archivo de configuración del bloque de servidor Nginx predeterminado escribiendo:
sudo nano /etc/nginx/sites-available/default
Actualmente, con los comentarios eliminados, el archivo de bloque del servidor predeterminado de Nginx se ve así:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
}
Necesitamos hacer algunos cambios a este archivo para nuestro sitio.
- Primero, necesitamos agregar
index.php
como el primer valor de nuestra directiva deindex
para que se sirvan los archivos llamadosindex.php
, si están disponibles, cuando se solicita un directorio. - Podemos modificar la directiva
server_name
para señalar el nombre de dominio o la dirección IP pública de nuestro servidor. - Para el procesamiento real de PHP, solo tenemos que descomentar un segmento del archivo que maneja las solicitudes de PHP eliminando los símbolos de libra (#) de delante de cada línea. Este será el bloque de
location ~\.php$
location, el fragmentofastcgi-php.conf
incluido y el socket asociado conphp-fpm
. - También descomentaremos el bloque de ubicación que trata con los archivos
.htaccess
utilizando el mismo método. Nginx no procesa estos archivos. Si alguno de estos archivos sucede para encontrar su camino en la root del documento, no deben ser servidos a los visitantes.
Los cambios que debe realizar están en rojo en el siguiente texto:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name server_domain_or_IP;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
Cuando haya realizado los cambios anteriores, puede guardar y cerrar el archivo.
Pruebe su archivo de configuración para detectar errores de sintaxis escribiendo:
sudo nginx -t
Si se informa algún error, regrese y vuelva a verificar su archivo antes de continuar.
Cuando esté listo, vuelva a cargar Nginx para realizar los cambios necesarios:
sudo systemctl reload nginx
Paso 5: Crear un archivo PHP para Probar la Configuración
Su paquete de LEMP debe estar completamente configurado. Podemos probarlo para validar que Nginx puede entregar correctamente los archivos .php
a nuestro procesador PHP.
Podemos hacerlo creando un archivo PHP de prueba en nuestra ro del documento. Abra un nuevo archivo llamado info.php
dentro de la root del documento en el editor de texto:
sudo nano /var/www/html/info.php
Escriba o pegue las siguientes líneas en el nuevo archivo. Este es un código PHP válido que arrojará información sobre nuestro servidor:
<?php
phpinfo();
AhoraCuando haya finalizado, guarde y cierre el archivo.
Ahora puede visitar esta página en su navegador web visitando el nombre de dominio de su servidor o la dirección IP pública seguido de /info.php
:
http://server_domain_or_IP/info.php
Debería ver una página web generada por PHP con información sobre su servidor:
Si ve una página que se ve así, ha configurado con éxito el procesamiento de PHP con Nginx.
Después de verificar que Nginx representa la página correctamente, lo mejor es eliminar el archivo que creó, ya que realmente puede dar a los usuarios no autorizados algunos consejos sobre su configuración que pueden ayudarlos a intentar entrar. Siempre puede regenerar este archivo si lo necesita más adelante.
Por ahora, elimine el archivo escribiendo:
sudo rm /var/www/html/info.php
Conclusión
Ahora debería tener una pila LEMP configurada en su servidor Ubuntu 16.04. Este tutorial le habra dado una muy buena base sobre el contenido web a sus visitantes.
Fuente. Artículo traducido y con muy ligeras modificaciones de: https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-debian