Installer et configurer Drupal 8 avec Nginx et Let’s Encrypt sur CentOS 8

Drupal est un système de gestion de contenu gratuit, open-source et évolutif qui peut être utilisé par des particuliers pour créer et gérer tous types de sites Web. Il est écrit en PHP et utilise MySQL/MariaDB pour stocker ses données. Drupal offre un riche ensemble de fonctionnalités qui peuvent être étendues par des milliers d’add-ons. Drupal prend en charge de nombreux serveurs Web, notamment Apache, Nginx, IIS, Lighttpd et les bases de données MySQL, MariaDB, MongoDB, SQLite, PostgreSQL et MS SQL server. Drupal est livré avec une interface Web simple et conviviale qui te permet de créer des sites Web sans aucune connaissance en codage.

Dans ce tutoriel, nous allons te montrer comment installer Drupal 8 sur un serveur CentOS 8 et le sécuriser avec le SSL gratuit de Let’s Encrypt.

Exigences

  • Un serveur exécutant CentOS 8.
  • Un nom de domaine valide pointé avec l’IP de ton serveur
  • Un mot de passe root est configuré sur le serveur.

Installe Nginx, MariaDB et PHP

Avant de commencer, tu dois installer le serveur LEMP sur ton serveur. Tu peux l’installer en exécutant la commande suivante :

dnf install nginx mariadb-server php php-fpm php-cli php-mbstring php-gd php-xml php-curl php-mysqlnd php-pdo php-json php-opcache -y

Une fois installé, démarre le service Nginx, MariaDB et php-fpm et active-les pour qu’ils démarrent après le redémarrage du système en utilisant la commande suivante :

systemctl start nginx
systemctl start php-fpm
systemctl start mariadb
systemctl enable nginx
systemctl enable php-fpm
systemctl enable mariadb

Configurer la base de données

Par défaut, MariaDB n’est pas sécurisée, tu devras donc la sécuriser. Tu peux la sécuriser en exécutant la commande suivante :

mysql_secure_installation

Réponds à toutes les questions comme indiqué ci-dessous :

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

Une fois que tu as terminé, connecte-toi au shell MariaDB à l’aide de la commande suivante :

mysql -u root -p

Indique ton mot de passe root à l’invite puis crée une base de données et un utilisateur pour Drupal avec la commande suivante :

MariaDB [(none)]> CREATE DATABASE drupaldb CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
MariaDB [(none)]> CREATE USER [email protected] IDENTIFIED BY "password";

Ensuite, accorde tous les privilèges à drupaldb avec la commande suivante :

MariaDB [(none)]> GRANT ALL ON drupaldb.* TO [email protected] IDENTIFIED BY "password";

Ensuite, annule les privilèges et quitte le shell MariaDB avec la commande suivante: :

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

Télécharger Drupal

Tout d’abord, tu dois télécharger la dernière version de Drupal sur son site officiel. Tu peux la télécharger avec la commande suivante :

wget https://ftp.drupal.org/files/projects/drupal-8.7.10.tar.gz

Une fois téléchargé, extrais le fichier téléchargé avec la commande suivante :

tar -xvzf drupal-8.7.10.tar.gz

Ensuite, déplace le répertoire extrait dans le répertoire racine du site Web de Nginx avec la commande suivante :

mv drupal-8.7.10 /var/www/html/drupal

Ensuite, crée un répertoire pour stocker les fichiers du site Web et renomme le fichier default.settings.php comme indiqué ci-dessous :

mkdir /var/www/html/drupal/sites/default/files
cp /var/www/html/drupal/sites/default/default.settings.php /var/www/html/drupal/sites/default/settings.php

Ensuite, change la propriété du répertoire Drupal en nginx comme indiqué ci-dessous :

chown -R nginx:nginx /var/www/html/drupal/

Configure Nginx pour Drupal

Tout d’abord, crée un fichier de configuration php-fpm pour Drupal avec la commande suivante :

nano /etc/php-fpm.d/drupal.conf

Ajoute les lignes suivantes :

[drupal]
user = nginx
group = nginx
listen.owner = nginx
listen.group = nginx
listen = /run/php-fpm/drupal.sock
pm = ondemand
pm.max_children =  50
pm.process_idle_timeout = 10s
pm.max_requests = 500
chdir = /

