Cómo instalar Nginx con PHP y MariaDB (LEMP Stack) en Fedora 31

La pila de software LEMP es un grupo de software de código abierto que se instala conjuntamente para que un servidor pueda alojar sitios web y aplicaciones. Es un acrónimo de Linux, servidor ENginx, MySQL(utilizando aquí MariaDB) y PHP.

En esta guía, instalarás una pila LEMP en un servidor basado en Fedora 31. También instalaremos PHPMyAdmin, Redis y Opcache.

Requisitos previos

  • Un servidor con Fedora 31.

  • Un usuario sudo no root.

  • Asegúrate de que todo está actualizado.

    $ sudo dnf upgrade
    
  • Pocos paquetes que tu sistema necesite.

    $ sudo dnf install wget curl nano -y
    

    Algunos de estos paquetes pueden estar ya instalados en tu sistema.

  • Desactiva SELinux.

    $ sudo setenforce 0
    

Configurar el cortafuegos

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

Comprueba si el cortafuegos se está ejecutando.

$ sudo firewall-cmd --state

Deberías obtener la siguiente salida.

running

Configura la zona por defecto del cortafuegos como pública.

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

Comprueba los servicios/puertos permitidos actualmente.

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

Debería mostrar la siguiente salida.

dhcpv6-client mdns ssh

Permite los puertos HTTP y HTTPS.

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

Vuelve 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

Vuelve a cargar el cortafuegos.

$ sudo systemctl reload firewalld

Instala PHP

Fedora 31 viene por defecto con PHP 7.3. Pero queremos instalar PHP 7.4 para lo que necesitamos añadir el repositorio REMI.

Instala 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-31.rpm

Habilita los repositorios remi y remi-php74 y desactiva el repositorio remi-modular. Esto habilita el repositorio necesario para instalar los paquetes de PHP 7.4.

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

Instala PHP 7.4 junto con algunos paquetes adicionales.

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

Comprueba si PHP funciona correctamente.

$ php --version

Deberías ver una salida similar.

PHP 7.4.3 (cli) (built: Feb 18 2020 11:53:05) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies

Instalar MariaDB

MariaDB es un sustituto directo de MySQL, lo que significa que los comandos para ejecutar y hacer funcionar MariaDB son los mismos que los de MySQL.

Fedora 31 viene por defecto con MariaDB 10.3, pero también podemos instalar la última 10.4 (disponible en el momento de escribir este tutorial). Para ello necesitamos añadir el repositorio oficial de MariaDB.

Crea MariaDB.repo en el directorio /etc/yum.repos.d/.

$ sudo nano /etc/yum.repos.d/MariaDB.repo

Añade el siguiente código en él.

# MariaDB 10.4 Fedora repository list
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.4/fedora31-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando te lo pida.

Para instalar MariaDB emite los siguientes comandos

$ sudo dnf install MariaDB-server -y

Fíjate en el comando. Si quieres instalar la copia (10.3) del repositorio de Fedora, debes usar sudo dnf install mariadb-server pero para la versión 10.4, usamos sudo dnf install MariaDB-server.

Comprueba si MariaDB se ha instalado correctamente.

$ mysql --version

Deberías ver la siguiente salida.

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

Activa e inicia el servicio MariaDB.

$ sudo systemctl enable mariadb
$ sudo systemctl start mariadb

Ejecuta el siguiente comando para realizar la configuración por defecto, como dar una contraseña de root, eliminar los usuarios anónimos, no permitir el inicio de sesión de root de forma remota y eliminar las tablas de prueba.

$ sudo mysql_secure_installation

Con MariaDB 10.4, ahora se te preguntará entre utilizar la contraseña de root o el plugin unix_socket. El plugin unix_socket te permite iniciar sesión en MariaDB con tus credenciales de usuario de Linux. Se considera más seguro, aunque necesitarás un nombre de usuario/contraseña tradicional para utilizar aplicaciones de terceros como PhpMyAdmin. En este tutorial nos limitaremos a utilizar el plugin unix_socket. Puedes seguir utilizando PhpMyAdmin a través de cualquier usuario específico que crees para tus bases de datos.

Al pulsar Intro 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]

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 quieras entrar en MySQL, utiliza el siguiente comando

$ sudo mysql

Introduce tu contraseña de root cuando se te pida.

Instalar Nginx

Fedora 31 incluye por defecto la versión estable de Nginx (1.16.1). Si quieres instalar la versión principal de Nginx, sigue nuestra guía de construcción de Nginx desde el código fuente. Asegúrate de obtener la última versión de Nginx y las dependencias mencionadas en el tutorial. El resto de las instrucciones seguirán siendo las mismas (cambia los nombres de las rutas en el comando ./configure ). Para este tutorial, nos quedaremos con la versión estable de Nginx.

Instala el servidor Nginx.

$ sudo dnf install nginx -y

Comprueba si funciona correctamente.

$ nginx -v

Deberías ver la siguiente salida.

nginx version: nginx/1.16.1

Inicia y activa Nginx.

$ sudo systemctl start nginx
$ sudo systemctl enable nginx

Abre la dirección IP de tu servidor en un navegador para ver la siguiente página. Esto significa que Nginx está funcionando correctamente.

Página de prueba de Fedora Nginx

Configurar Nginx

Configura los directorios donde vivirán los bloques del servidor.

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

Crea el directorio donde vivirá tu sitio.

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

El uso de la directiva -p crea directorios padre que antes no existían.

Ejecuta el siguiente comando para añadir un archivo de configuración para tu sitio.

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

Pega 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;
  }
}

Este archivo asume que vamos a alojar example.com en el directorio /var/www/html. Si no vas a utilizar ningún dominio y vas a configurar tu servidor para que sea accesible sólo a través de la dirección IP/localhost, tendrás que eliminar las configuraciones de bloque de servidor correspondientes del archivo nginx.conf, ya que de lo contrario se estropeará el bloque de servidor que vas a crear.

Activa este archivo de configuración vinculándolo al directorio sites-enabled.

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

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

$ sudo nano /etc/nginx/nginx.conf	

Pega 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;

Cambia el valor de types_hash_max_size de 2048 a 4096.

types_hash_max_size 4096;

Pulsa Ctrl + X para cerrar el editor y pulsa Y cuando se te pida guardar el archivo. Prueba la configuración de Nginx.

$ sudo nginx -t

Deberías ver la siguiente salida que indica que tu 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

Vuelve a cargar el servicio Nginx.

$ sudo systemctl reload nginx

Configurar PHP-FPM

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

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

Necesitamos establecer el usuario/grupo Unix de los procesos PHP a nginx. Busca las líneas user=apache y group=apache en el archivo y cámbialas 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
...

Además, establece los permisos de propiedad del socket unix a nginx y elimina el ; que hay delante.

listen.owner = nginx
listen.group = nginx

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando te lo pida.

Reinicia el proceso PHP-fpm.

$ sudo systemctl restart php-fpm

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

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

Añade el siguiente contenido y guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

<?php phpinfo();

Inicia http://<yourserverip>/test.php en tu navegador web y deberías ver lo siguiente.

Página de información de PHP

Conclusión

Eso es todo por este tutorial. Tu configuración de LEMP está completa y puedes empezar a crear y alojar tus sitios web y aplicaciones.

También te podría gustar...