En este curso partiremos del supuesto de que ya tienes descargado y activado WSL2 con una distribución de Ubuntu, tal y como explicamos en el video Cómo Instalar LAMP usando WSL2 en Windows 10 (1era Parte), por lo que nos centraremos en el resto de pasos necesarios para la configuración de un servidor LINUX, NGINX, MARIADB Y PHP (LEMP), que te permitirá ejecutar tus desarrollos locales de Drupal o de lo que necesites.


Paso 1 - Instalación de Nginx
Comenzaremos por abrir nuestra consola mejorada de Windows y seleccionar la distribución con la que vamos a trabajar, que en mi caso será la de Ubuntu que podremos descargar desde la tienda de Windows.

Ahora que tenemos la distribución de Ubuntu funcionando, podemos comenzar con las instalaciones.
Pero como en toda distribución de Linux, antes de cualquier instalación, nos aseguraremos de que se hayan descargado las últimas actualizaciones de todos los paquetes, y como se trata de descarga e instalación de archivos, utilizaremos sudo delante para asegurarno de que no habrá ningún fallo.
sudo apt update && sudo apt upgrade

En cuanto terminen las actualizaciones, podremos comenzar con la instalación de Nginx. Así que escribiremos en la consola el siguiente comando:
sudo apt install nginx
Daremos clic en la pregunta que nos presenta durante el proceso hasta que termine.

Si abrimos el navegador y escribimos localhost, comprobaremos que tenemos funcionando nuestro servidor correctamente, ya que nos muestra la página de bienvenida.

Paso 2 - Instalación y configuración de MariaDB
En este momento continuaremos con la descarga y configuración de Mariadb, que sustituyó Mysql para gestionar nuestras bases de datos.
Con este propósito escribiremos el siguiente comando en la consola y comenzará la descarga:
sudo apt install mariadb-server

Al finalizar la instalación, lo recomendable es ejecutar un script de seguridad preinstalado en MySQL. Este script eliminará algunas configuraciones predeterminadas inseguras y bloqueará el acceso a su sistema de base de datos. Inicie el script interactivo ejecutando el siguiente comando:
sudo mysql_secure_installation
A continuación daremos clic en ENTER a todas las preguntas que nos vayan apareciendo en la pantalla.

En una de las preguntas nos ofrece la oportunidad de cambiar los datos de acceso para nuestro usuario ROOT, podremos decidir si añadir una nueva contraseña o dar enter para que conserve la que habíamos definido previamente.

Una vez terminado el proceso de configuración, aprovecharemos para añadir el administrador específico de mariadb que nos permite todas las operaciones relacionadas con bases de datos, tablas y usuarios de mariadb, para ello escribiremos el siguiente comando en la consola:
sudo mariadb
Dentro de mariadb añadiremos los datos de acceso para nuestro administrador, tal y como lo haríamos con mysql:
GRANT ALL ON *.* TO 'admin'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

Para terminar con la configuración, ejecutaremos la limpieza de la caché de mariadb y saldremos del servidor.

El último paso será comprobar que el servidor de base de datos funciona correctamente, para lo que escribiremos lo siguiente:
sudo systemctl status mariadb
Si todo es correcto, veremos en la consola la información con los detalles que nos lo confirma.

Paso 3 - Instalación de PHP 8.4
Con el fin de complementar nuestra instalación, sobre todo en el caso de que pensemos trabajar con Drupal 11, necesitamos descargar y activar PHP y las librerías complementarias requeridas por Drupal.
Lista de paquetes PHP existentes
Antes de comenzar con la descarga de PHP volveremos a ejecutar los comandos de actualización de paquetes de Ubuntu.
Ubuntu no suele incluir las últimas versiones de PHP en sus repositorios predeterminados. Por lo que vamos a utilizar el repositorio de Ondřej Surý, que proporciona los paquetes de PHP más recientes.
Agregar ondrej/php PPA/DPA
Antes, tendremos que descargar sus dependencias, por lo que añadiremos el siguiente comando en la consola:
sudo apt install software-properties-common -y

Ahora podemos añadir el repositorio que nos permitirá la instalación de PHP 8.4 en nuestro servidor, por lo que añadiremos el siguiente comando, para hacerlo:
sudo add-apt-repository ppa:ondrej/php
Al añadir el repositorio, nos lanzará una alerta con el mensaje que nos indica, que al hacer clic en ACEPTAR, se nos descargará la versión de php correspondiente con el servidor en el que estamos trabajando, que puede ser Apache2 o Nginx, así que daremos clic en ENTER para completar el proceso.

