Instalación y configuración de Drupal

Drupal es un potente sistema de gestión de contenido de código abierto utilizado para construir sitios web y aplicaciones complejas. Conocido por su flexibilidad, extensibilidad y sólidas características de seguridad, Drupal impulsa millones de sitios web en todo el mundo. Esta guía completa cubre el proceso de instalación completo, incluyendo la configuración de la pila LAMP/LEMP, la instalación de Drupal con Composer, la configuración de la base de datos, la habilitación de módulos esenciales e implementación de técnicas de endurecimiento de seguridad.

Tabla de contenidos

Requisitos previos

Asegúrese de tener lo siguiente antes de comenzar:

  • Acceso root o sudo en Ubuntu 20.04 LTS o posterior
  • Un nombre de dominio válido configurado en DNS
  • Mínimo 2GB de RAM (4GB recomendado)
  • 20GB de espacio en disco disponible
  • Competencia básica en la línea de comandos de Linux

Actualice los paquetes del sistema:

sudo apt update && sudo apt upgrade -y

Requisitos del sistema

Drupal requiere componentes de software específicos para funcionar correctamente. Verifique la compatibilidad con las especificaciones de su servidor.

Verifique la versión actual del sistema operativo:

lsb_release -a
uname -a

Instale wget y curl para descargar recursos:

sudo apt install -y wget curl git

Instalación del servidor web

Instale Apache o Nginx. Apache se recomienda para principiantes en Drupal debido a la configuración más simple.

Instalación de Apache

Instale Apache y los módulos requeridos:

sudo apt install -y apache2 apache2-utils

Habilite los módulos necesarios de Apache:

sudo a2enmod rewrite
sudo a2enmod headers
sudo a2enmod ssl
sudo a2enmod proxy_fcgi
sudo a2enmod setenvif

Inicie y habilite Apache:

sudo systemctl start apache2
sudo systemctl enable apache2

Instalación de Nginx

Alternativamente, instale Nginx para mejor rendimiento:

sudo apt install -y nginx

Inicie y habilite Nginx:

sudo systemctl start nginx
sudo systemctl enable nginx

Configuración de PHP y extensiones

Instale PHP 8.1 o posterior con las extensiones requeridas para Drupal:

sudo apt install -y php-fpm php-cli php-common php-mysql php-xml php-gd php-curl php-pdo php-mbstring php-zip php-bcmath php-json php-xmlrpc php-opcache

Verifique la versión de PHP:

php --version

Verifique las extensiones instaladas:

php -m

Configure PHP para uso en producción:

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

Actualice la configuración crítica de PHP:

max_execution_time = 300
memory_limit = 256M
upload_max_filesize = 100M
post_max_size = 100M
max_input_vars = 5000

Reinicie PHP-FPM:

sudo systemctl restart php8.1-fpm

Configuración de la base de datos

Instale el servidor de base de datos MariaDB:

sudo apt install -y mariadb-server

Inicie y asegure MariaDB:

sudo systemctl start mariadb
sudo systemctl enable mariadb
sudo mysql_secure_installation

Cree la base de datos y usuario de Drupal:

sudo mysql -u root -p << EOF
CREATE DATABASE drupal;
CREATE USER 'drupal'@'localhost' IDENTIFIED BY 'SecurePassword123!';
GRANT ALL PRIVILEGES ON drupal.* TO 'drupal'@'localhost';
FLUSH PRIVILEGES;
EXIT;
EOF

Pruebe el acceso a la base de datos:

mysql -u drupal -p -h localhost drupal
show tables;
exit;

Instalación de Composer

Composer es requerido para gestionar Drupal y sus dependencias:

sudo apt install -y composer

Verifique la instalación de Composer:

composer --version

Instalación de Drupal

Cree el directorio raíz web:

sudo mkdir -p /var/www/drupal
sudo chown -R www-data:www-data /var/www/drupal
cd /var/www/drupal

Descargue Drupal con Composer:

composer create-project drupal/recommended-project .

Instale paquetes adicionales útiles:

cd /var/www/drupal
composer require drupal/admin_toolbar drupal/pathauto drupal/redirect drupal/metatag drupal/yoast_seo

Establezca los permisos adecuados:

sudo chown -R www-data:www-data /var/www/drupal
sudo find /var/www/drupal -type f -exec chmod 644 {} \;
sudo find /var/www/drupal -type d -exec chmod 755 {} \;

Cree settings.php desde la plantilla:

sudo cp /var/www/drupal/web/sites/default/default.settings.php /var/www/drupal/web/sites/default/settings.php
sudo chmod 644 /var/www/drupal/web/sites/default/settings.php
sudo chown www-data:www-data /var/www/drupal/web/sites/default/settings.php

Cree el directorio de archivos:

sudo mkdir -p /var/www/drupal/web/sites/default/files
sudo chown -R www-data:www-data /var/www/drupal/web/sites/default/files
sudo chmod -R 755 /var/www/drupal/web/sites/default/files

Configuración inicial

Configuración de Apache

Cree un host virtual de Apache:

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

