Cómo instalar Nginx con PHP y MariaDB (LEMP Stack) con Opcache, Redis y Let’s Encrypt en Fedora 32

Página predeterminada de Nginx Fedora 32

Una pila de software LEMP es un grupo de software de código abierto que se instalan juntos para permitir que un servidor aloje sitios web y aplicaciones. es un acrónimo de Lentrada, miservidor nginx, METROySQL (usando MariaDB), y PAGSHP.

En esta guía, instalará una pila LEMP en un servidor basado en Fedora 32. También instalaremos phpMyAdmin, Redis, Opcache y Let’s Encrypt SSL.

requisitos previos

Un servidor que ejecuta Fedora 32.

Un usuario sudo no root.

Asegúrate de que todo esté actualizado.

$ sudo dnf upgrade

Pocos paquetes que tu sistema necesita.

$ sudo dnf install wget curl nano -y

Es posible que algunos de estos paquetes ya estén instalados en su sistema.

Deshabilite SELinux.

$ sudo setenforce 0

Configurar cortafuegos

El primer paso es configurar el cortafuegos. El servidor Fedora viene con el cortafuegos Firewalld preinstalado.

Compruebe si el cortafuegos se está ejecutando.

$ sudo firewall-cmd --state

Deberías obtener el siguiente resultado.

running

Establezca la zona predeterminada del cortafuegos en pública.

$ sudo firewall-cmd --set-default-zone=public

Compruebe los servicios/puertos permitidos actualmente.

$ sudo firewall-cmd --zone=public --permanent --list-services

Debería mostrar el siguiente resultado.

dhcpv6-client mdns ssh

Permitir puertos HTTP y HTTPS.

$ sudo firewall-cmd --zone=public --permanent --add-service=http
$ sudo firewall-cmd --zone=public --permanent --add-service=https

Vuelva a comprobar el estado del cortafuegos.

$ sudo firewall-cmd --zone=public --permanent --list-services

Deberías ver una salida similar.

dhcpv6-client http https mdns ssh

Vuelva a cargar el cortafuegos.

$ sudo systemctl reload firewalld

Instalar PHP

Fedora 32 por defecto viene con PHP 7.4 pero para tener un repositorio PHP actualizado, agregaremos el repositorio REMI.

Instale el repositorio REMI, que es el repositorio oficial de Fedora para instalar paquetes PHP.

$ sudo dnf -y install https://rpms.remirepo.net/fedora/remi-release-32.rpm

Habilite el repositorio remi y deshabilite el repositorio remi-modular. Esto habilita el repositorio requerido para instalar paquetes de PHP 7.4.

$ sudo dnf config-manager --set-enabled remi
$ sudo dnf config-manager --set-disabled remi-modular

Instale PHP 7.4 junto con algunos paquetes adicionales.

$ sudo dnf install -y php-cli php-fpm php-mysqlnd

Compruebe si PHP funciona correctamente.

$ php --version

Deberías ver una salida similar.

PHP 7.4.6 (cli) (built: May 12 2020 08:09:15) ( NTS ) 
Copyright (c) The PHP Group 
Zend Engine v3.4.0, Copyright (c) Zend Technologies 

Instalar MariaDB

MariaDB es un reemplazo directo de MySQL, lo que significa que los comandos para ejecutar y operar MariaDB son los mismos que para MySQL.

Fedora 32 viene por defecto con MariaDB 10.4, que es la última versión estable disponible a partir de ahora, así que la usaremos.

Para instalar MariaDB emita el siguiente comando.

$ sudo dnf install mariadb-server -y

Compruebe si MariaDB se instaló correctamente.

$ mysql --version

Debería ver el siguiente resultado.

mysql  Ver 15.1 Distrib 10.4.12-MariaDB, for Linux (x86_64) using  EditLine wrapper

Habilite e inicie el servicio MariaDB.

$ sudo systemctl enable mariadb
$ sudo systemctl start mariadb

Ejecute el siguiente comando para realizar la configuración predeterminada, como proporcionar una contraseña de root, eliminar usuarios anónimos, prohibir el inicio de sesión de root de forma remota y descartar tablas de prueba.

$ sudo mysql_secure_installation

