Cómo instalar Drupal CMS con Apache2 en Ubuntu 22.04

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 se utiliza en al menos el 14% de los 10.000 sitios web más importantes de Internet, y se emplea 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 esta guía, te mostraré cómo instalar la última versión de Drupal en un sistema Ubuntu 22.04. Esta guía incluye la instalación de algunas dependencias de paquetes como el servidor web Apache2, la base de datos MariaDB, PHP 8.1 y Composer como herramienta de gestión de paquetes PHP. El objetivo aquí es que hayas completado la instalación de Drupal con LAMP Stack y asegurado con certificados SSL.

Requisitos previos

Para terminar esta guía, necesitarás los siguientes requisitos:

  • Un servidor Ubuntu 22.04. Esta demo utiliza un servidor Ubuntu con el nombre de host ‘server-ubuntu’ y el cortafuegos UFW activado.
  • Un usuario no root con privilegios administrativos.
  • Un nombre de dominio apuntando a la dirección IP del servidor Ubuntu.

Instalación del servidor web Apache2

En el primer paso, instalarás el servidor web Apache mediante APT desde los repositorios de Ubuntu. En el momento de escribir esto, la última versión de Drupal 9 requería al menos Apache v2.x.

La mayoría de los desarrollos de Drupal funcionan con el servidor web Apache, pero también con otro servidor web como Nginx.

Antes de instalar los paquetes, ejecuta el siguiente comando apt como usuario sudo no root para actualizar y refrescar el repositorio del índice de paquetes. También puedes utilizar el usuario root directo en tu servidor.

sudo apt update

Ahora instala el servidor web Apache ejecutando el siguiente comando apt. Se te pedirá que confirmes la instalación de Apache, introduce Y para aceptar y pulsa INTRO.

sudo apt install apache2

instalar apache2

A continuación, utiliza los siguientes comandos systemctl para comprobar y verificar el servicio ‘apache2‘.

Deberías obtener la salida de que el servicio «apache2» está «habilitado» y se ejecutará automáticamente al arrancar el sistema. Además, recibirás la salida del estado del servicio «apache2» en ejecución.

sudo systemctl is-enabled apache2
sudo systemctl status apache2

comprobar apache2

Por último, tendrás que añadir la regla «Apache Full» al cortafuegos UFW. La regla «Apache Full» permitirá automáticamente el acceso a los puertos HTTP y HTTPS, y se incluye por defecto con los paquetes de Apache.

Ejecuta el siguiente comando para añadir la regla «Apache Full «. A continuación, comprueba y verifica el estado del cortafuegos UFW. Deberías recibir un mensaje indicando que la regla «Apache Full» se ha añadido al cortafuegos UFW.

sudo ufw allow "Apache Full"
sudo ufw status

configuración ufw

Instalación del servidor MariaDB

Drupal admite varios RDBMS (Sistema de Gestión de Bases de Datos Relacionales) como MySQL/MariaDB, PostgreSQL y SQLite. En este ejemplo, instalarás Drupal con el servidor de bases de datos MariaDB.

La última versión actual de Drupal 9 requiere al menos el servidor MariaDB v10.3.x. Y el último repositorio de Ubuntu proporciona el servidor MariaDB v10.6.

Utiliza el siguiente comando apt para instalar los paquetes del servidor MariaDB. Cuando se te pida que confirmes la instalación, introduce Y para confirmar y pulsa INTRO.

sudo apt install mariadb-server mariadb-client

instalar mariadb

Una vez instalado el servidor MariaDB, ejecuta el siguiente comando systemctl para comprobar el estado del servicio ‘mariadb‘.

Recibirás un mensaje indicando que el servidor «mariadb» está «habilitado» y se ejecutará automáticamente al arrancar el sistema. Y el estado actual del servicio «mariadb» es «en ejecución«.

sudo systemctl is-enabled mariadb
sudo systemctl status mariadb

comprobar mariadb

Ahora que el servicio «mariadb» se está ejecutando, tienes que configurar y asegurar la instalación del servidor MariaDB. Para ello, puedes utilizar la herramienta de línea de comandos‘mysql_secure_installation‘ que proporciona el paquete del servidor MariaDB.