Agregue la configuración:

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/drupal/web

    <Directory /var/www/drupal/web>
        AllowOverride All
        Require all granted
        
        <IfModule mod_rewrite.c>
            RewriteEngine On
            RewriteBase /
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteCond %{REQUEST_FILENAME} !-d
            RewriteRule ^ index.php [QSA,L]
        </IfModule>
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/drupal_error.log
    CustomLog ${APACHE_LOG_DIR}/drupal_access.log combined
</VirtualHost>

Habilite el sitio:

sudo a2ensite drupal.conf
sudo a2dissite 000-default.conf
sudo apache2ctl configtest
sudo systemctl reload apache2

Configuración de Nginx

Cree la configuración de Nginx:

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

Agregue la configuración:

server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/drupal/web;
    index index.php;

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

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\. {
        deny all;
    }

    location ~ ~$ {
        deny all;
    }
}

Habilite el sitio:

sudo ln -s /etc/nginx/sites-available/drupal.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Instalación de módulos

Acceda al asistente de instalación de Drupal:

Visite https://example.com y siga el asistente de instalación. Configure los parámetros de la base de datos cuando se le solicite:

Tipo de base de datos: MySQL, MariaDB, o equivalente
Nombre de la base de datos: drupal
Nombre de usuario de la base de datos: drupal
Contraseña de la base de datos: SecurePassword123!
Host de la base de datos: localhost

Complete la instalación para crear una cuenta de administrador.

Instale módulos esenciales a través de la interfaz de Drupal o línea de comandos:

cd /var/www/drupal
drush module:install admin_toolbar pathauto redirect metatag

Verifique los módulos instalados:

drush module:list

Endurecimiento de seguridad

Implemente las mejores prácticas de seguridad:

Actualice settings.php con la configuración de seguridad:

sudo nano /var/www/drupal/web/sites/default/settings.php

Agregue al final de settings.php:

$settings['update_fetch_url'] = FALSE;
$settings['allow_authorize_operations'] = FALSE;
$settings['file_chmod_directory'] = 0755;
$settings['file_chmod_file'] = 0644;

Establezca los permisos de archivo adecuados:

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

Configure robots.txt:

sudo nano /var/www/drupal/web/robots.txt

Deshabilite los módulos no utilizados:

cd /var/www/drupal
drush module:uninstall comment rdf

Habilite y configure el módulo de seguridad:

cd /var/www/drupal
drush module:install security_review

Configure HTTPS y certificado SSL:

sudo apt install -y certbot python3-certbot-apache
sudo certbot certonly --apache -d example.com -d www.example.com

Optimización del rendimiento

Habilite el almacenamiento en caché:

cd /var/www/drupal
drush config:set system.performance cache.page.max_age 3600
drush config:set system.performance cache.page.use_internal 1

Habilite el almacenamiento en caché de Twig:

sudo nano /var/www/drupal/web/sites/default/settings.php

Agregue la configuración:

$settings['twig_cache'] = TRUE;
$settings['twig_auto_reload'] = FALSE;

Configure Drush para un mejor rendimiento:

cd /var/www/drupal
drush core:cron

Configure el trabajo cron:

sudo crontab -e

Agregue:

*/15 * * * * cd /var/www/drupal && drush core:cron >> /var/log/drupal_cron.log 2>&1

Copia de seguridad y actualizaciones

Cree un script de copia de seguridad:

sudo nano /usr/local/bin/drupal-backup.sh

Agregue:

#!/bin/bash

BACKUP_DIR="/backups/drupal"
DRUPAL_DIR="/var/www/drupal"
DATE=$(date +%Y%m%d_%H%M%S)

mkdir -p $BACKUP_DIR

# Copia de seguridad de la base de datos
mysqldump -u drupal -p'SecurePassword123!' drupal | gzip > "$BACKUP_DIR/drupal-db-$DATE.sql.gz"

# Copia de seguridad de archivos
tar -czf "$BACKUP_DIR/drupal-files-$DATE.tar.gz" "$DRUPAL_DIR"

# Mantener solo 30 días de copias de seguridad
find $BACKUP_DIR -type f -mtime +30 -delete

echo "Backup completed at $DATE"

Haga ejecutable:

sudo chmod +x /usr/local/bin/drupal-backup.sh

Programe las copias de seguridad:

sudo crontab -e

Agregue:

0 2 * * * /usr/local/bin/drupal-backup.sh >> /var/log/drupal-backup.log 2>&1

Actualice Drupal:

cd /var/www/drupal
composer update
drush updatedb
drush cache:rebuild

Conclusión

Su instalación de Drupal ahora está completamente configurada con un servidor web robusto, backend de base de datos y medidas de endurecimiento de seguridad implementadas. Las copias de seguridad periódicas, las actualizaciones de seguridad y la optimización del rendimiento garantizan un sistema de gestión de contenido estable, seguro y rápido. Monitoree los recursos del sistema, mantenga los módulos actualizados y siga las directrices de seguridad de Drupal para mantener la integridad y el rendimiento de su sitio.