Con MariaDB 10.4, ahora se le preguntará entre usar la contraseña de root o unix_socket enchufar. los unix_socket El complemento le permite iniciar sesión en MariaDB con sus credenciales de usuario de Linux. Se considera más seguro, aunque necesitará un nombre de usuario/contraseña tradicional para usar aplicaciones de terceros como phpMyAdmin. Nos limitaremos a usar el complemento unix_socket para este tutorial. Todavía puede usar phpMyAdmin a través de cualquier usuario que cree para sus bases de datos.

Al pulsar Enter se elige la opción por defecto (la que está en mayúsculas, Y en este caso).

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none): [PRESS ENTER]
OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] [PRESS ENTER]
Enabled successfully!
Reloading privilege tables..
 ... Success!

You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] [ANSWER n]
... skipping.

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] [PRESS ENTER]
 ... 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? [Y/n] [PRESS ENTER]
 ... Success!

By default, MariaDB 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? [Y/n] [PRESS ENTER]
 \- 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? [Y/n] [PRESS ENTER]
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

Eso es todo. La próxima vez que desee iniciar sesión en MySQL, use el siguiente comando

$ sudo mysql

Ingrese su contraseña de root cuando se le solicite.

Instalar Redis

Fedora 32 contiene la versión 5.0.8 del paquete Redis, pero el repositorio de Remi que instalamos anteriormente para PHP incluye la última versión de Redis (v6.0.1) al momento de escribir este tutorial.

Use el siguiente comando para instalar Redis y la extensión PHP Redis correspondiente.

$ sudo dnf install redis php-redis

Habilite el servicio Redis.

$ sudo systemctl enable --now redis

Configurar servidor Redis

Realicemos algunas configuraciones básicas en el servidor Redis.

Abra el archivo /etc/redis.conf con el editor Nano.

$ sudo nano /etc/redis.conf

Si desea que los clientes remotos se conecten a su instancia de Redis, busque la línea bind 127.0.0.1 y cámbiela por la siguiente.

bind 0.0.0.0

También puede cambiar el puerto predeterminado en el que escucha Redis de 6379 a un valor de su elección.

port 3458

Para configurar Redis como un servidor de caché, establezca los siguientes valores como se indica.

maxmemory 256mb
maxmemory-policy allkeys-lru

Esto le dice a Redis que elimine cualquier clave usando el algoritmo LRU cuando se alcance la memoria máxima de 256 MB. Puede establecer el valor de la memoria según sus requisitos y el servidor que está utilizando.

Puede establecer una contraseña para que cualquier cliente que necesite Redis deba autenticarse primero. Para hacer eso, establezca una contraseña usando la siguiente directiva.

requirepass  <AuthPassword>

Puede encontrar más directivas para cambiar en el archivo de configuración. Una vez que haya terminado, presione Ctrl + X e ingrese Y cuando se le solicite guardar el archivo.

Reinicie el servidor Redis para aplicar los cambios.

$ sudo systemctl restart redis

También necesitaremos agregar la regla en nuestro Firewall para permitir que Redis funcione.

$ sudo firewall-cmd --zone=public --permanent --add-port=6379/tcp
$ sudo firewall-cmd --reload

Deberá cambiar el valor en el comando anterior para que coincida con el puerto que eligió en el archivo de configuración anterior.

Instalar Nginx

Fedora 32 viene por defecto con la última versión estable de Nginx. (1.18.0).

Instala Nginx.

$ sudo dnf install nginx -y

Compruebe si funciona correctamente.

$ nginx -v

Debería ver el siguiente resultado según la versión de Nginx que elija instalar.

nginx version: nginx/1.18.0

Inicie y habilite Nginx.

$ sudo systemctl start nginx
$ sudo systemctl enable nginx

Abra la dirección IP de su servidor en un navegador para ver la siguiente página. Significa que Nginx está funcionando correctamente.

Página predeterminada de Nginx Fedora 32

Configurar Nginx

Configure directorios donde vivirán los bloques del servidor.

$ sudo mkdir /etc/nginx/sites-available
$ sudo mkdir /etc/nginx/sites-enabled

Cree el directorio donde vivirá su sitio.

