LINUX

Cómo instalar LEMP en Ubuntu 18.04

instalar lemp stack ubuntu

LEMP es una pila de componentes muy similar a la LAMP clásica, excepto que el servidor web Apache reemplazado por Nginx pronunciado Motor-x, explicando el MI’ en LEMP. Nginx es un servidor proxy inverso de código abierto para HTTP, HTTPS y para algunos otros protocolos que también funciona como equilibrador de carga, caché HTTP y servidor web (servidor de origen). Puede vincular la base de datos MySql o MariaDB, pero usaremos MySql en este tutorial para la base de datos.

Este tutorial le mostrará los pasos para instalar LEMP en su servidor Ubuntu 18.04.

Paso 1- Instala y configura el servidor web Nginx

Si inicia su servidor Ubuntu 18.04 por primera vez, asegúrese de actualizar la caché de los paquetes

# apt update

Ahora puedes instalar Nginx

# apt install nginx
Reading state information... Done
The following additional packages will be installed:
 fontconfig-config fonts-dejavu-core libfontconfig1 libgd3 libjbig0 libjpeg-turbo8 libjpeg8 libnginx-mod-http-geoip libnginx-mod-http-image-filter
 libnginx-mod-http-xslt-filter libnginx-mod-mail libnginx-mod-stream libtiff5 libwebp6 libxpm4 nginx-common nginx-core

Puedes comprobar el estado del servidor web

# systemctl status nginx
● 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 Sun 2018-06-10 04:51:51 UTC; 2min 0s ago
     Docs: man:nginx(8)
...
...

Ahora asegúrese de que nginx se inicie al mismo tiempo que el sistema si se reinicia

# systemctl enable nginx.service
Synchronizing state of nginx.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable nginx

Ahora, si tiene su firewall UFW en ejecución, deberá permitir las conexiones a Nginx. Diferentes aplicaciones pueden registrar sus perfiles con UFW después de la instalación, como Nginx, para que pueda verificarlo como se muestra a continuación.

# ufw app list
Available applications:
 Nginx Full
 Nginx HTTP
 Nginx HTTPS
 OpenSSH

Puedes habilitarlo con el nombre y el protocolo a usar (http o https)

# ufw allow 'Nginx HTTP'
Rule added
Rule added (v6)

Ahora puede verificar el servicio permitido en su firewall como se muestra a continuación

# ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
Nginx HTTP                 ALLOW       Anywhere                  
Postfix                    ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Nginx HTTP (v6)            ALLOW       Anywhere (v6)             
Postfix (v6)               ALLOW       Anywhere (v6)

Ahora puede verificar su servidor web en su navegador

Paso 2- Instale y configure la base de datos MySql

Ahora puede instalar su administración de base de datos MySql en su Ubuntu 18.04

# apt install mysql-server
Reading package lists... Done
Building dependency tree 
Reading state information... Done
The following additional packages will be installed:
 libaio1 libcgi-fast-perl libcgi-pm-perl libencode-locale-perl libevent-core-2.1-6 libfcgi-perl libhtml-parser-perl libhtml-tagset-perl
.....
.....

Luego, ejecute los siguientes comandos para proteger el servidor MySql. le preguntará si desea configurar el VALIDAR CONTRASEÑA PLUGIN para establecer una contraseña segura de root de mysql

# mysql_secure_installation

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

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: y

Le mostrará tres niveles de seguridad de la contraseña. Elija el más adecuado para usted, pero asegúrese de tenerlo en cuenta para evitar algún error de acceso.

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

Ahora puede ingresar la contraseña raíz de la base de datos

Please set the password for root here.

New password: 

Re-enter new password: 

Estimated strength of the password: 100 
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y

Se le solicitarán algunas otras preguntas de seguridad:

  • ¿Eliminar usuarios anónimos? (Presione y | Y para Sí, cualquier otra tecla para No): Y
  • ¿Deshabilitar el inicio de sesión de root de forma remota? (Presione y | Y para Sí, cualquier otra tecla para No): Y
  • ¿Eliminar la base de datos de prueba y acceder a ella? (Presione y | Y para Sí, cualquier otra tecla para No): Y
  • ¿Recargar tablas de privilegios ahora? (Presione y | Y para Sí, cualquier otra tecla para No): Y

Ahora puede conectarse a su base de datos con el comando

# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 5
Server version: 5.7.22-0ubuntu18.04.1 (Ubuntu)

Pero debe notar que todavía hay algunas brechas de seguridad en nuestra base de datos porque, en los sistemas Ubuntu que ejecutan MySQL 5.7 (y versiones posteriores), el raíz El usuario de MySQL está configurado para autenticarse usando el auth_socket plugin de forma predeterminada en lugar de con una contraseña. Autentica a los clientes que se conectan desde el host local a través del archivo de socket Unix. Puedes comprobar tu versión de MySql

