Cómo instalar en Linux: NGINX MariaDB y PHP (LEMP)

Una buena alternativa a LAMP es LEMP (Linux Nginx MariaDB/MySQL PHP). Nginx es un servidor web/proxy inverso de alto rendimiento, en inglés se pronuncia engine X.
Como podemos ver hay que instalar 3 programas, empezaremos por Nginx. Este tutorial es para Ubuntu en todas sus versiones, al final del artículo están todos los comandos para instalar LEMP en distribuciones basadas en RedHat (Fedora, Centos…).

Como instalar Nginx

Entraremos a nuestro servidor por SSH y ejecutaremos el siguiente comando:

# apt-get install nginx
Podemos comprobar que Nginx esté funcionado ejecutando:

# service nginx status
Deberíamos ver algo tipo:

● nginx.service – A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Thu xxxx-xx-xx xx:xx:xx CEST; 17s ago

Una vez instalado nginx si entramos a la IP de nuestro servidor desde una navegador deberíamos ver la página:

LEMP-Nginx

Como instalar MariaDB

Para instalar MariaDB ejecutaremos el siguiente comando:

# apt-get install mariadb-server mariadb-client
Podemos comprobar que MariaDB esté funcionado ejecutando:

# service mysql status
Deberíamos ver algo tipo:

● mysql.service – LSB: Start and stop the mysql database server daemon
Loaded: loaded (/etc/init.d/mysql; bad; vendor preset: enabled)
Active: active (running) Fri xxxx-xx-xx xx:xx:xx CEST; 17s ago

Ahora procederemos a configurar MariaDB ejecutando el código:

# /usr/bin/mysql_secure_installation
En el primer paso nos preguntará por la contraseña de “root” para MariaDB, pulsaremos la tecla enter ya que no hay contraseña definida.
El siguiente paso nos preguntará si queremos asignar una contraseña para el usuario “root”. Es recomendable usar contraseña.
El siguiente paso nos preguntará si queremos eliminar usuario anónimo, aquí indicaremos que Sí queremos borrar los datos.
El siguiente paso nos preguntará si queremos desactivar que el usuario “root” se conecte remotamente, aquí indicaremos que Sí queremos desactivar acceso remoto para usuario “root”.
El siguiente paso nos preguntará si queremos eliminar la base de datos “test”, aquí indicaremos que Sí queremos borrar las base de datos “test”.
El siguiente paso nos preguntará si queremos recargar privilegios, aquí indicaremos que Sí.

Como instalar PHP5 o PHP7

Para instalar PHP ejutaremos uno de estos 2 comandos:

PHP5:# apt install php5.6 php5.6-cli php5.6-mysql
PHP7:# apt install php php-cli php-mysql

Para que funcione el PHP deberemos configurar Nginx
vi /etc/nginx/sites-available/default, después de:
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
Añadiremos:
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# With php7.0-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# With php7.0-fpm:
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}

Una vez editado reniciamos Nginx
# service nginx restart

Para comprobar que funciona PHP crearemos un fichero /var/www/html/test.php con el código:
<?php
phpinfo();
?>

Al entrar en un navegador https://IP-servidor/test.php deberíamos ver algo como:

LEMP-PHP

Comandos para Centos, Red Hat o Fedora

Nginx:
# yum install epel-release
# yum install nginx
# systemctl start nginx.service
# systemctl enable nginx.service

MariaDB:
# yum install mariadb-server mariadb
# systemctl start mariadb.service
# systemctl enable mariadb.service
# mysql_secure_installation

PHP:
# yum install php php-mysql php-fpm php-cli
# systemctl start php-fpm.service

To write a comment on this article, fill out the form below. Fields marked with an asterisk (*) are required.

Visitors comments
  1. Comentario (Publicado por edier88)

    Hi everyone, in my PC the repositories didn’t find any package with name: “php-mysql”. The terminal says something like this:
    “No match for argument: php-mysql”

    So I typed the command:
    # dnf search php- | grep mysql

    It found that the real package name nowadays is “php-mysqlnd”, so try to install this instead of “php-mysql”:

    # dnf install php-mysqlnd

    Reply

  2. Comentario (Publicado por Javilondo)

    Hola, gracias por el tutorial. Yo estaba siguiendo pero me atoré en una parte:
    El nginx funciona bien, pero cuando intento ver el test.php me aparece el error “502 Bad gateway”, así que probé poner un test.htm con el contenido “prueba” y si lo muestra a través del navegador, luego intenté incrustar el script de en el index de nginx, pero no hay cambios en el navegador, entonces pensé que tal vez nginx no es capaz de renderizar scripts php y me imaginé que el archivo test.php lo interpretaba como un archivo vacío, así que borré el contenido de test.php y lo dejé en blanco, para luego volver a acceder y me volvió a salir el mismo error de “502 Bad gateway”, entonces al tener la misma respuesta confirmé que nginx interpreta a test.php como un archivo vacío al no poder renderizar php.
    ¿Cuál pudo haber sido el error si seguí el tutorial al pie de la letra?
    Bueno, lo único distinto que hice fue usar el editor nano en lugar de vi para editar el archivo /etc/nginx/sites-available/default, pero no creo que eso tenga influencia ¿o si?
    ¿Qué puedo hacer para corregirlo?
    Uso Linux Mint 19.1 (equivalente a Ubuntu 18.04)
    Y las versiones de los paquetes instalados son: nginx=1.14.0, mariadb=10.1 y php=7.2

    Reply

    • Comentario (Publicado por cldn-kb-admin)

      Hola,

      Revisa el log de Nginx para ver que error está dando.

      Un saludo,
      Clouding.

      Reply