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
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
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
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
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
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, introduce‘n’ 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;
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
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
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
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
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.
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
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
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
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«.
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.
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.
Y comenzará la 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«.
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!
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.
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.
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.