GNU/Linux >> Tutoriels Linux >  >> Cent OS

Installer et configurer Drupal 8 avec Nginx et Lets 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 tout type de sites Web. Il est écrit en PHP et utilise MySQL/MariaDB pour stocker ses données. Drupal fournit un riche ensemble de fonctionnalités qui peuvent être étendues par des milliers de modules complémentaires. 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 le serveur MS SQL. Drupal est livré avec une interface utilisateur Web simple et conviviale qui vous permet de créer des sites Web sans aucune connaissance en matière de codage.

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

Exigences

  • Un serveur exécutant CentOS 8.
  • Un nom de domaine valide pointé vers l'IP de votre serveur
  • Un mot de passe root est configuré sur le serveur.

Installer Nginx, MariaDB et PHP

Avant de commencer, vous devrez installer le serveur LEMP sur votre serveur. Vous pouvez 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és, démarrez les services Nginx, MariaDB et php-fpm et autorisez-les à démarrer après le redémarrage du système à l'aide de 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, vous devrez donc la sécuriser. Vous pouvez le sécuriser en exécutant la commande suivante :

mysql_secure_installation

Répondez à 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 vous avez terminé, connectez-vous au shell MariaDB avec la commande suivante :

mysql -u root -p

Fournissez votre mot de passe root lorsque vous y êtes invité, puis créez 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, accordez tous les privilèges à drupaldb avec la commande suivante :

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

Ensuite, videz les privilèges et quittez le shell MariaDB avec la commande suivante :

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

Télécharger Drupal

Tout d'abord, vous devrez télécharger la dernière version de Drupal depuis leur site officiel. Vous pouvez le 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é, extrayez le fichier téléchargé avec la commande suivante :

tar -xvzf drupal-8.7.10.tar.gz

Ensuite, déplacez le répertoire extrait vers le répertoire racine Web de Nginx avec la commande suivante :

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

Ensuite, créez un répertoire pour stocker les fichiers du site Web et renommez 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, changez la propriété du répertoire Drupal en nginx comme indiqué ci-dessous :

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

Configurer Nginx pour Drupal

Commencez par créer un fichier de configuration php-fpm pour Drupal avec la commande suivante :

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

Ajoutez 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 = /

Enregistrez et fermez le fichier lorsque vous avez terminé. Créez ensuite un fichier de configuration d'hôte virtuel Nginx pour Drupal :

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

Ajoutez 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;
    }
}

Enregistrez et fermez le fichier. Ensuite, redémarrez php-fpm et le service 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. Vous devrez donc configurer SELinux pour que Drupal fonctionne correctement.

Tout d'abord, permet à Drupal d'é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, permet à Drupal d'envoyer des e-mails sortants avec la commande suivante :

setsebool -P httpd_can_sendmail on

Ensuite, vous devrez créer une règle de pare-feu pour autoriser les services HTTP et HTTPS à partir de réseaux externes. Vous pouvez l'autoriser avec la commande suivante :

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

Sécuriser Drupal avec Let's Encrypt SSL

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

Pour ce faire, vous devrez télécharger le client certbot sur votre serveur. Vous pouvez télécharger et définir l'autorisation appropriée 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écutez la commande suivante pour obtenir et installer un certificat SSL pour votre site Web Drupal.

certbot-auto --nginx -d example.com

La commande ci-dessus installera d'abord toutes les dépendances requises sur votre serveur. Une fois installé, il vous sera demandé de fournir une adresse e-mail et d'accepter les conditions d'utilisation 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, vous devrez 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

Tapez 2 et appuyez sur Entrée pour continuer. Une fois l'installation terminée, vous devriez voir la sortie suivante :

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 Drupal

Maintenant, ouvrez votre navigateur Web et tapez l'URL https://example.com . Vous serez redirigé vers la page suivante :

Sélectionnez la langue souhaitée et cliquez sur Enregistrer et continuer bouton. Vous devriez voir la page suivante :

Choisissez votre profil d'installation et cliquez sur Enregistrer et continuer bouton. Vous devriez voir la page suivante :

Fournissez les détails de votre base de données et cliquez sur Enregistrer et continuer bouton. Vous devriez voir la page suivante :

Indiquez le nom de votre site, le nom d'utilisateur de l'administrateur, le mot de passe et cliquez sur Enregistrer et continuer bouton. Vous devriez voir votre tableau de bord Drupal sur la page suivante :

Toutes nos félicitations! vous avez installé et sécurisé avec succès Drupal sur le serveur CentOS 8.


Cent OS
  1. Comment installer et configurer Nginx sur CentOS 7

  2. Sécurisez Nginx avec Lets Encrypt sur CentOS 7

  3. Sécurisez Apache avec Lets Encrypt sur CentOS 7

  4. Comment installer et configurer Askbot avec Nginx sur CentOS 7

  5. Comment installer OwnCloud 8 avec Nginx et MariaDB sur CentOS 7

Comment installer Askbot avec Nginx et sécuriser avec Lets Encrypt sur CentOS 8

Comment installer Drupal avec Nginx et Lets Encrypt SSL sur Ubuntu 20.04 LTS

Comment installer Drupal 9 avec Nginx et Lets Encrypt SSL sur Debian 10

Comment installer Shopware 6 avec NGINX et Lets Encrypt sur CentOS 8

Comment installer PrestaShop avec Apache et Lets Encrypt SSL sur CentOS 8

Installation et configuration de PhpMyAdmin avec Nginx sur CentOS 7