Cómo instalar Drupal con Nginx y Let’s Encrypt SSL en Ubuntu 20.04 LTS

Drupal es un sistema de gestión de contenidos gratuito y de código abierto que te ayuda a crear y ofrecer contenidos digitales para la web y los teléfonos móviles. Está escrito en PHP y lo utilizan muchas organizaciones de todo el mundo. Con Drupal, puedes crear diferentes tipos de sitios web, desde pequeños blogs hasta un gran sitio web corporativo. Ofrece una interfaz fácil de usar y potentes herramientas de edición para gestionar el contenido.

En este tutorial, te mostraremos cómo instalar Drupal con Nginx y asegurarlo con Let’s Encrypt SSL en Ubuntu 20.04.

Requisitos previos

  • Un servidor con Ubuntu 20.04.
  • Un nombre de dominio válido apuntado con tu servidor.
  • Una contraseña de root configurada en tu servidor.

Instalar el servidor LEMP

En primer lugar, tendrás que instalar en tu servidor el servidor web Nginx, la base de datos MariaDB, PHP y otras extensiones necesarias. Puedes instalarlos todos con el siguiente comando:

apt-get install nginx mariadb-server php7.4 php7.4-fpm php7.4-common php7.4-mysql 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 modifica algunos ajustes:

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

Cambia las siguientes líneas:

short_open_tag = On 
cgi.fix_pathinfo=0
memory_limit = 256M
upload_max_filesize = 100M
max_execution_time = 300
date.timezone = America/Chicago

Guarda y cierra el archivo cuando hayas terminado.

Configurar la base de datos MariaDB

En primer lugar, asegura la instalación de MariaDB y establece la contraseña de root de MariaDB con el siguiente comando:

mysql_secure_installation

Responde a todas las preguntas como se muestra a continuación:

Enter current password for root (enter for none): 
Set root password? [Y/n] Y
New password: 
Re-enter new password: 
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

Una vez asegurada la MariaDB, entra en el shell de MariaDB con el siguiente comando:

mysql -u root -p

Proporciona la contraseña de la raíz de MariaDB y luego crea una base de datos y un usuario para Drupal:

MariaDB [(none)]> CREATE DATABASE drupaldb;
MariaDB [(none)]> CREATE USER 'drupal'@'localhost' IDENTIFIED BY 'password';

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

MariaDB [(none)]> GRANT ALL ON drupaldb.* TO 'drupal'@'localhost' WITH GRANT OPTION;

A continuación, vacía los privilegios y sal del intérprete de comandos de MariaDB con el siguiente comando:

MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> EXIT;

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

Descargar Drupal

En el momento de escribir este tutorial, la última versión de Drupal es la 8.8.5. Puedes descargarla en el directorio raíz de la web Nginx con el siguiente comando:

cd /var/www/html/
wget https://ftp.drupal.org/files/projects/drupal-8.8.5.tar.gz

Una vez completada la descarga, extrae el archivo descargado con el siguiente comando:

tar -xvzf drupal-8.8.5.tar.gz

A continuación, renombra el directorio extraído a drupal y dale los permisos adecuados con el siguiente comando:

mv drupal-8.8.5 drupal
chown -R www-data:www-data drupal
chmod -R 755 drupal

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

Configurar Nginx para Drupal

A continuación, crea un archivo de configuración del host virtual Nginx para drupal con el siguiente comando:

nano /etc/nginx/sites-available/drupal

Añade las siguientes líneas:

server {
    listen 80;
    listen [::]:80;
    root /var/www/html/drupal;
    index  index.php index.html index.htm;
    server_name  drupal.linuxbuz.com;

    client_max_body_size 100M;
    autoindex off;

    location ~ \..*/.*\.php$ {
        return 403;
    }

    location ~ ^/sites/.*/private/ {
        return 403;
    }

    # Block access to scripts in 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;
    }

    # Don't allow direct access to PHP files in the vendor directory.
    location ~ /vendor/.*\.php$ {
        deny all;
        return 404;
    }

    location ~ '\.php$|^/update.php' {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/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 y luego crea un enlace simbólico al directorio sites-enabled:

ln -s /etc/nginx/sites-available/drupal /etc/nginx/sites-enabled/

A continuación, establece el hash_bucket_size en el archivo de configuración por defecto de Nginx:

nano /etc/nginx/nginx.conf

Añade la siguiente línea debajo de«http {«

    server_names_hash_bucket_size 64;

Guarda y cierra el archivo y luego comprueba que Nginx no tiene ningún error de sintaxis:

nginx -t

Deberías obtener 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

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

Asegurar Drupal con Let’s Encrypt SSL

Se recomienda asegurar Drupal con Let’s Encrypt SSL. Primero, añade el repositorio de Certbot con el siguiente comando:

add-apt-repository ppa:ahasenack/certbot-tlssni01-1875471

A continuación, actualiza el repositorio e instala el cliente Certbot con el siguiente comando:

apt-get update -y
apt-get install certbot python3-certbot-nginx -y

Una vez instalado el cliente Certbot, ejecuta el siguiente comando para descargar e instalar Let’s Encrypt SSL para tu sitio web:

certbot --nginx -d drupal.linuxbuz.com

Se te pedirá que proporciones tu correo electrónico válido y que aceptes las condiciones del servicio, como se muestra a continuación:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): [email protected]

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y



Obtaining a new certificate
Performing the following challenges:
http-01 challenge for drupal.linuxbuz.com
Waiting for verification...
Cleaning up challenges
Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/drupal

A continuación, elige si quieres redirigir el tráfico HTTP a HTTPS:

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

Escribe 2 y pulsa Enter para finalizar la instalación:

Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/drupal

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://drupal.linuxbuz.com

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=drupal.linuxbuz.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/drupal.linuxbuz.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/drupal.linuxbuz.com/privkey.pem
   Your cert will expire on 2020-08-12. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

En este punto, tu sitio web de Drupal está protegido con Let’s Encrypt SSL.

Acceder al asistente de instalación de Drupal Web

Ahora, abre tu navegador web y escribe la URL https://drupal.linuxbuz.com. Serás redirigido a la página de selección de idioma de Drupal:

Instalador de Drupal - Elige el idioma

Selecciona el idioma que desees y haz clic en el botón Guardar y continuar. Deberías ver la página del perfil de instalación:

Selecciona el perfil de instalación

Selecciona el perfil de instalación que desees y haz clic en el botón Guardar y continuar. Deberías ver la página de configuración de la base de datos:

Configuración de la base de datos

Haz clic en el botón Guardar y continuar. Deberías ver la página de Configuración del Sitio:

Drupal site configuartion

Ajustes regionales

Introduce el nombre del sitio, el nombre de usuario y la contraseña del administrador y haz clic en el botón Guardar y continuar. Serás redirigido al panel de control por defecto de Drupal en la siguiente página:

Drupal instalado con éxito

Conclusión

Enhorabuena! has instalado y asegurado con éxito Drupal con Let’s Encrypt SSL en Ubuntu 20.04. Ahora puedes empezar a personalizar tu sitio web de Drupal. Para más información, visita la documentación oficial de Drupal.

También te podría gustar...