Cómo instalar Drupal CMS con Nginx en Rocky Linux
Drupal es un sistema de gestión de contenidos web gratuito y de código abierto escrito en PHP y distribuido bajo la Licencia Pública General GNU. Drupal proporciona una sólida herramienta de gestión de contenidos con sofisticadas API para la publicación multicanal.
Drupal es uno de los CMS más utilizados en Internet, empleado por al menos el 14% de los 10.000 sitios web más importantes de Internet, y se utiliza en sitios de empresas globales, gobiernos, educación e instituciones. Drupal proporciona un sistema altamente escalable, integrado con aplicaciones digitales, y puede utilizarse para crear multisitios para diferentes organizaciones con soporte multilingüe.
En este tutorial, aprenderás a configurar el CMS (Sistema de Gestión de Contenidos) Drupal con la Pila LEMP en el servidor Linux Rocky. También aprenderás a poner en marcha Drupal en Rocky Linux con el modo de refuerzo SELinux y el Firewalld activado.
Requisitos previos
Para comenzar con esta guía, necesitarás algunos de los siguientes requisitos:
- Un servidor Rocky Linux – Este ejemplo utiliza el Rocky Linux 8.x con el nombre de host‘drupal-server‘.
- Un usuario no root con privilegios de administrador sudo/root.
- Un nombre de dominio apuntando a la dirección IP del servidor Rocky Linux – especialmente cuando estás en el entorno de producción.
Configurar repositorios
La pila LEMP (Nginx, MariaDB/MySQL y PHP-FPM) es un grupo de software de código abierto para alojar aplicaciones web. En Rocky Linux, la mayoría de los paquetes de la Pila LEMP están disponibles en repositorios de terceros.
En el primer paso, añadirás y habilitarás dos repositorios en tu sistema. Añadirás el repositorio EPEL que proporciona paquetes adicionales para sistemas operativos basados en RHEL, y el repositorio REMI que proporciona múltiples versiones de paquetes PHP.
Ejecuta el siguiente comando para añadir el repositorio EPEL a tu sistema Rocky Linux. Cuando se te pida confirmación, introduce y y pulsa INTRO.
sudo dnf install epel-release
Ahora ejecuta el siguiente comando dnf para añadir el repositorio REMI para el Rocky Linux 8.4.
sudo dnf install dnf-utils http://rpms.remirepo.net/enterprise/remi-release-8.rpm
Introduce y y pulsa ENTER para continuar y añadir el repositorio Remi.
Por último, ejecuta el siguiente comando dnf para verificar la lista de repositorios disponibles en tu sistema. Deberías ver que se han añadido dos repositorios adicionales EPEL y REMI al sistema Rocky Linux.
sudo dnf repolist
Instalar dependencias de paquetes
Drupal es un CMS flexible y potente que puede instalarse con cualquier servidor web como Apache2/httpd, Nginx o IIS Microsoft. Además, Drupal es compatible con múltiples RDBMS, como MariaDB/MySQL, PostgreSQL y SQLite. Para otras bases de datos como Microsoft SQL Server y MongoDB, puedes utilizar ambas mediante módulos comunitarios.
Ahora instalarás las dependencias de los paquetes LEMP Stack para Drupal. Instalarás Nginx a través del repositorio EPEL, instalarás MariaDB desde el appstream, y los paquetes PHP 8.1 desde el repositorio REMI.
En primer lugar, restablece y habilita el módulo PHP desde el repositorio REMI mediante el comando dnf que aparece a continuación. En este ejemplo, habilitarás un módulo para PHP 8.1, que es compatible con la última versión de Drupal.
sudo dnf module reset php sudo dnf module enable php:remi-8.1
Cuando se te solicite, introduce y para confirmar y habilitar el repositorio REMI de PHP 8.1 y pulsa INTRO para continuar.
A continuación, utiliza el comando dnf para instalar los paquetes básicos de la pila LEMP.
sudo dnf install nginx mariadb-server php php-fpm php-cli php-devel php-mbstring php-gd php-xml php-curl php-mysqlnd php-pdo php-json php-opcache php-pear php-pecl-apcu php-pecl-crypto
Introduce y y pulsa ENTER cuando se te pida confirmación.
Además, introduce y cuando se te pida confirmación para añadir la clave GPG para algunos repositorios.
Una vez instalados los paquetes LEMP Stack, puedes utilizar el siguiente comando systemctl para iniciar los servicios Nginx, MariaDB y PHP-FPM. Además, habilitarás todos esos servicios para que se ejecuten automáticamente en el arranque.
sudo systemctl start nginx mariadb php-fpm sudo systemctl enable nginx mariadb php-fpm
Ahora verás un resultado como el siguiente: el LEMP Stack debería estar ejecutándose en tu sistema Rocky Linux y todos los servicios para el LEMP Stack están habilitados.
Configurar Firewalld
Firewalld es el cortafuegos por defecto en los sistemas operativos basados en RHEL, incluido Rocky Linux. Se recomienda ejecutar Drupal o cualquier aplicación web con un cortafuegos habilitado, especialmente en el entorno de producción.
Ahora añadirás los puertos HTTP y HTTPS al cortafuegos para permitir que los clientes accedan a tu instalación de Drupal.
Ejecuta el siguiente comando firewall-cmd para añadir los servicios HTTP y HTTPS al firewalld.
sudo firewall-cmd --add-service=http --permanent sudo firewall-cmd --add-service=https --permanent
Ahora recarga el firewalld para aplicar los nuevos cambios. A continuación, comprueba la lista de servicios habilitados en el firewalld.
sudo firewall-cmd --reload sudo firewall-cmd --list-services
Deberías obtener los servicios HTTP y HTTPS añadidos al firewalld.
Configurar el servidor MariaDB
En este paso, empezarás a configurar la base de datos MariaDB que se utilizará para Drupal. Empezarás asegurando la implementación de MariaDB, y luego crearás una nueva base de datos y un nuevo usuario para la instalación de Drupal.
Antes de empezar, ejecuta el siguiente comando para verificar el servicio MariaDB y asegurarte de que se está ejecutando.
sudo systemctl status mariadb
A continuación se muestra la salida cuando el servicio MariaDB se está ejecutando.
A continuación, ejecuta el siguiente comando para asegurar la instalación del servidor MariaDB. Esta línea de comandos‘mysql_secure_installation‘ la proporcionan los paquetes de MariaDB que te ayudan a asegurar la instalación.
sudo mysql_secure_installation
Ahora deberían hacerte algunas preguntas relacionadas con la configuración del servidor MariaDB:
- La instalación por defecto de MariaDB viene sin contraseña, pulsa ENTER cuando te pida la contraseña.
- Ahora introduce Y para configurar la contraseña raíz de MariaDB. A continuación, escribe la nueva contraseña para MariaDB y repite la contraseña.
- Introduce Y para eliminar el usuario anónimo de tu instalación de MariaDB.
- Vuelve a introducir Y cuando se te pida para desactivar el inicio de sesión remoto para el usuario raíz de MariaDB.
- Introduce Y para eliminar la prueba de base de datos por defecto de tu MariaDB.
- Por último, introduce Y para recargar los privilegios de las tablas y aplicar los nuevos cambios.
Tras asegurar la implementación de MariaDB, a continuación configurarás una nueva base de datos y un nuevo usuario para Drupal.
Accede al shell de MySQL/MariaDB a través del usuario root con el comando mysql que se indica a continuación.
sudo mysql -u root -p
Ejecuta las siguientes consultas para crear una nueva base de datos y un nuevo usuario para Drupal. En este ejemplo, crearás la base de datos drupaldb con el usuario drupal@localhost. Además, asegúrate de cambiar la contraseña predeterminada de la base de datos.
CREATE DATABASE drupaldb; CREATE USER drupal@localhost IDENTIFIED BY 'password'; GRANT ALL ON drupaldb.* TO drupal@localhost WITH GRANT OPTION; FLUSH PRIVILEGES;
A continuación, ejecuta las siguientes consultas para verificar los privilegios del usuario MariaDB drupal@localhost. Verás que el usuario MariaDB drupal@localhost tiene acceso y privilegios a la base de datos drupaldb.
SHOW GRANTS FOR drupal@localhost;
Ahora ejecuta la consulta‘exit‘ o‘quit‘ para salir del intérprete de comandos MariaDB.
Instalación de la extensión PECL: uploadprogress
El uploadprogress es una extensión que será utilizada por Drupal para mostrar una barra de progreso. El uploadprogress se puede instalar a través del repositorio PECL (PHP Extension Community Library).
Ahora instalarás la extensión uploadprogress desde el repositorio PECL y la habilitarás en tu instalación PHP.
Para empezar, ejecuta el siguiente comando para asegurarte de que el comando‘pecl’ está disponible en tu sistema. Si‘pecl’ está disponible, deberías ver la ruta completa del archivo binario‘pecl‘.
which pecl
Ahora ejecuta el comando ‘pecl‘ siguiente para instalar la extensión uploadprogress.
sudo pecl install uploadprogress
Cuando comience la instalación, deberías ver una salida como la siguiente:
A continuación, ejecuta el siguiente comando para crear un nuevo archivo de configuración‘/etc/php.d/uploadprogress.ini‘, y habilita la extensión uploadprogress.
cat <<EOF | sudo tee /etc/php.d/uploadprogress.ini ; configuration for php uploadprogress module ; priority 15 extension=uploadprogress.so EOF
Por último, reinicia el servicio PHP-FPM para aplicar los nuevos cambios. El PHP-FPM se está ejecutando ahora con la extensión adicional uploadprogress habilitada.
sudo systemctl restart php-fpm
Configurar PHP-FPM
Ahora establecerás la configuración básica de PHP-FPM a través del archivo‘/etc/php.ini ‘ y configurarás un pool PHP-FPM específico para Drupal.
Modifica el archivo ‘/etc/php.ini’ utilizando el siguiente editor nano.
sudo nano /etc/php.ini
Cambia la configuración por defecto como se indica a continuación. Además, asegúrate de cambiar la opción date.timezone con tu entorno.
memory_limit = 512M upload_max_filesize = 60M max_execution_time = 300 date.timezone = Europe/Stockholm
Guarda el archivo y sal del editor cuando hayas terminado.
A continuación, copia la configuración por defecto del pool PHP-FPM ‘/etc/php-fpm.d/www.conf‘ en ‘/etc/php-fpm.d/drupal.conf’. A continuación, modifica la nueva configuración del pool ‘/etc/php-fpm.d/drupal.conf’ utilizando el editor nano.
sudo cp /etc/php-fpm.d/www.conf /etc/php-fpm.d/drupal.conf sudo nano /etc/php-fpm.d/drupal.conf
Cambia el nombre por defecto a ‘[drupal]‘ y el usuario y grupo por defecto a‘nginx‘. Además, asegúrate de cambiar el archivo sock del listado para el pool PHP-FPM de ‘drupal’ a ‘/run/php-fpm/drupal.sock’.
[drupal] user = nginx group = nginx listen.owner = nginx listen.group = nginx listen = /run/php-fpm/drupal.sock
Guarda el archivo y sal del editor cuando hayas terminado.
Ahora reinicia el servicio PHP-FPM mediante el siguiente comando systemctl. A continuación, comprueba el estado del servicio PHP-FPM.
sudo systemctl restart php-fpm sudo systemctl status php-fpm
Deberías recibir una salida como la siguiente – El servicio PHP-FPM se está ejecutando.
A continuación, ejecuta el siguiente comando para crear un nuevo archivo PHPINFO‘/usr/share/nginx/html/info.php‘.
cat <<EOF | sudo tee /usr/share/nginx/html/info.php <?php phpinfo(); ?> EOF
Por último, abre el navegador web y visita la dirección IP del servidor seguida de la ruta ‘/info.php’ (es decir: http: //192.168.5.100/info.php). Deberías obtener información detallada sobre PHP
Descargar el código fuente de Drupal
En este punto, ya has terminado la configuración del servidor de bases de datos MariaDB y PHP-FPM para la instalación de Drupal. A continuación, descargarás la última versión de Drupal en tu servidor.
En primer lugar, mueve el directorio de trabajo actual a ‘/tmp’ y descarga la última versión de Drupal mediante el comando wget como se indica a continuación. Deberías ver el archivo‘drupal.tar.gz‘ una vez finalizado el proceso de descarga.
cd /tmp wget https://www.drupal.org/download-latest/tar.gz -O drupal.tar.gz
A continuación, extrae el archivo ‘drupal.tar.gz’ utilizando el comando tar y mueve el directorio extraído a‘/var/www/drupal‘, que se utilizará como instalación para Drupal.
tar -xvf drupal.tar.gz mv drupal-* /var/www/drupal
Por último, ejecuta el siguiente comando para cambiar la propiedad y el permiso del directorio de instalación de Drupal‘/var/www/drupal‘. El propietario debe ser el usuario y grupo‘nginx‘, para que el servidor web Nginx pueda leer y acceder al código fuente de Drupal. Y para el permiso, debe ser‘755‘.
sudo chown -R nginx:nginx /var/www/drupal/ sudo chmod -R 755 /var/www/drupal/
Configurar SELinux
Después de descargar el código fuente de Drupal, lo siguiente será configurar SELinux para Drupal. Descargarás la herramienta de gestión SELinux en tu servidor y configurarás el etiquetado para el código fuente de Drupal y reglas adicionales para Nginx.
Ejecuta el siguiente comando dnf para instalar el paquete‘policycoreutils-python-utils‘ para gestionar SELinux en tu sistema.
sudo dnf install policycoreutils-python-utils
Cuando se te solicite, introduce y para confirmar la instalación y pulsa INTRO para continuar.
A continuación, ejecuta el siguiente comando para configurar el etiquetado del código fuente de Drupal.
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/drupal(/.*)?" sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/drupal/sites/default/settings.php' sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/drupal/sites/default/files'
sudo restorecon -Rv /var/www/drupal
Ejecuta el siguiente comando para permitir que el servidor web Nginx acceda a determinados servicios. Para la instalación de Drupal, debes permitir que Nginx acceda a los servicios de red y correo.
sudo setsebool -P httpd_can_sendmail on sudo setsebool -P httpd_can_network_connect on
Ahora que has descargado el código fuente de Drupal y configurado la propiedad correcta al usuario y grupo‘nginx‘, configurado el permiso correcto a 755, y configurado el SELinux para Drupal.
Configurar el servidor web Nginx
Ahora que has terminado algunas configuraciones del servidor de base de datos MariaDB y PHP-FPM. Además, has descargado el código fuente de Drupal y configurado el SELinux. En el siguiente paso, configurarás los bloques del servidor Nginx para tu dominio.
Antes de empezar, asegúrate de que tienes el nombre de dominio apuntando a la dirección IP de tu servidor. Asegúrate también de que has generado el SSL Letsencrypt.
Crea una nueva configuración de bloques de servidor Nginx‘/etc/nginx/conf.d/drupal.conf ‘ utilizando el siguiente editor nano.
sudo nano /etc/nginx/conf.d/drupal.conf
Añade la siguiente configuración al archivo. Y asegúrate de cambiar el nombre de dominio y la ruta de los certificados SSL. Este ejemplo utiliza el dominio http://drupal.hwdomain.io como dominio principal para la instalación de Drupal.
server { listen 80; server_name drupal.hwdomain.io; return 301 https://$host$request_uri; }
server {
listen 443 http2 ssl;
server_name drupal.hwdomain.io;
root /var/www/drupal;
ssl_certificate /etc/letsencrypt/live/drupal.hwdomain.io/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/drupal.hwdomain.io/privkey.pem;
access_log /var/log/nginx/drupal.hwdomain.io.access.log;
error_log /var/log/nginx/drupal.hwdomain.io.error.log;
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location ~ \..*/.*\.php$ {
return 403;
}
location ~ ^/sites/.*/private/ {
return 403;
}
# Block access to scripts in the site files directory
location ~ ^/sites/[^/]+/files/.*\.php$ {
deny all;
}
location ~ (^|/)\. {
return 403;
}
location / {
try_files $uri /index.php?$query_string;
}
location @rewrite {
rewrite ^/(.*)$ /index.php?q=$1;
}
location ~ /vendor/.*\.php$ {
deny all;
return 404;
}
location ~ ‘\.php$|^/update.php’ {
fastcgi_split_path_info ^(.+?\.php)(|/.*)$;
include fastcgi_params;
# Block httpoxy attacks. See https://httpoxy.org/.
fastcgi_param HTTP_PROXY «»;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param QUERY_STRING $query_string;
fastcgi_intercept_errors on;
fastcgi_pass unix:/run/php-fpm/drupal.sock;
}
location ~ ^/sites/.*/files/styles/ { # For Drupal >= 7
try_files $uri @rewrite;
}
# Handle private files through Drupal. Private file’s path can come
# with a language prefix.
location ~ ^(/[a-z\-]+)?/system/files/ { # For Drupal >= 7
try_files $uri /index.php?$query_string;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
try_files $uri @rewrite;
expires max;
log_not_found off;
}
}
Guarda el archivo y sal del editor cuando hayas terminado.
Ahora, ejecuta el siguiente comando para verificar la configuración de Nginx. Deberías obtener un mensaje de salida como‘test successful – syntax ok’, lo que significa que la configuración de Nginx es correcta y no hay ningún error.
sudo nginx -t
A continuación, ejecuta el siguiente comando systemctl para reiniciar el servicio Nginx y aplicar la nueva configuración del bloque del servidor.
sudo systemctl restart nginx
El servicio Nginx debería ejecutarse ahora con la nueva configuración del bloque del servidor ‘/etc/nginx/conf.d/drupal.conf’. Ejecuta el siguiente comando para verificar el servicio Nginx y asegurarte de que se está ejecutando.
sudo systemctl status nginx
Deberías obtener una salida como la siguiente – El servicio Nginx se está ejecutando.
Ahora deberías poder acceder a tu instalación de Drupal a través de tu dominio.
Iniciar la instalación de Drupal
En este punto, has terminado la configuración de las dependencias de paquetes para Drupal. Ahora puedes acceder a tu Drupal a través de tu dominio.
En este paso, iniciarás la instalación de Drupal, también configurarás detalles sobre tu Drupal y configurarás el usuario administrador para Drupal.
Abre tu navegador web y visita el nombre de dominio de tu instalación de Drupal (es decir: https://drupal.hwdomain.io/). Aparecerá la página de instalación de Drupal.
Selecciona el idioma para tu instalación de Drupal o puedes utilizar el predeterminado‘Inglés‘ y pulsa el botón‘Guardar y continuar‘.
Selecciona el perfil de instalación para tu instalación y haz clic en«Guardar y continuar». Este ejemplo utiliza el perfil«Estándar«.
Ahora configura la base de datos para tu instalación de Drupal. Introduce los datos de la base de datos MariaDB y el usuario que ya posees y has creado en la parte superior.
Haz clic en Guardar y continúa de nuevo.
Ahora comenzará la instalación de Drupal.
Introduce información detallada sobre tu instalación de Drupal. Además, asegúrate de utilizar tu nombre de usuario para el admin Drupal y utiliza una contraseña segura.
Haz clic en Guardar y continuar.
Cuando finalice la instalación de Drupal, verás la siguiente página. Podrás ver mensajes como‘¡Enhorabuena, has instalado Drupal!‘.
Finalizar la instalación de Drupal
Ejecuta el siguiente comando para establecer el etiquetado del archivo y directorio de configuración de Drupal.
sudo restorecon -v /var/www/drupal/sites/default/settings.php sudo restorecon -Rv /var/www/drupal/sites/default/files
A continuación, ejecuta el siguiente comando para cambiar el permiso del archivo‘/var/www/drupal/sites/default/settings.php‘ y hacerlo escribible. A continuación, edita el archivo con el editor nano.
sudo chmod 644 /var/www/drupal/sites/default/settings.php sudo nano /var/www/drupal/sites/default/settings.php
Descomenta la línea de script‘trusted_host_patterns‘ y añade tu nombre de dominio. Esto habilitará el trusted_host en tu instalación de Drupal.
$settings['trusted_host_patterns'] = [ '^hwdomain\.io$', '^drupal.hwdomain\.io$', ];
Guarda el archivo y sal del editor cuando hayas terminado.
Por último, vuelve al navegador web de tu sitio Drupal y visita el informe de estado en la siguiente URL. Sustituye el nombre del dominio principal por tu dominio – o puedes acceder a él a través del menú Administración > Informes.
https://drupal.hwdomain.io/admin/reports/status
En el siguiente informe puedes ver que se han comprobado 25 requisitos del sistema para la instalación de Drupal. Esto significa que tu instalación de Drupal es correcta y no tiene errores.
Conclusión
En esta guía has aprendido a instalar la última versión de Drupal v9 en un servidor Linux Rocky. También has aprendido la instalación de LAMP Stack (Linux, Apache2/httpd, MySQL/MariaDB y PHP) y la configuración básica para alojar Drupal. Además, has aprendido a instalar extensiones PHP desde el repositorio PECL (PHP Extension Community Library).
Con Drupal funcionando y protegido con certificados SSL y activada la configuración ‘trusted_hosts’, ahora puedes ampliar la implementación de Drupal instalando nuevos temas o añadiendo algunos plugins para tu instalación de Drupal.