Cómo instalar LEMP en Ubuntu 18.04
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.