En nuestro tutorial anterior, discutimos cómo instalar la pila LAMP en Ubuntu 20.04 LTS servidor. En este tutorial, veremos cómo instalar Nginx, MySQL, PHP (pila LEMP) en la edición del servidor Ubuntu 20.04 LTS. LEMP es el acrónimo de L entrada, En gine-x, M ariaDB/M ySQL, P PS/P erl/P ytón.
Instalar Nginx, MySQL, PHP (pila LEMP) en Ubuntu 20.04 LTS
A los efectos de este tutorial, usaré la siguiente máquina de prueba:
- Sistema operativo :Servidor Ubuntu 20.04 LTS
- Dirección IP :192.168.225.52/24
Comencemos.
1. Instalar Nginx en Ubuntu
Ejecute el siguiente comando desde la Terminal para instalar el servidor web Nginx:
$ sudo apt install nginx
Después de instalar Nginx, verifique si el servicio Nginx se está ejecutando o no usando el comando:
$ sudo systemctl status nginx
Salida de muestra:
● 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 Fri 2020-05-29 10:13:47 UTC; 56s ago Docs: man:nginx(8) Main PID: 1349 (nginx) Tasks: 2 (limit: 2283) Memory: 4.4M CGroup: /system.slice/nginx.service ├─1349 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; └─1350 nginx: worker process May 29 10:13:46 ubuntuserver systemd[1]: Starting A high performance web server and a reverse proxy server... May 29 10:13:47 ubuntuserver systemd[1]: Started A high performance web server and a reverse proxy server.
Si ve un resultado como el anterior, el servicio Nginx se ha iniciado.
En caso de que el servicio Nginx aún no se haya iniciado, puede iniciarlo usando el comando:
$ sudo systemctl enable nginx
$ sudo systemctl start nginx
1.1 Permitir el servidor web Nginx a través del cortafuegos UFW
UFW , significa U ncomplicado F irw all, es un programa para administrar un firewall netfilter diseñado para ser fácil de usar. UFW está disponible por defecto en todas las versiones de Ubuntu.
De manera predeterminada, no se puede acceder al navegador web Nginx desde sistemas remotos si ha habilitado el firewall UFW en Ubuntu 20.04 LTS. Debe permitir el http y https puertos siguiendo los pasos que se indican a continuación.
Primero, veamos qué aplicaciones han instalado un perfil usando el comando:
$ sudo ufw app list
Salida de muestra:
Available applications: Nginx Full Nginx HTTP Nginx HTTPS OpenSSH
Como puede ver, las aplicaciones Nginx y OpenSSH tienen perfiles UFW instalados.
Si observa el “Nginx Full” perfil, verás que habilita el tráfico a los puertos 80 y 443 :
$ sudo ufw app info "Nginx Full"
Salida de muestra:
Profile: Nginx Full Title: Web Server (Nginx, HTTP + HTTPS) Description: Small, but very powerful and efficient web server Ports: 80,443/tcp
Ahora, ejecute el siguiente comando para permitir el tráfico HTTP y HTTPS entrante para este perfil:
$ sudo ufw allow in "Nginx Full"
Verá una salida similar a la siguiente:
Rules updated Rules updated (v6)
Si desea permitir el tráfico https, pero solo el tráfico http (80), ejecute:
$ sudo ufw app info "Nginx HTTP"
Avancemos y ejecutemos la página de prueba de Nginx.
Para hacerlo, abra su navegador web y vaya a http://localhost/ o http://Dirección IP/ .
Verá la página de bienvenida de Nginx como se muestra a continuación.
¡Felicidades! ¡El servidor Nginx está funcionando!
2. Instalar MySQL en Ubuntu
Para instalar MySQL en Ubuntu, ejecute:
$ sudo apt install mysql-server
Verifique si el servicio MySQL se está ejecutando o no usando el comando:
$ sudo systemctl status mysql
Salida de muestra:
● mysql.service - MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2020-05-29 10:31:56 UTC; 51s ago Main PID: 2288 (mysqld) Status: "Server is operational" Tasks: 39 (limit: 2283) Memory: 325.6M CGroup: /system.slice/mysql.service └─2288 /usr/sbin/mysqld May 29 10:31:49 ubuntuserver systemd[1]: Starting MySQL Community Server... May 29 10:31:56 ubuntuserver systemd[1]: Started MySQL Community Server.
Como puede ver en el resultado anterior, ¡Mysql se está ejecutando!
2.1 Configurar la contraseña del usuario administrativo (raíz) de la base de datos para Mysql
De forma predeterminada, MySQL raíz la contraseña de usuario está en blanco. No se recomienda utilizar una contraseña vacía para la cuenta administrativa de la base de datos. Debe proteger su servidor MySQL ejecutando el siguiente script:
$ sudo mysql_secure_installation
Se le preguntará si desea configurar "VALIDAR CONTRASEÑA" componente o no. Este componente permite a los usuarios configurar contraseñas seguras para las credenciales de la base de datos. Si está habilitado, verificará automáticamente la seguridad de la contraseña y obligará a los usuarios a establecer solo aquellas contraseñas que sean lo suficientemente seguras. Es seguro dejar esto deshabilitado . Sin embargo, debe usar una contraseña fuerte y única para las credenciales de la base de datos. Si no desea habilitar este componente, simplemente presione cualquier tecla para omitir la parte de validación de contraseña y continuar con el resto de los pasos.
Si su respuesta es Sí , se le pedirá que elija el nivel de validación de la contraseña.
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
Las validaciones de contraseña disponibles son bajas , medio y fuerte . Simplemente ingrese el número apropiado (0 para contraseña baja, 1 para contraseña media y 2 para contraseña segura) y presione la tecla ENTER.
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: 0
Ahora, ingrese la contraseña para el usuario root de MySQL. Tenga en cuenta que debe usar una contraseña para el usuario raíz de mysql según la política de contraseña que elija en el paso anterior. Si no habilitó el complemento, simplemente use cualquier contraseña fuerte y única de su elección.
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
Una vez que haya ingresado la contraseña dos veces, verá la seguridad de la contraseña (en nuestro caso, es 100 ). Si está bien para usted, presione Y para continuar con la contraseña proporcionada. Si no está satisfecho con la longitud de la contraseña, presione cualquier otra tecla y establezca una contraseña segura. Estoy de acuerdo con mi contraseña actual, así que elegí y .
Para el resto de preguntas, simplemente escriba y y pulsa ENTER. Esto eliminará al usuario anónimo, no permitirá que el usuario raíz inicie sesión de forma remota y eliminará la base de datos de prueba.
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y Success. Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y Success. By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y - Dropping test database... Success. - Removing privileges on test database... Success. Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y Success. All done!
¡Hecho! Hemos configurado la contraseña del usuario root de MySQL.
2.2 Cambiar el método de autenticación para el usuario root de MySQL
De forma predeterminada, el usuario raíz de MySQL está configurado para autenticarse mediante "auth_socket" complemento a partir de MySQL 5.7 y versiones más recientes en Ubuntu. Aunque mejora la seguridad, también complicará las cosas cuando acceda a su servidor de base de datos utilizando programas externos, por ejemplo, phpMyAdmin. Para solucionar este problema, debe cambiar el método de autenticación de auth_socket a "caching_sha2_password" o "mysql_native_password" .
A partir de la versión MySQL 8.0, el complemento de autenticación preferido y predeterminado es caching_sha2_password . El complemento de autenticación caching_sha2_password proporciona un cifrado de contraseña más seguro que el complemento mysql_native_password.
Para cambiar el complemento de autenticación, inicie sesión en su solicitud de MySQL usando el comando:
$ sudo mysql
Ejecute el siguiente comando en el indicador de mysql para encontrar el método de autenticación actual para todas las cuentas de usuario de mysql:
mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;
Salida de muestra:
+------------------+------------------------------------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+------------------------------------------------------------------------+-----------------------+-----------+ | debian-sys-maint | $A$005$=s%UO"�[email protected]>[email protected] | caching_sha2_password | localhost | | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost | | mysql.session | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost | | mysql.sys | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost | | root | | auth_socket | localhost | +------------------+------------------------------------------------------------------------+-----------------------+-----------+ 5 rows in set (0.00 sec)
Como puede ver, el usuario raíz de mysql usa auth_socket complemento para autenticación.
Para cambiar el complemento auth_socket a caching_sha2_password, ejecute el siguiente comando en el indicador de mysql. Si ha habilitado el complemento VALIDAR CONTRASEÑA, asegúrese de haber utilizado una contraseña segura según los requisitos de la política actual. Un fuerte debería consta de al menos 8 caracteres, incluida una letra mayúscula, una letra minúscula, un número y un carácter especial.
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'Password123#@!';
Reemplace "Contraseña123#@!" con una contraseña segura y única de su elección en el comando anterior.
Actualice los cambios usando el comando:
mysql> FLUSH PRIVILEGES;
Ahora verifique si el complemento de autenticación actual se cambió o no usando el comando:
mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;
Salida de muestra:
¡Bueno! Ahora el usuario raíz de myql puede autenticarse usando una contraseña para acceder a mysql shell.
Salga del indicador de mysql:
mysql> exit
Aunque el complemento caching_sha2_password proporciona un cifrado seguro mejorado, tiene algunos problemas de compatibilidad con las instalaciones existentes de MySQL. Para más detalles, consulte este enlace . Si se encontró con algún problema de compatibilidad, debe configurar "mysql_native_password" complemento como complemento de autenticación predeterminado.
Para cambiar a mysql_native_password complemento, ejecute el siguiente comando en el indicador mysql.
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Actualice los cambios usando el comando:
mysql> FLUSH PRIVILEGES;
Ahora verifique nuevamente si el método de autenticación ha cambiado o no usando el comando:
mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;
Salida de muestra:
Salga del indicador de mysql ingresando el siguiente comando:
exit
3. Instalar PHP en Ubuntu
Para instalar PHP, ejecute:
$ sudo apt-get install php-fpm php-mysql
Después de instalar PHP, debemos asegurarlo haciendo un simple cambio en php.ini archivo.
Para hacerlo, edite php.ini archivo usando su editor favorito:
$ sudo vi /etc/php/7.4/fpm/php.ini
Busque la siguiente línea:
;cgi.fix_pathinfo=1
Descoméntelo y cambie su valor de 1 a 0 (cero) .
cgi.fix_pathinfo=0
Guarde y cierre el archivo. Luego, reinicie el servicio PHP-FPM para que los cambios surtan efecto.
$ sudo systemctl restart php7.4-fpm
Verifique que el servicio PHP-FPM se esté ejecutando o no usando el comando:
$ sudo systemctl status php7.4-fpm
Salida de muestra:
● php7.4-fpm.service - The PHP 7.4 FastCGI Process Manager Loaded: loaded (/lib/systemd/system/php7.4-fpm.service; enabled; vendor preset: en> Active: active (running) since Fri 2020-05-29 10:40:45 UTC; 11s ago Docs: man:php-fpm7.4(8) Process: 10711 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /run/php/ph> Main PID: 10693 (php-fpm7.4) Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec" Tasks: 3 (limit: 2283) Memory: 7.0M CGroup: /system.slice/php7.4-fpm.service ├─10693 php-fpm: master process (/etc/php/7.4/fpm/php-fpm.conf) ├─10709 php-fpm: pool www └─10710 php-fpm: pool www May 29 10:40:44 ubuntuserver systemd[1]: Starting The PHP 7.4 FastCGI Process Manager... May 29 10:40:45 ubuntuserver systemd[1]: Started The PHP 7.4 FastCGI Process Manager.
3.1 Configurar Nginx para usar PHP-FPM
Necesitamos configurar Nginx para usar PHP-FPM.
Para hacerlo, edite el host virtual predeterminado de Nginx (bloque del servidor) /etc/nginx/sites-disponible/default archivo:
$ sudo vi /etc/nginx/sites-available/default
Busque la sección Servidor y configure el FQDN o la dirección IP de su servidor Ubuntu como se muestra a continuación. Y también, verifique dos veces si ha agregado el index.php línea. Todos los cambios se muestran en negrita.
[...] server { listen 80 default_server; listen [::]:80 default_server; [...] root /var/www/html; # Add index.php to the list if you are using PHP index index.php index.html index.htm index.nginx-debian.html; server_name 192.168.225.52; [...]
Aquí,
- escuchar 80; -> escuchar ipv4.
- escuchar [::]:80 servidor_predeterminado; -> escucha ipv6.
- index.php -> Agregue esto si usa PHP.
- raíz /var/www/html; -> Directorio raíz del documento Nginx.
- nombre_servidor 192.168.225.52; -> La dirección IP de nuestro servidor Ubuntu.
Luego, desplázate un poco hacia abajo y encuentra la "#ubicación ~ \.php$" sección.
Descomente y modifique las siguientes líneas como se muestra a continuación.
location ~ \.php$ { include snippets/fastcgi-php.conf; # # # With php-fpm (or other unix sockets): fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; # # With php-cgi (or other tcp sockets): # fastcgi_pass 127.0.0.1:9000; } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # location ~ /\.ht { deny all; } }
Consulte la siguiente captura de pantalla. Los cambios están marcados/subrayados con color rojo.
Guarde y salga del archivo.
Preste mucha atención al modificar fastcgi_pass directiva dentro de la ubicación ~ \.php$ cuadra. Debe mencionar el archivo de nombre correcto con lo que realmente está almacenado en el /var/run/php directorio en su servidor. Para verificarlo, ejecute:
$ ls /var/run/php/ php-fpm.sock php7.4-fpm.pid php7.4-fpm.sock
Como puede ver, el nombre del archivo es php7.4-fpm.sock . Asegúrese de haber mencionado el nombre correcto en esta directiva.
Verifique el archivo de configuración de Nginx para ver si hay errores de sintaxis usando el comando:
$ sudo nginx -t
Salida de muestra:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Si no ve ningún error, reinicie el servicio nginx para aplicar los cambios.
Para hacerlo, ejecute:
$ sudo systemctl restart nginx
Ahora, vamos a crear un archivo PHP de muestra para probar la configuración de PHP a través del navegador.
Para hacerlo, cree un archivo llamado "info.php" en la carpeta raíz del documento Nginx.
$ sudo vi /var/www/html/info.php
Agregue las siguientes líneas:
<?php phpinfo(); ?>
Guarde y salga del archivo. Reinicie el servicio nginx para aplicar los cambios.
$ sudo systemctl restart nginx
Luego, abra su navegador web y vaya a http://IP-address/info.php .
Verá los detalles de PHP.
¡Felicidades! ¡¡PHP está funcionando!!
3.2 Instalar módulos PHP
Para mejorar la funcionalidad de PHP, puede instalar algunos módulos PHP adicionales.
Para listar los módulos PHP disponibles, ejecute:
$ sudo apt-cache search php- | less
Salida de muestra:
Use las flechas y para moverse hacia arriba y hacia abajo entre los resultados. Para salir, escriba q .
Para encontrar los detalles de cualquier módulo php en particular, por ejemplo php-gd , ejecuta:
$ sudo apt-cache show php-gd
Para instalar un módulo php ejecute:
$ sudo apt-get install php-gd
Para instalar todos los módulos (aunque no es necesario), ejecute:
$ sudo apt-get install php*
No olvide reiniciar el servicio Nginx después de instalar cualquier módulo php.
¡Felicidades! Hemos configurado con éxito la pila LEMP en el servidor Ubuntu 20.04 LTS. Comience a implementar sitios web y aplicaciones web en su nueva pila web LEMP.
Leer a continuación:
- Instalar phpMyAdmin con LEMP Stack en Ubuntu 20.04 LTS