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:
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:
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.
Muchas gracias. Cuál sería la guía para agregar phpMyAdmin a esta instalación?