Sauvegarde et ferme le fichier lorsque tu as terminé. Ensuite, crée un fichier de configuration d’hôte virtuel Nginx pour Drupal :

nano /etc/nginx/conf.d/drupal.conf

Ajoute les lignes suivantes :

server {
    listen 80;
    server_name example.com;

    root /var/www/html/drupal;

    access_log /var/log/nginx/example.com.access.log;
    error_log /var/log/nginx/example.com.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 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;
    }
}

Sauvegarde et ferme le fichier. Ensuite, redémarre le service php-fpm et Nginx pour appliquer les modifications :

systemctl restart php-fpm
systemctl restart nginx

Configurer SELinux et le pare-feu

Par défaut, SELinux est activé dans CentOS 8. Tu devras donc configurer SELinux pour que Drupal fonctionne correctement.

Tout d’abord, autorise Drupal à écrire dans les répertoires de fichiers publics et privés avec la commande suivante :

semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/drupal(/.*)?"
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/drupal/sites/default/settings.php'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/drupal/sites/default/files'
restorecon -Rv /var/www/html/drupal
restorecon -v /var/www/html/drupal/sites/default/settings.php
restorecon -Rv /var/www/html/drupal/sites/default/files

Ensuite, autorise Drupal à envoyer des e-mails sortants avec la commande suivante :

setsebool -P httpd_can_sendmail on

Ensuite, tu devras créer une règle de pare-feu pour autoriser le service HTTP et HTTPS depuis les réseaux externes. Tu peux l’autoriser avec la commande suivante :

firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload

Sécurise Drupal avec Let’s Encrypt SSL

Drupal est maintenant installé et configuré. Il est temps de le sécuriser avec le SSL gratuit de Let’s Encrypt.

Pour ce faire, tu dois télécharger le client certbot sur ton serveur. Tu peux télécharger et définir la permission correcte en exécutant la commande suivante :

wget https://dl.eff.org/certbot-auto
mv certbot-auto /usr/local/bin/certbot-auto
chown root /usr/local/bin/certbot-auto
chmod 0755 /usr/local/bin/certbot-auto

Maintenant, exécute la commande suivante pour obtenir et installer un certificat SSL pour ton site Web Drupal.

certbot-auto --nginx -d example.com

La commande ci-dessus va d’abord installer toutes les dépendances requises sur ton serveur. Une fois installé, il te sera demandé de fournir une adresse e-mail et d’accepter les conditions de service comme indiqué ci-dessous :

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
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 example.com
Waiting for verification...
Cleaning up challenges
Deploying Certificate to VirtualHost /etc/nginx/conf.d/drupal.conf

Ensuite, tu devras choisir de rediriger ou non le trafic HTTP vers HTTPS comme indiqué ci-dessous :

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

Tape 2 et appuie sur Entrée pour continuer. Une fois l’installation terminée, tu devrais voir le résultat suivant :

Redirecting all traffic on port 80 to ssl in /etc/nginx/conf.d/drupal.conf

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

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

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/example.com/privkey.pem
   Your cert will expire on 2020-03-23. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot-auto
   again with the "certonly" option. To non-interactively renew *all*
   of your certificates, run "certbot-auto 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

Accéder au site Web de Drupal

Maintenant, ouvre ton navigateur Web et tape l’URL https://example.com. Tu seras redirigé vers la page suivante :

Choisis la langue

Sélectionne la langue de ton choix et clique sur le bouton Enregistrer et continuer. Tu devrais voir la page suivante :

Sélectionne le profil d'installation

Choisis ton profil d’installation et clique sur le bouton Enregistrer et continuer. Tu devrais voir la page suivante :

Configuration de la base de données

Indique les détails de ta base de données et clique sur le bouton Enregistrer et continuer. Tu devrais voir la page suivante :

Configurer le site Web

Indique le nom de ton site, le nom d’utilisateur admin, le mot de passe et clique sur le bouton Enregistrer et continuer. Tu devrais voir ton tableau de bord Drupal à la page suivante :

Bienvenue sur ton site Drupal

Félicitations ! Tu as réussi à installer et à sécuriser Drupal sur le serveur CentOS 8.

Vous aimerez aussi...