$ sudo mkdir /var/www/example.com/html -p

Utilizando el -pags directiva crea directorios principales que no existían antes.

Ejecute el siguiente comando para agregar un archivo de configuración para su sitio.

$ sudo nano /etc/nginx/sites-available/example.com.conf

Pegue el siguiente código en el editor.

server {
  listen          *:80;
  server_name     example.com;
  root            /var/www/example.com/html;
  index           index.php index.html;

  location / {
    try_files   $uri $uri/ =404;
  }
    
  access_log /var/log/nginx/example.com.access.log;
  error_log /var/log/nginx/example.com.error.log;

  location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass  unix:/run/php-fpm/www.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_index index.php;
    include  fastcgi_params;
  }
}

Prensa Control + X para cerrar el editor y pulsar Y cuando se le solicite guardar el archivo.

Este archivo asume que alojaremos example.com en el directorio /var/www/html. Si no va a utilizar ningún dominio y va a configurar su servidor para que sea accesible solo a través de la dirección IP/localhost, deberá eliminar la configuración del bloque del servidor correspondiente del archivo nginx.conf; de lo contrario, se alterará el bloque del servidor que creará. .

Active este archivo de configuración vinculándolo al directorio de sitios habilitados.

$ sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/

Abra el archivo /etc/nginx/nginx.conf para editarlo.

$ sudo nano /etc/nginx/nginx.conf	

