Cómo instalar LEMP (Linux, Nginx, MySQL, PHP) en Ubuntu 16.04
Se denomina LEMP a un grupo de software de código abierto que se instalan en un servidor para alojar sitios y aplicaciones web dinámicas. El término es el acrónimo que representa un sistema operativo Linux con un servidor Nginx, con almacenamiento en una base de datos MySQL y de contenido dinámico procesado con PHP. En esta guía te mostraré cómo instalar LEMP en un servidor con Ubuntu 16.04.
Pre-requisitos
Antes de comenzar, debes tener configurada una cuenta de usuario con privilegios administrativos en un servidor con Ubuntu 16.04. Puedes aprender cómo configurar este tipo de usuario siguiendo los pasos del tutorial: Configuración inicial del servidor de Ubuntu. Una vez que tengas el usuario configurado estás listo para seguir los siguientes pasos.
Instalar Nginx
Nginx es un moderno y eficiente servidor web que te permitirá mostrar las páginas web de tu sitio a los diferentes visitantes.
Si es la primera vez que usas la sesión debes comenzar actualizando la base de datos de paquetes del servidor y luego instalar Nginx:
1 2 |
$ sudo apt-get update $ sudo apt-get install nginx |
En Ubuntu 16.04, Nginx es configurado para comenzar a funcionar al terminar la instalación. Si estás utilizando el firewall ufw, que recomendamos en el tutorial de la configuración inicial, debes permitir las conexiones de Nginx. Para hacerlo basta con teclear en la consola:
1 |
$ sudo ufw allow 'Nginx HTTP' |
Puedes verificar que en efecto el firewall esta permitiendo las conexiones del servidor así:
1 2 3 4 5 6 7 8 9 10 |
$ sudo ufw status Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6) |
Para comprobar que Nginx está instalado y corriendo debes escribir la dirección IP pública de tu servidor en tu navegador web. Si no sabes cuál es la dirección IP pública de tu servidor puedes utilizar este tip para encontrarla.
1 |
http://ip_publica_del_servidor |