Ejecuta el siguiente comando para empezar a configurar y asegurar la instalación del servidor MariaDB.

sudo mysql_secure_installation

Ahora se te plantearán las siguientes preguntas:

  • Para la instalación por defecto del servidor MariaDB sin contraseña de root, pulsa ENTER cuando se te pregunte por la contraseña.
  • La autenticación local para los usuarios root de MariaDB está asegurada por defecto, introducen’ cuando se te pregunte si quieres cambiar el método de autenticación a‘unix_socket‘.
  • Introduce «Y« para crear una nueva contraseña de root de MariaDB. A continuación, introduce la contraseña segura de tu usuario raíz de MariaDB y repite la operación.
  • Cuando se te pida que desactives la autenticación remota para el usuario raíz de MariaDB, introduce «Y« para aceptar.
  • La instalación por defecto del servidor MariaDB viene con la base de datos «test» y permite que un usuario anónimo acceda a ella. Introduce «Y« en ambas opciones para eliminar la base de datos «test» por defecto y el privilegio anónimo.
  • Por último, introduce«Y» para confirmar los privilegios de recarga de tablas.

Llegados a este punto, ya has configurado la contraseña raíz de MariaDB y asegurado la instalación del servidor MariaDB. Ahora crearás una nueva base de datos y un nuevo usuario para Drupal. Para ello, primero debes acceder al shell de MariaDB mediante el comando ‘mysql’ (cliente MySQL/MariaDB).

Utiliza el siguiente comando ‘mysql’ para acceder al intérprete de comandos MariaDB como usuario root. Cuando se te pida la contraseña, introduce tu contraseña de root de MariaDB. También puedes simplemente pulsar ENTER si estás ejecutando este comando como el usuario ‘root’ del sistema Linux.

sudo mysql -u root -p

A continuación, ejecuta las siguientes consultas para crear una nueva base de datos MariaDB y un nuevo usuario para Drupal. En este ejemplo, crearás la base de datos ‘drupaldb‘ con el usuario ‘drupal‘ y la contraseña es ‘password‘. Puedes sustituir ‘password‘ por tu nueva contraseña segura.

CREATE DATABASE drupaldb;
CREATE USER drupal@localhost IDENTIFIED BY 'password';
GRANT ALL ON drupaldb.* TO drupal@localhost WITH GRANT OPTION;
FLUSH PRIVILEGES;

crear base de datos

Ahora ejecuta la siguiente consulta para comprobar los privilegios del usuario MariaDB‘drupal@localhost‘. A continuación, puedes salir del intérprete de comandos MariaDB mediante la consulta‘quit‘ o simplemente pulsando‘Ctrl+d’.

Deberías recibir el resultado de que el usuario MariaDB‘drupal@localhost’ tiene acceso a la base de datos‘drupaldb‘.

SHOW GRANTS FOR drupal@localhost;
quit

comprobar privilegios de usuario

Instalación y configuración de PHP 8.x

En el momento de escribir esto, se recomienda utilizar PHP 8.x para la instalación de la última versión de Drupal 9. Además, necesitarás instalar algunas extensiones PHP adicionales, como ‘php-apcu’ para la caché, ‘php-gd’ para el procesamiento de imágenes, ‘php-mysql’ como controlador para la base de datos MariaDB, y otras.

En este ejemplo, instalarás PHP 8.1 proporcionado por los repositorios de Ubuntu. Utiliza el siguiente comando ‘apt’ para instalar PHP 8.1 y algunas extensiones y paquetes adicionales necesarios.

Cuando se te pida que confirmes la instalación, introduce‘Y’ para aceptar y pulsa ENTER.

sudo apt install php php-apcu php-dev libapache2-mod-php libcurl4-openssl-dev php-cli php-mysql php-zip php-gd php-fpm php-json php-common php-intl php-mbstring php-curl php-xml php-pear php-tidy php-soap php-bcmath php-xmlrpc

instalar php

Una vez instalado PHP, necesitarás instalar una extensión PHP adicional ‘uploadprogress‘ del repositorio PECL (PHP Extensions Community Library). Para ello, puedes utilizar la línea de comandos‘pecl‘ proporcionada por el paquete ‘php-pear‘.