Pegue las siguientes líneas después de la línea include /etc/nginx/conf.d/*.conf

include /etc/nginx/sites-enabled/*.conf;
server_names_hash_bucket_size 64;

Cambie el valor de types_hash_max_size de 2048 a 4096.

types_hash_max_size 4096;

Prensa Control + X para cerrar el editor y pulsar Y cuando se le solicite guardar el archivo. Pruebe la configuración de Nginx.

$ sudo nginx -t

Debería ver el siguiente resultado que indica que su configuración es correcta.

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

Vuelva a cargar el servicio Nginx.

$ sudo systemctl reload nginx

Configurar PHP-FPM

Abra el archivo /etc/php-fpm.d/www.conf.

$ sudo nano /etc/php-fpm.d/www.conf

Necesitamos configurar el usuario/grupo de Unix de procesos PHP para nginx. Busque las líneas user=apache y group=apache en el archivo y cámbielas a nginx.

...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
...

Guarde el archivo presionando Control + X y entrando Y Cuando se le solicite.

Reinicie el proceso de PHP-fpm.

$ sudo systemctl restart php-fpm

Para probar su configuración de PHP, cree un archivo test.php en la carpeta html.

$ sudo nano /var/www/example.com/html/test.php

Agregue el siguiente contenido y guarde el archivo presionando Control + X y entrando Y Cuando se le solicite.

<?php phpinfo();

Inicie http:///test.php en su navegador web y debería ver lo siguiente.

Página de prueba de PHP

Instalar phpMyAdmin

Remi Repository lleva la última versión de phpMyAdmin, por lo que simplemente podemos instalarla usando el siguiente comando.

$ sudo dnf install phpmyadmin

Se instala en el directorio /usr/share/phpMyAdmin.

Configurar phpMyAdmin

Para que el servidor web de Nginx encuentre y sirva correctamente los archivos phpMyAdmin, necesitaremos crear un enlace simbólico desde su ubicación real al directorio de documentos raíz de Nginx.

Para hacer esto, ejecute el siguiente comando.

$ sudo ln -s /usr/share/phpmyadmin /var/www/example.com/html/phpmyadmin

Su instalación de phpMyAdmin está operativa. Para acceder a él, simplemente abra http://ejemplo.com/phpmyadmin.

Si obtiene errores de sesión de php, ejecute el siguiente comando para otorgar los permisos adecuados al directorio de sesión de PHP. Verifique la ruta de su sesión desde el archivo test.php que creamos anteriormente. Para nosotros está en /var/lib/php/session.

$ sudo chown -R nginx:nginx /var/lib/php/session

De forma predeterminada, esta ubicación predeterminada debe cambiarse, ya que es la ubicación más común que cualquier pirata informático puede ubicar su instalación de phpMyAdmin. Para hacer esto, ejecute el siguiente comando.

$ sudo mv phpmyadmin sm123

Básicamente, movimos nuestra ubicación de phpMyAdmin a la carpeta sm123. Para acceder a él, ahora tendrá que abrir http://ejemplo.com/sm123 en tu navegador.

Dado que estamos usando unix_authentication con MySQL aquí, no hay un usuario raíz para iniciar sesión a través de phpMyAdmin. Primero deberá crear un usuario de MySQL y otorgarle privilegios a las bases de datos para poder usar phpMyAdmin.

Configurar Opcaché

La instalación de phpMyAdmin desde el repositorio de Remi también instala Opcache. En caso de que no haya instalado phpMyAdmin y no quiera, simplemente puede instalar Opcache usando el siguiente comando.

$ sudo dnf install php-opcache	

Verifique que se haya instalado.

$ php -v
PHP 7.4.5 (cli) (built: Apr 14 2020 12:54:33) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.5, Copyright (c), by Zend Technologies

Para cambiar la configuración de Opcache, abra el archivo /etc/php.d/10-opcache.ini.

$ sudo nano /etc/php.d/10-opcache.ini

Las siguientes configuraciones deberían ayudarlo a comenzar a usar Opcache y generalmente se recomiendan como un buen rendimiento. Puede habilitar una configuración descomentándola eliminando ; en frente de eso.

opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60

Guarde el archivo presionando Control + X y entrando Y Cuando se le solicite.

Reinicie su servidor para aplicar la configuración.

$ sudo systemctl reload nginx

Instale SSL a través de Let’s Encrypt

SSL se ha convertido en una parte esencial de cualquier sitio web. Aquí instalaremos SSL utilizando el servicio Let’s Encrypt.

Para eso, primero, instale la herramienta Certbot.

$ sudo dnf install certbot-nginx

Generar los certificados.

$ sudo certbot --nginx -d example.com -d www.example.com -d phpmyadmin.example.com

Estamos creando certificados para ambos: nuestro sitio principal y el dominio phpMyAdmin.

Si es la primera vez que ejecuta certbot en su sistema, se le pedirá una dirección de correo electrónico y que acepte los términos del servicio. También se le preguntará si acepta compartir datos con la fundación EFF a lo que puede negarse. Después de hacerlo, certbot se comunicará con los servidores de Let’s Encrypt y ejecutará un desafío para verificar sus dominios.

Si eso tiene éxito, se le preguntará cómo manejar los redireccionamientos HTTPS.

Please choose whether HTTPS access is required or optional.
-------------------------------------------------------------------------------
1: Easy - Allow both HTTP and HTTPS access to these sites
2: Secure - Make all requests redirect to secure HTTPS access
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

Seleccione su opción y presione enter. Se crearán sus certificados y su configuración de Nginx se actualizará con la configuración de SSL.

Sus certificados están listos y puede abrir su sitio ahora yendo a https://ejemplo.com

Configuración de la renovación automática de SSL

Este es el último paso antes de terminar este tutorial. Para renovar el SSL, usaremos cron.

Necesitamos agregar una entrada a Cron usando el editor Crontab. Para abrir el editor crontab, ejecute el siguiente comando.

$ EDITOR=nano sudo crontab -e

EDITOR=nano delante del comando asegura que crontab abre el editor Nano para nosotros porque Fedora por defecto prefiere el editor VIM.

Pegue la siguiente línea en la parte inferior.

. . .
25 2 * * * /usr/bin/certbot renew --quiet

La parte 25 2 * * * de esta línea significa «ejecutar el siguiente comando a las 2:25 am, todos los días». Puede elegir cualquier momento.

Guarde el archivo presionando Control + X y entrando Y Cuando se le solicite.

El comando de renovación de Certbot comprobará todos los certificados instalados en el sistema y actualizará los que estén configurados para caducar en menos de treinta días. –quiet le dice a Certbot que no envíe información ni espere la entrada del usuario.

Este comando se ejecutará diariamente.

Conclusión

Eso es todo en este tutorial. Su configuración de LEMP está completa y puede comenzar a crear y alojar sus sitios web y aplicaciones.

Deja una respuesta

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