Página de bienvenida de Nginx
Si puedes ver una página similar a la de la imagen has instalado Nginx correctamente.
Instalar MySQL
Ya tienes el servidor web configurado y corriendo, ahora debes instalar MySQL. Este software, se encarga de gestionar, organizar y facilitar el acceso a las bases de datos en tu servidor. Toda la información de tus sitios será guardada en una de estas bases de datos. Para instalarlo teclea lo siguiente:
1 |
$ sudo apt-get install mysql-server |
Durante la instalación, el servidor te pedirá que selecciones y confirmes una contraseña para el usuario “root” de MySQL. Esta es una cuenta administrativa en MySQL con privilegios aumentados. Esta cuenta es similar a la cuenta de “root” para el propio servidor (sin embargo, la que estamos configurando ahora es una cuenta específica de MySQL).
Una vez completada la instalación, debes ejecutar algunos comandos adicionales para configurar y asegurar tu servidor MySQL:
Configurar y asegurar la instalación de MySQL
Debes ejecutar el script de seguridad para eliminar algunas configuraciones peligrosas por defecto y bloquear un poco el acceso al servidor de base de datos. Ejecuta el script escribiendo el siguiente comando:
1 |
$ sudo mysql_secure_installation |
VALIDATE PASSWORD PLUGIN
.
1 2 3 4 5 6 |
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: |
¿Qué hace realmente el script de seguridad?
El script de seguridad impedie que el servidor MySQL acepte aquellas contraseñas consideradas como no seguras. Si la contraseña no cumple con los requisitos de la validación, será rechazada con un error.
En caso de responder “y” verás algo como esto:
1 2 3 4 5 6 7 |
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 |
Selecciona el nivel de seguridad asociado a las contraseñas teniendo en cuenta las consideraciones comentadas anteriormente, donde «0»es el nivel más leve y «2» es el más fuerte.
A continuación, te preguntará si deseas cambiar la contraseña de root. Si deseas mantener tu contraseña, escribe “n” de “no”. Para el resto de las preguntas, puedes pulsar “y” y luego “ENTER” para aceptar los valores predeterminados.
En este punto, el sistema de gestión de bases de datos está instalado y configurado y puedes seguir adelante.
Instalar PHP
Ya has logrado instalar Nginx para servir las páginas web y MySQL para guardar y administrar las bases de datos. Sin embargo, aún no tienes ningún software que genere el contenido dinámico. Es hora de instalar PHP para que se encargue de esto.
Nginx no contiene un procesador de PHP nativo, por lo cual debes instalar php-fpm
y decirle al servidor web que pase todas las llamadas PHP a este software. Puedes instalar php-fpm
y aprovechar este mismo paso para instalar un paquete de ayuda que le permita a PHP comunicarse con MySQL. Ejecuta el siguiente comando en la consola:
1 |
$ sudo apt-get install php-fpm php-mysql |
Configurar el procesador de PHP
Ya tienes instalado los componentes necesarios. Ahora es preciso hacer algunos cambios en la configuración para hacer la instalación mucho más segura.
Abre el archivo de configuración de php-fpm
en un editor de texto. Yo utilizaré el editor nano por comodidad, pero puedes usar el que desees.
1 |
$ sudo nano /etc/php/7.0/fpm/php.ini |
Lo que debes buscar en este archivo es el parámetro cgi.fix_pathinfo
. Por defecto esta opción viene comentada (“;”) y su valor es «1». Eso es extremadamente inseguro, ya que esa opción le indica a PHP que ejecute cualquier archivo que encuentre en caso de no existir el archivo que se le pide al servidor. En otras palabras, implica darles la posibilidad a los usuarios de ejecutar archivos PHP que no tengan permitido ejecutar.
Para deshabilitar esta opción debes buscar la propiedad, descomentarla (borrar el «;») y ponerla a «0». Debería quedar así:
1 2 3 4 5 6 7 8 9 10 11 12 |
... ; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP's ; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok ; what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Setting ; this to 1 will cause PHP CGI to fix its paths to conform to the spec. A setting ; of zero causes PHP to behave as before. Default is 1. You should fix your scripts ; to use SCRIPT_FILENAME rather than PATH_TRANSLATED. ; http://php.net/cgi.fix-pathinfo cgi.fix_pathinfo=0 ... |
Cierra y guarda el archivo cuando termines la edición (ctrl + x
, luego «y" y
luego ENTER
).
Para que los cambios surtan efecto, es preciso que reinicies el procesador de PHP escribiendo:
1 |
$ sudo systemctl restart php7.0-fpm |
Configurar Nginx para que utilice php-fpm
Lo que falta es decirle a Nginx que utilice el procesador de PHP para el contenido dinámico. Esto lo puedes hacer editando los bloques del servidor (estos son muy similares a los virtual hosts de Apache). Abre el archivo de configuración bloque por defecto de Nginx escribiendo:
1 |
$ sudo nano /etc/nginx/sites-available/default |
El archivo de configuración que verás es muy similar a este (nota que te lo muestro sin comentarios):
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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; } } |
Los cambios que debes hacer son los siguientes:
- Primero debes agregar
index.php
como primer valor de la lista en la directivaindex.
Así los archivosindex.php
serán servidos cuando se llame al directorio. - Debes modificar la directiva
server_name
para que apunte a la dirección ip de tu servidor o a tu dominio. - Para poder utilizar el procesador de PHP debes descomentar el segmento del archivo que captura las peticiones PHP. Sería el bloque
location ~\.php$
. - También debes descomentar el bloque relacionado con los archivos
.htaccess
. Nginx no procesa estos archivos, por lo que es mejor evitar que se muestren por accidente.
Estos cambios están resaltados en el ejemplo que te muestro a continuación:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
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 <span class="crayon-c">dirección_IP_del_servidor</span>; 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 termines de modificar el archivo, salva y cierra para retornar a la consola.
Ahora debes comprobar que no existan errores de sintaxis en el archivo de configuración escribiendo:
1 |
$ sudo nginx -t |
Si te muestra algún error, edita nuevamente el archivo para corregirlo. Es indispensable que hagas esto antes de continuar.
Cuando esté listo, recarga Nginx para que todos los cambios surtan efecto:
1 |
$ sudo systemctl reload nginx |
Probar PHP en el Servidor Web
Tu ambiente LEMP ya está listo, solo te resta asegurarte de que Nginx está sirviendo correctamente los archivos .php
. Para que php-fpm pueda interpretar el archivo, tienes que guardarlo en la raíz del servidor WEB. En Ubuntu 14.04 o superior, este directorio se encuentra en /var/www/html/
.
Crea un nuevo archivo llamado info.php
con un editor de texto:
1 |
$ sudo nano /var/www/html/info.php |
Escribe o pega el siguiente código en el nuevo archivo. Esta función muestra información relevante sobre tu servidor:
1 2 3 |
<?php phpinfo(); ?> |
Cuando termines guarda y cierra el archivo.
Puedes ahora probar si tu servidor web es capaz de visualizar el contenido generado por un script PHP. Para visualizar los resultados, solo tienes que escribir en la barra de direcciones de tu navegador web:
1 2 |
http://<span class="crayon-c">dirección_IP_del_servidor</span>/info.php |
Si logras ver una página como esta, entonces Nginx está procesando los archivos .php
como se esperaba:

Archivo de información de PHP
Después de verificar que Nginx sirve la página correctamente, es preciso que elimines este archivo, ya que este expone información sensible sobre tu servidor a los usuarios no autorizados. Siempre puedes regenerarlo si lo necesitas en un futuro. Para eliminar el archivo escribe lo siguiente:
1 |
$ sudo rm /var/www/html/info.php |
Punto final
A partir de aquí, tienes muchas opciones para continuar. Básicamente has instalado una plataforma que te permitirá alojar la mayoría de los sitios y aplicaciones web existentes. Recuerda que hasta aquí, aún no hay nada que mostrar en tu servidor salvo la página de configuración de PHP.
Dejar un comentario
¿Quieres unirte a la conversación?Siéntete libre de contribuir