La extensión ‘uploadprogress‘ es utilizada por Drupal para mostrar y realizar un seguimiento detallado del progreso de la subida de un archivo, que incluye el tiempo restante estimado y el acceso al contenido del archivo a medida que se va subiendo.

Utiliza el siguiente comando ‘pecl‘ para instalar la extensión PHP ‘uploadprogress‘. El comando ‘pecl‘ descargará ahora el código fuente de la extensión ‘uploadprogress‘ y compilará e instalará automáticamente la extensión.

sudo pecl install uploadprogress

instalar uploadprogress

Una vez finalizada la instalación, ejecuta el siguiente comando para crear un nuevo archivo de configuración para la extensión PHP ‘uploadprogress‘.

cat <<EOF | sudo tee /etc/php/8.1/mods-available/uploadprogress.ini
; configuration for php uploadprogress module
; priority 15
extension=uploadprogress.so
EOF

Ahora ejecuta el siguiente comando para habilitar la extensión ‘uploadprogress’ en tu instalación PHP.

sudo ln -s /etc/php/8.1/mods-available/uploadprogress.ini /etc/php/8.1/apache2/conf.d/15-uploadprogress.ini

configurar extensiones

Ya has terminado la instalación de todos los paquetes PHP para Drupal. Ahora tendrás que configurar tu instalación de PHP editando el archivo‘php.ini‘.

Abre el archivo ‘/etc/php/8.1/apache2/php.ini ‘ con tu editor de texto. En este ejemplo, utilizaremos‘nano‘.

sudo nano /etc/php/8.1/apache2/php.ini

Cambia algunas de las opciones como se indica a continuación. La opción‘memory_limit‘ debe depender de la memoria del servidor, y la opción‘date.timezone‘ debe depender de tu zona horaria.

memory_limit = 512M
upload_max_filesize = 60M
max_execution_time = 300
date.timezone = Europe/Paris

Guarda y cierra el archivo cuando hayas terminado.

A continuación, utiliza el siguiente comando systemctl para reiniciar el servicio ‘apache2‘ y aplicar los nuevos cambios a las configuraciones de PHP.

sudo systemctl restart apache2

Ahora que has terminado la instalación y configuración de PHP 8.1, puedes verificar la instalación creando el archivo phpinfo.

Ejecuta el siguiente comando para crear un nuevo archivo phpinfo‘/var/www/html/info.php‘. Este archivo contiene el script phpinfo que te mostrará las configuraciones detalladas de tu PHP en tu navegador web.

cat <<EOF | sudo tee /var/www/html/info.php
<?php
phpinfo();
?>
EOF

