Recientemente os explicamos que estamos en proceso de migración a un nuevo VPS con Clouding.io. Uno de los pasos previos es realizar la instalación de un servidor web con Nginx, MariaDB y PHP para, más tarde, realizar la instalación de WordPress y mover nuestros proyectos; aunque esto último lo explicaremos en una tercera entrada.

Como diría Jack, vamos por partes.

¿Qué es un servidor LEMP?

El conjunto de piezas englobadas en el denominado servidor LEMP tienen como fin servir páginas y aplicaciones web dinámicas. El nombre es un acrónimo que describe los elementos que intervienen en su composición. Serían: el sistema operativo GNU/Linux (por lo que también se podría denominar GLEMP), un servidor web Nginx, una base de datos con Mysql/MariaDB y, por último, aunque no menos importante, PHP.

Cuando se creó esta combinación de herramientas el puesto de Nginx lo ocupaba Apache, denominándose, consecuentemente, LAMP (o GLAMP). Es muy posible que te suene más. Ocurre que Nginx demostró mejor rendimiento, así que ha terminado sustituyendo a Apache como standard. Aunque al leer la palabra Nginx no encontramos la letra «e», sí que se escucha al pronunciarla (sería «enyin-eks» trasladando su pronunciación a letras). La inclusión de la vocal, además, ayuda a pronunciar las siglas. Explicado esto, volvamos al tema principal…

Tal como indicábamos en el título, vamos a utilizar la distribución Ubuntu 18.04. Ya podemos empezar con los pasos de la instalación.

Requisitos previos a la instalación

Una vez tenemos nuestro nuevo VPS recién creado es muy recomendable deshabilitar el usuario ‘root‘ para el acceso remoto y habilitar otro con poderes de administración. Le llamaremos, por ejemplo,  ‘operador‘.

useradd operador

Le asignaremos una contraseña, a poder ser compleja. Herramientas como Pwgen nos ayudan a generar combinaciones adecuadas. O quizá KeePass, una aplicación que nos permite, además de generar buenas combinaciones, también administrarlas.

Añadimos el usuario al grupo ‘sudo’:

usermod -aG sudo operador

Deshabilitamos el acceso de ‘root’ vía SSH editando el fichero de configuración «/etc/ssh/sshd_config». De esta manera tendremos más que suficiente:

sed -i 's/PermitRootLogin yes/PermitRootLogin no/g' /etc/ssh/sshd_config

Reiniciamos el servicio ‘sshd’:

systemctl restart sshd

Hecho esto, para acceder al servidor de manera remota debemos utilizar el nuevo usuario llamado ‘operador’.

Lo ideal para entrar siempre es realizar un intercambio de llaves desde nuestro equipo doméstico. Podemos ver cómo hacerlo consultando este artículo, que escribí en su día: SSH sin contraseña en Linux.

Otras medidas interesantes pueden ser, permitir el acceso solo vía intercambio de llaves o cambiar el puerto por defecto del servicio SSH, que es el 22, por otro. Aquí te muestro la forma de hacerlo: Cómo cambiar el puerto 22 de ssh por otro puerto.

También podemos poner «palos en las ruedas» a los ataques de fuerza bruta mediante diccionario, instalando y habilitando el servicio Fail2ban.

Respecto a la memoria transaccional o SWAP, de momento dejaremos la que viene por defecto. Tenemos asignados 2 Gb de memoria volátil al VPS, más que de sobra para un proyecto como el nuestro. Si en algún momento queremos ampliarla siempre podemos seguir estas instrucciones: Añadir espacio SWAP a un VPS.

Instalar un servidor LEMP en Ubuntu 18.04

Después de hablar de los pasos previos vamos al lío. Lo primero será actualizar el sistema operativo e instalar el servidor web Nginx.

sudo apt update
sudo apt upgrade
sudo apt install nginx

En nuestro caso no tenemos habilitado el cortafuegos del sistema operativo, que en Ubuntu es UFW, ya que tenemos disponible el de Clouding.io. Debemos revisar que los puertos 80 (HTTP) y 443 (HTTPS) estén abiertos.