# mysql --version
mysql Ver 14.14 Distrib 5.7.22, for Linux (x86_64) using EditLine wrapper

Ahora puede verificar el método de autenticación de cada una de sus cuentas de usuario de MySQL. Primero, conéctese a la base de datos

# mysql

Tenga en cuenta que no le pidió la contraseña raíz de la base de datos como la hemos configurado anteriormente. Significa que todos los que accedan a su servidor pueden editar su base de datos. Ahora verifique el método de autenticación

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;
+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             |                                           | auth_socket           | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *4A9F410D01A83957975233C9B87881861B0CDF9C | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

Puede ver que el método de autenticación del usuario de la base de datos raíz no es la contraseña. Puedes cambiarlo como se muestra a continuación

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your-db-root-password';
Query OK, 0 rows affected (0.00 sec)

Ahora descarga los privilegios

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

Ahora puede verificar si el método de autenticación ha cambiado

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;
+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             | *BCF4F28E525ED7EE4664FFFF4DAE13EC14A6ABE1 | mysql_native_password | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *4A9F410D01A83957975233C9B87881861B0CDF9C | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+

Ahora puedes salir

mysql> exit
Bye

Vuelva a verificar para iniciar sesión en su base de datos mysql solo con el comando mysql

# mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

Este mensaje le dice lo que está mal. Significa que probablemente tenga una contraseña configurada para el usuario raíz de la base de datos y necesite ingresarla con el comando

# mysql --password
Enter password:

o

# mysql -u root -p
Enter password:

En el segundo comando, observe que el -u root indica el usuario de la base de datos (raíz) a utilizar para la conexión a la base de datos. Significa que si tienes Paul o John usuario, puede usarlo en lugar de raíz.

Ahora su base de datos está más protegida.

Paso 3: instale PHP y configure las opciones de PHP-FPM

Como Nginx no contiene procesamiento PHP nativo, tenemos que instalar php-fpm (FastCGI Process Manager) y php-mysql para permitir que PHP se comunique con la base de datos MySQL.

apt install php-fpm php-mysql
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  libsodium23 php-common php7.2-cli php7.2-common php7.2-fpm php7.2-json php7.2-mysql php7.2-opcache php7.2-readline
Suggested packages:
  php-pear

Puedes comprobar la versión de tu php

# php --version
PHP 7.2.5-0ubuntu0.18.04.1 (cli) (built: May 9 2018 17:21:02) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
 with Zend OPcache v7.2.5-0ubuntu0.18.04.1, Copyright (c) 1999-2018, by Zend Technologies

Ahora abra el archivo predeterminado de PHP-FPM para editar el siguiente contenido

# vim /etc/php/7.2/fpm/php.ini
cgi.fix_pathinfo=0
date.timezone = Africa/Douala

guarda el archivo y reinicia php-fpm

# systemctl restart php7.2-fpm

Dependiendo de la versión de Nginx y PHP que instale, es posible que deba configurar manualmente la ubicación del socket PHP al que se conectará Nginx. Entonces, enumere el contenido del directorio /var/run/php/

# ls /var/run/php/
php7.2-fpm.pid php7.2-fpm.sock

Podemos ver que el enchufe es php7.2-fpm.sock. Ahora podemos abrir el archivo de configuración del sitio Nginx para usar PHP para contenido dinámico y debemos indicar el archivo de socket.

# https://wiki.debian.org/Nginx/DirectoryStructure
#
# In most cases, administrators will remove this file from sites-enabled/ and
# leave it as reference inside of sites-available where it will continue to be
# updated by the nginx packaging team.
#
# This file will automatically load configuration files provided by other
# applications, such as Drupal or WordPress. These applications will be made
# available underneath a path with that package name, such as /drupal8.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##

# Default server configuration
#
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 www.linoserver.com;

        location / {
                try_files $uri $uri/ =404;
        }    

        location ~ .php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php7.2-fpm.sock;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }

        # redirect server error pages to the static page /50x.html
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
                root /var/www/html;
        }
        location ~ /.ht {
                deny all;
        }    
}

Ahora puede verificar la sintaxis del archivo de configuración de Nginx y hacer que el buen socket PHP se indique en el archivo

# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Ahora puede crear un archivo php para verificar la configuración

# vim /var/www/html/info.php
<?php
phpinfo();

Ahora puedes comprobar tu configuración

Ahora puede eliminar el archivo de prueba php.

Leer también

Configurar Nginx lleva algo de tiempo, pero vale la pena y también es fácil configurarlo para alojar sus aplicaciones web. Ahora tiene todos los componentes necesarios para configurar LEMP en su servidor Ubuntu 18.04.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar