Instalar varias instancias de Drupal con Nginx en Ubuntu 20.04

Drupal es una plataforma libre, escalable y abierta que se utiliza para crear y gestionar el contenido de los sitios web. Cuenta con una gran comunidad y es utilizada por millones de personas y organizaciones de todo el mundo. Drupal proporciona una interfaz web sencilla y fácil de usar que te ayuda a crear una gran variedad de sitios web, desde sitios web personales hasta grandes sitios web impulsados por la comunidad.

En esta guía, te mostraremos cómo desplegar múltiples instancias de Drupal con Nginx en Ubuntu 20.04.

Requisitos previos

  • Un servidor con Ubuntu 20.04.
  • Dos nombres de dominio válidos apuntados con la IP de tu servidor.
  • Una contraseña de root configurada en el servidor.

Paso 1: Instalar las dependencias necesarias

En primer lugar, tendrás que actualizar los paquetes de tu sistema a la versión actualizada e instalar las dependencias necesarias en tu sistema. Puedes hacerlo con el siguiente comando:

apt-get update -y
apt-get install gnupg2 software-properties-common unzip git wget -y

Una vez instaladas todas las dependencias, puedes pasar al siguiente paso.

Paso 2: Instalar Nginx y MariaDB

Aquí vamos a alojar Drupal con Nginx. Así que Nginx debe estar instalado en tu servidor. Si no está instalado, puedes instalarlo con el siguiente comando:

apt-get install nginx -y

Después de instalar Nginx, tendrás que instalar la última versión de MariaDB en tu servidor. Por defecto, la última versión de MariaDB no está incluida en el repositorio por defecto de Ubuntu 20.04. Así que tendrás que añadir el repositorio de MariaDB a APT.

Primero, añade la clave GPG con el siguiente comando:

apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8

A continuación, añade el repositorio MariaDB con el siguiente comando:

add-apt-repository "deb [arch=amd64,arm64,ppc64el] http://mariadb.mirror.liquidtelecom.com/repo/10.4/ubuntu $(lsb_release -cs) main"

Una vez añadido el repositorio, actualiza el repositorio e instala la última versión de MariaDB con el siguiente comando

apt-get update -y
apt-get install mariadb-server -y

Una vez instalado el servidor MariaDB, puedes pasar al siguiente paso.

Paso 3: Instalar PHP 7.4

Drupal no soporta PHP 8.0. Así que tendrás que instalar PHP 7.4 en tu sistema. Puedes instalar la versión 7.4 de PHP con otras extensiones necesarias con el siguiente comando:

apt-get install php7.4 php7.4-fpm php7.4-gd php7.4-common php7.4-mysql php7.4-apcu php7.4-gmp php7.4-curl php7.4-intl php7.4-mbstring php7.4-xmlrpc php7.4-gd php7.4-xml php7.4-cli php7.4-zip -y

Una vez instalados todos los paquetes, edita el archivo php.ini y realiza algunos cambios:

nano /etc/php/7.4/fpm/php.ini

Cambia las siguientes líneas:

date.timezone = Asia/Kolkata
memory_limit = 256M
upload_max_filesize = 64M
max_execution_time = 600
cgi.fix_pathinfo = 0

Guarda y cierra el archivo y luego reinicia el PHP-FPM para aplicar los cambios:

systemctl restart php7.4-fpm

Paso 4: Crear la base de datos de Drupal

A continuación, tendrás que crear una base de datos y un usuario para ambas instancias de Drupal.

Primero, conéctate al MySQL con el siguiente comando:

mysql

Una vez conectado, crea una base de datos para ambas instancias de Drupal con el siguiente comando:

MariaDB [(none)]> create database drupal1db;
MariaDB [(none)]> create database drupal2db;

A continuación, crea un usuario de base de datos para ambas instancias de Drupal con el siguiente comando:

MariaDB [(none)]> create user drupal1user@localhost identified by 'password';
MariaDB [(none)]> create user drupal2user@localhost identified by 'password';

A continuación, concede todos los privilegios a ambas bases de datos de Drupal con el siguiente comando:

MariaDB [(none)]> grant all privileges on drupal1db.* to drupal1user@localhost identified by 'password';
MariaDB [(none)]> grant all privileges on drupal2db.* to drupal2user@localhost identified by 'password';

A continuación, vacía los privilegios y sal del MySQL con el siguiente comando:

MariaDB [(none)]> flush privileges;
MariaDB [(none)]> exit;

Una vez que hayas terminado, puedes pasar al siguiente paso.

Paso 5: Descargar Drupal

A continuación, deberás descargar la última versión de Drupal desde su sitio web oficial.

Primero, cambia el directorio a la raíz web de Nginx con el siguiente comando:

cd /var/www/html

A continuación, descarga la última versión de Drupal con el siguiente comando:

wget -q https://www.drupal.org/download-latest/tar.gz -O drupal-latest.tar.gz

A continuación, extrae el archivo descargado con el siguiente comando:

tar -xf drupal-latest.tar.gz

A continuación, copia el directorio extraído en drupal1 y drupal2:

cp -r drupal-9.1.5 drupal1
cp -r drupal-9.1.5 drupal2

A continuación, establece la propiedad adecuada con el siguiente comando:

chown -R www-data:www-data /var/www/html/drupal*

Una vez que hayas terminado, puedes pasar al siguiente paso.

Paso 6: Configurar Nginx

A continuación, tendrás que crear dos archivos de configuración de host virtual Nginx para cada instancia de Drupal.

Primero, crea un archivo de configuración de host virtual Nginx para la primera instancia de Drupal:

nano /etc/nginx/conf.d/drupal1.conf

Añade las siguientes líneas:

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

    location / {
    try_files $uri /index.php?$query_string;
    }

    location @rewrite {
               rewrite ^/(.*)$ /index.php?q=$1;
        }

    location ~ [^/]\.php(/|$) {
         include snippets/fastcgi-php.conf;
         fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
         include fastcgi_params;
    }

    location ~ ^/sites/.*/files/styles/ { # For Drupal >= 7
               try_files $uri @rewrite;
        }

    location ~ ^(/[a-z\-]+)?/system/files/ { # For Drupal >= 7
        try_files $uri /index.php?$query_string;
        }
}

Guarda y cierra el archivo cuando hayas terminado.

A continuación, crea un archivo de configuración del host virtual Nginx para la segunda instancia de Drupal:

nano /etc/nginx/conf.d/drupal2.conf

Añade las siguientes líneas:

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

    location / {
    try_files $uri /index.php?$query_string;
    }

    location @rewrite {
               rewrite ^/(.*)$ /index.php?q=$1;
        }

    location ~ [^/]\.php(/|$) {
         include snippets/fastcgi-php.conf;
         fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
         include fastcgi_params;
    }

    location ~ ^/sites/.*/files/styles/ { # For Drupal >= 7
               try_files $uri @rewrite;
        }

    location ~ ^(/[a-z\-]+)?/system/files/ { # For Drupal >= 7
        try_files $uri /index.php?$query_string;
        }
}

Guarda y cierra el archivo cuando hayas terminado y, a continuación, verifica que Nginx no tenga ningún error de sintaxis con el siguiente comando:

nginx -t

Deberías ver la siguiente salida:

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

A continuación, reinicia el servicio Nginx para aplicar los cambios:

systemctl restart nginx

También puedes comprobar el estado del Nginx con el siguiente comando:

systemctl status nginx

Deberías obtener la siguiente salida:

? nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2021-03-23 08:50:47 UTC; 6s ago
       Docs: man:nginx(8)
    Process: 19946 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 19959 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 19964 (nginx)
      Tasks: 2 (limit: 2353)
     Memory: 2.7M
     CGroup: /system.slice/nginx.service
             ??19964 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             ??19965 nginx: worker process

Mar 23 08:50:47 ubuntu2004 systemd[1]: Starting A high performance web server and a reverse proxy server...
Mar 23 08:50:47 ubuntu2004 systemd[1]: Started A high performance web server and a reverse proxy server.

Paso 7: Acceder a Drupal

Ahora, abre tu navegador web y escribe la URL http://drupal1.example.com o http://drupal2.example.com. Serás redirigido al asistente de instalación web de Drupal, como se muestra a continuación:

Elige la lengua

Selecciona tu idioma y haz clic en el botón Guardar y continuar. Deberías ver la siguiente página:

Selecciona el perfil de instalación

Selecciona el tipo de instalación estándar y haz clic en el botón Guardar y continuar. Deberías ver la siguiente página:

Configuración de la base de datos

Proporciona los detalles de tu base de datos y haz clic en el botón Guardar y continuar. Deberías ver la siguiente página:

Configuración del sitio

Ajustes del país

Proporciona la información de tu sitio y haz clic en el botón Guardar y continuar. Deberías ver el panel de control de Drupal en la siguiente página:

Sitio web Drupal

Conclusión

En el post anterior, has aprendido a desplegar múltiples instancias de Drupal con Nginx en un servidor Ubuntu 20.04. Ahora puedes desplegar cualquier número de instancias de Drupal en tu servidor. Sólo tienes que definir el nombre de dominio y la ruta de instalación de Drupal para cada nueva instancia de Drupal. No dudes en preguntarme si tienes alguna duda.

También te podría gustar...