Una vez instalado el servidor web, deberíamos ver una página similar a la siguiente, al acceder vía URL, añadiendo la IP del servidor.

Tal y como se muestra en la imagen:

Nginx recién instalado

En lo que respecta a la base de datos vamos a utilizar MariaDB, utilizando los repositorios oficiales para Ubuntu, consultando su página web: downloads.mariadb.org

En nuestro caso debemos seguir los siguientes pasos:

sudo apt-get install software-properties-common
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
sudo add-apt-repository \
'deb [arch=amd64,arm64,ppc64el] http://tedeco.fi.upm.es/mirror/mariadb/repo/10.3/ubuntu bionic main'

Lo que hemos hecho ha sido importar la llave pública del proyecto y añadir los repositorios.

A continuación volvemos a actualizar e instalamos:

sudo apt update
sudo apt install mariadb-server

El siguiente paso es asegurar la instalación utilizando el comando:

mysql_secure_installation

que nos ayudará a asignar una contraseña al usuario super administración «root», eliminar las bases de datos innecesarias y deshabilitar el acceso remoto a las bases de datos.

Por último, en lo que respecta en la instalación del servidor web LEMP, queda pendiente PHP. Esta parte es muy importante, ya que Nginx de manera nativa no tiene soporte para PHP. Por lo que debemos instalar el paquete PHP-FPM, que tal y como indica su nombre si lo traducimos al castellano «Administrador de procesos FastCGI» y que servirá para procesar las solicitudes PHP para sean procesadas.

Además del paquete php-fpm también instalaremos otro paquete, llamado php-mysql, que permitirá que PHP se comunique con la base de datos.

Hemos de escribir:

sudo apt install php-fpm php-mysql

De esta manera tendremos la última versión de «php-fpm» que es la versión 7.2

Configurar un nuevo host virtual

Debemos indicar al servidor web que vamos a utilizar «php-fpm», esto, al igual que en el servidor web Apache, se configura en el fichero de configuración del host virtual. Esto es, si tenemos múltiples webs, cada una de ellas puede tener su propio fichero de configuración, en la ruta «/etc/nginx/sites-available»

Vamos a crear uno nuevo, llamado «nuevo.colaboratorio.net», de esta manera:

sudo nano /etc/nginx/sites-available/nuevo.colaboratorio.net

Con la siguiente configuración:

server {
        listen 80;
        root /var/www/html;
        index index.php index.html index.htm index.nginx-debian.html;
        server_name nuevo.colaboratorio.net;

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

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        }

        location ~ /\.ht {
                deny all;
        }
}

A diferencia de Apache, que para habilitar un nuevo host, utilizaríamos un comando, en Nginx debemos crear un nuevo enlace simbólico:

sudo ln -s /etc/nginx/sites-available/nuevo.colaboratorio.net /etc/nginx/sites-enabled/

Además deshabilitamos la configuración por defecto de Nginx:

sudo unlink /etc/nginx/sites-enabled/default

Podemos realizar un test de la configuración, de la siguiente manera:

sudo nginx -t

Si todo ha ido bien, el resultado será el siguiente:

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

Por último, que no menos importante, vamos a añadir un fichero llamado «info.php», con una configuración que nos permitirá validar la instalación del servidor web.

Los creamos:

sudo nano /var/www/html/info.php

Con esta configuración:

<?php

phpinfo();

?>

Una vez hecho esto ya podemos consultar la información vía web, con la URL

http://IP-o-nombre-del-servidor-web/info.php

En nuestro caso con el resultado:

Información suministrador por phpinfo

Conclusión

Hemos visto como realizar los pasos previos, para cumplir con los requisitos de la migración, de nuestro proyecto web, desde otro VPS al que hemos creado en Clouding.io Asegurando el servidor e instalando un servidor web con Nginx, MariaDB y PHP En el tercer y último capítulo de esta serie, veremos como mover un proyecto web entre servidores VPS.

0 0 votos
Article Rating
Subscribe
Notificarme de
guest

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

3 Comments
más antiguo
más nuevo más votado
Reacciones en línea
Ver todos los comentarios
Antonio

Muchas gracias. Cuál sería la guía para agregar phpMyAdmin a esta instalación?