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.