Por último, abre tu navegador web y visita la dirección IP de tu servidor Ubuntu siguiendo la ruta URL‘/info.php‘ (es decir: http: //192.168.5.100/info.php). Deberías ver la página con tus datos sobre la instalación de PHP 8.1.

phpinfo

Instalación de Composer

Composer es una herramienta de línea de comandos para gestionar las dependencias de los paquetes PHP. Necesitas instalar Composer, que se utilizará para instalar las dependencias de paquetes PHP de tu instalación de Drupal.

Para instalar Composer, ejecuta el siguiente comando.

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

A continuación se muestra cada uno de los comandos utilizados:

  • El primer comando descargará el script instalador de Composer en ‘composer-setup.php’. A continuación, el segundo comando verificará el hash del script instalador. Asegúrate de que recibes el mensaje de salida ‘Instalador verificado’.
  • Los dos últimos comandos ejecutarán el script instalador e instalarán la herramienta de gestión de dependencias de paquetes PHP Composer. Después, se eliminará el script instalador ‘composer-setup.php’.
  • Por último, obtendrás el archivo binario de Composer como ‘composer.phar’ en tu directorio de trabajo actual.

A continuación, ejecuta el siguiente comando para mover el archivo binario ‘composer.phar’ a‘/usr/local/bin/composer‘. Esta acción permitirá a todos los usuarios ejecutar el comando ‘composer’.

sudo mv composer.phar /usr/local/bin/composer

instalar composer

Ahora puedes ejecutar el comando ‘composer‘ para comprobar y verificar tu instalación. El siguiente comando te mostrará una página de ayuda detallada del comando Composer.

composer --help

Descarga la última versión de Drupal

Como ya has instalado todas las dependencias de paquetes para Drupal, ahora descargarás el código fuente de Drupal e instalarás las dependencias de paquetes PHP mediante el Compositor.

Utiliza el siguiente comando wget para descargar la última versión de Drupal. Verás el archivo ‘drupal.tar.gz‘ en tu directorio de trabajo actual.

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

Ahora extrae el archivo ‘drupal.tar.gz’ mediante el siguiente comando tar. A continuación, mueve el directorio drupal extraído a‘/var/www/drupal’. Este directorio se utilizará como directorio ‘Document-root’ para tu instalación de Drupal.

tar -xvf drupal.tar.gz
mv drupal-* /var/www/drupal

A continuación, cambia la propiedad y el permiso del directorio de instalación de Drupal‘/var/www/drupal‘ utilizando el siguiente comando. La propiedad debe ser usuario y grupo ‘www-data’ con el permiso de usuario normal‘755‘.

sudo chown -R www-data:www-data /var/www/drupal/
sudo chmod -R 755 /var/www/drupal/

Ahora ve al directorio ‘/var/www/drupal ‘ y ejecuta el comando composer como se indica a continuación para instalar todas las dependencias PHP para tu instalación de Drupal.

cd /var/www/drupal
sudo -u www-data composer install --no-dev

Configurar el host virtual Apache2 para Drupal

Una vez descargado Drupal e instaladas las dependencias del paquete PHP, ahora deberás instalar y configurar el host virtual Apache para tu instalación de Drupal.

Antes de empezar a configurar un host virtual, asegúrate de que tu nombre de dominio que se utilizará para Drupal apunta a la dirección IP de tu servidor. Asegúrate también de que tus certificados SSL están listos.

Ejecuta el siguiente comando a2enmod para habilitar algunos módulos de Apache2 para tu Drupal.

sudo a2enmod rewrite ssl headers deflate

activar módulos apache2

Ahora crea un nuevo archivo de host virtual para drupal‘/etc/apache2/sites-available/drupal.conf‘ utilizando el siguiente comando. Este ejemplo utiliza el editor‘nano‘.

sudo nano /etc/apache2/sites-available/drupal.conf

Añade la siguiente configuración completa para el host virtual de Drupal. Asegúrate de cambiar el nombre de dominio y la ruta de los certificados SSL. En esta demostración, utilizaremos el dominio‘hwdomain.io‘ para nuestra instalación de Drupal.

<VirtualHost *:80>
ServerName hwdomain.io
ServerAdmin [email protected]

# Redirect Requests to SSL
Redirect permanent "/" "https://hwdomain.io/"

ErrorLog ${APACHE_LOG_DIR}/hwdomain.io.error.log
CustomLog ${APACHE_LOG_DIR}/hwdomain.io.access.log combined

</VirtualHost>

<IfModule mod_ssl.c>

<VirtualHost _default_:443>

ServerName hwdomain.io
ServerAdmin [email protected]
DocumentRoot /var/www/drupal

# Add security
php_flag register_globals off

ErrorLog ${APACHE_LOG_DIR}/hwdomain.io.error.log
CustomLog ${APACHE_LOG_DIR}/hwdomain.io.access.log combined

SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/hwdomain.io/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/hwdomain.io/privkey.pem

<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>

<Directory /var/www/drupal>
Options FollowSymlinks
#Allow .htaccess
AllowOverride All
Require all granted
<IfModule security2_module>
SecRuleEngine Off
# or disable only problematic rules
</IfModule>
</Directory>

<Directory /var/www/drupal/>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</Directory>

</VirtualHost>

</IfModule>

Guarda la configuración y cierra el archivo cuando hayas terminado.

A continuación, ejecuta el siguiente comando para activar el archivo de host virtual‘drupal.conf’. A continuación, prueba y verifica tu configuración de Apache. Si tu configuración de Apache es correcta, recibirás un mensaje de salida como ‘Sintaxis OK‘.

sudo a2ensite drupal.conf
sudo apachectl configtest

configurar host virtual

Por último, reinicia el servicio‘apache2‘ para aplicar los nuevos cambios y el nuevo archivo de host virtual. Ahora puedes acceder al instalador de Drupal a través del nombre de dominio y del navegador web.

sudo systemctl restart apache2

Ejecutar el instalador Web de Drupal

Para acceder al instalador de Drupal, abre tu navegador web y visita el nombre de dominio de tu instalación de Drupal (es decir: https: //hwdomain.io/).

En la configuración de idioma, selecciona el idioma que prefieras y haz clic en «Guardar y continuar». El idioma por defecto es «Inglés«.

seleccionar idioma

Selecciona el perfil de instalación para tu instalación de Drupal. A continuación, haz clic en«Guardar y continuar».

Utiliza el perfil ‘Estándar‘ que se recomienda a los nuevos usuarios de Drupal o utiliza ‘Mínimo‘ si estás familiarizado con Drupal’, o utiliza el perfil ‘Demo‘ que incluye ejemplos de sitios y configuraciones de Drupal.

perfil de instalación

Ahora introduce los detalles de la base de datos MariaDB para tu instalación de drupal y haz clic en ‘Guardar y continuar‘. Si utilizas MariaDB en un host diferente, utiliza las ‘OPCIONES AVANZADAS‘ para introducir la dirección IP del host del servidor MariaDB.

configuración de la base de datos

Y comenzará la instalación de Drupal.

instalación de drupal

A continuación, introduce los detalles de la configuración de tu sitio Drupal, que incluyen el nombre del sitio y el usuario administrador de tu Drupal. Cuando hayas terminado, haz clic en «Guardar y continuar«.

configuración de drupal

Ahora deberías obtener la página que te informa de que la instalación de Drupal ha finalizado. Puedes ver un mensaje como «Enhorabuena, ¡has instalado Drupal!

instalación de drupal finalizada

Ya has finalizado la instalación de Drupal, pero aún tienes que establecer configuraciones adicionales. En este ejemplo, establecerás la configuración ‘trusted_host‘ de Drupal, que protegerá tu instalación de Drupal contra los ataques a la cabecera HTTP HOST.

Para activar la configuración ‘ trusted_host ‘, tendrás que editar la configuración de Drupal‘/var/www/drupal/sites/default/settings.php‘.

Ejecuta lo siguiente para que el archivo ‘/var/www/drupal/sites/default/settings.php’ tenga permisos de escritura. A continuación, abre el archivo con tu editor de texto. En esta demo, utilizaremos‘nano‘.

sudo chmod 644 /var/www/drupal/sites/default/settings.php
sudo nano /var/www/drupal/sites/default/settings.php

Pulsa‘Ctrl+w‘ para buscar el patrón de ‘trusted_host’. A continuación, añade la siguiente configuración al archivo, y asegúrate de cambiar el nombre de dominio con tu instalación de Drupal. El nombre de dominio debe estar formateado en Regex.

$settings['trusted_host_patterns'] = [
  '^hwdomain\.io$',
];

Guarda la configuración y sal cuando hayas terminado. A continuación, vuelve a cambiar el permiso del archivo para que no se pueda escribir utilizando el siguiente comando.

sudo chmod 444 /var/www/drupal/sites/default/settings.php

Por último, vuelve a tu navegador web y visita el informe de estado de tu instalación de Drupal (por ejemplo: https://hwdomain.io/admin/reports/status).

Verás las configuraciones detalladas del servidor de tu instalación de Drupal. Además, podrás ver que las 25 configuraciones de Drupal se han comprobado correctamente.

estado de drupal

Desplaza la página hasta el final y verás las configuraciones detalladas del sistema de tu instalación de Drupal. A continuación, puedes ver que las configuraciones ‘trusted_host’ y ‘Upload Progress‘ están activadas.

informe de situación de drupal

Conclusión

En esta guía, has instalado y configurado la última versión de Drupal v9 en el servidor Ubuntu 22.04. También has aprendido la instalación básica de LAMP Stack (Linux, Apache, MariaDB y PHP) en el sistema Ubuntu y la instalación básica de la extensión PHP desde el repositorio PECL (PHP Extension Community Library).

Ahora que tienes Drupal instalado y protegido con certificados SSL y la configuración ‘trusted_host’ activada. Puedes ampliar tu instalación actual de Drupal instalando temas para tu sitio e instalando algunos plugins adicionales de Drupal.

También te podría gustar...