En cuanto demos clic en ENTER, se ejecutará el resto del proceso necesario y quedará añadido el repositorio correspondiente con Nginx que es nuestro caso.

Ya que hemos añadido un nuevo repositorio, es recomendable ejecutar otra vez el comando de actualización de paquetes antes de continuar.
sudo apt update

Una vez terminada la actualización de los paquetes, podemos proceder con la instalación de Php 8.4 y las extensiones más habituales. Con este propósito escribiremos el siguiente comando en la consola:
sudo apt install php8.4 php8.4-fpm php8.4-cli php8.4-mysql php8.4-curl php8.4-xml php8.4-mbstring php8.4-zip php8.4-bcmath php8.4-soap php8.4-intl php8.4-readline -y

En cuanto termine la descarga, podremos comprobar que se ha instalado correctamente con el comando siguiente:
php -v
El resultado que deberíamos ver en pantalla será parecido al siguiente:

Configurar PHP-FPM para Nginx
Como estamos trabajando con Nginx, nos aseguraremos de que actualmente está ejecutandose PHP-FPM para Nginx, escribiendo lo siguiente:
sudo systemctl status php8.4-fpm
Esto deberá imprimir en pantalla el resumen que nos permite comprobar que el resultado coincide con lo que esperamos.

Si por algún motivo no está ejecutándose, escribiremos el siguiente comando que pondrá php-fpm en marcha:
sudo systemctl start php8.4-fpm
Comprobación final
Con todo lo anterior funcionando, crearemos una carpeta en la que alojaremos nuestro sitio web dentro de Nginx.
sudo mkdir /var/www/drupal.localhost

A continuación, asigne la propiedad del directorio con la variable de entorno $USER, que hará referencia a su usuario actual del sistema:
sudo chown -R $USER:$USER /var/www/drupal.localhost

Luego, abriremos un nuevo archivo de configuración en el directorio sites-available de Nginx con su editor de línea de comandos preferido.
sudo nano /etc/nginx/sites-available/drupal.localhost

Y en su interior añadiremos el siguiente código de configuración para Nginx:
server { listen 80; server_name drupal.localhost; root /var/www/drupal.localhost; index index.php index.html; location / { try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php8.4-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
Comprobaremos que la configuración de Nginx funciona correctamente escribiendo el comando:
sudo nginx -t

Si nos devuelve un mensaje OK, reiniciamos el servidor para que se guarden los cambios:
sudo systemctl reload nginx

Ahora comprobaremos que se ejecuta correctamente php dentro de nuestro sitio, para esto crearemos un archivo info.php con el siguiente código:
echo "<?php phpinfo();" | sudo tee /var/www/drupal.localhost/info.php

Con el archivo creado, visitaremos nuestro navegador escribiendo el dominio que hemos definido en el archivo de configuración para Nginx:
http://drupal.localhost/info.php
Para nuestra sorpresa, a pesar de haber reiniciado el servidor para que se guardaran los cambios, nos presenta una página no encontrada, por lo que tendremos que realizar algunos ajustes.

Nos moveremos a la carpeta “/etc/nginx/sites-available/”, donde guardamos nuestro archivo de configuración para el sitio y ejecutaremos el ls para comprobar que otros archivos existen.

En su interior, veremos que está el archivo default, que podemos utilizar como guía cuando comenzamos a trabajar con nginx, pero que en nuestro caso no nos hace falta, ya que tenemos nuestro archivo personalizado.
Así que lo eliminaremos y volveremos a reiniciar el servidor nginx:

Una vez eliminado el archivo, al intentar reiniciar el servidor, nos devuelve un error, ya que necesita que exista un archivo con el nombre default para funcionar.
Si ejecutamos nuevamente el comando ls, confirmaremos que sólo tenemos nuestro archivo personalizado, por lo que tendremos que renombrarlo para que todo se ejecute correctamente.

En cuanto renombramos nuestro archivo de configuración con el nombre default, si reiniciamos el servidor, podremos volver al navegador y tendremos la respuesta correcta.

Al refrescar el navegador, se mostrarán correctamente los valores correspondientes a php 8.4, por lo que ya podremos trabajar con Drupal o Wordpress en nuestro entorno local de Windows con WSL2.
