wiki/HowtoDrupal.md
2024-01-16 23:15:42 +01:00

6.2 KiB

categories title
web CMS Howto Drupal

Drupal est un CMS libre écrit en PHP.

Pré-requis

  • Un serveur web (Apache/Nginx/...)
  • Une base de données MySQL/Mariadb ou PostgreSQL
  • PHP 8.1 (Drupal 10), PHP 7.4/8.0/8.1 (Drupal 9), PHP 7.3/7.4 (Drupal 7 et 8)

Pour plus de détails, voir la documentation de Drupal notamment :

Apache

Drupal est livré avec des fichiers .htaccess qui utilisent un nombre varié de directives. La configuration Apache doit donc contenir au minimum :

AllowOverride AuthConfig Limit FileInfo Indexes Options=Indexes,MultiViews,ExecCGI,Includes

Le DocumentRoot d'Apache doit correspondre au dossier web qui se trouve à la racine du dossier du projet

Nginx

Un exemple complet de vhost Nginx pour Drupal est accessible sur dans la documentation de Nginx

PHP

Certains ajustements sont nécessaires

Web ( FPM / libapache2-mod-php )

TODO?

CLI

C'est surtout pour composer et drush qui nécessitent :

  • (composer) Le non blocage de la fonction putenv()
  • (composer) Autoriser l'ouverture d'url (allow_url_fopen)
  • (drush) Aucune fonction désactivée (ie: disable_functions vide) sinon drush refuse de fonctionner....

Installation

Il existe plusieurs méthodes pour installer Drupal. La méthode conseillée est d'utiliser composer

Ainsi, une installation par défaut va se faire avec la commande suivante va créer une nouvelle installation et récupérer toutes les dépendances avec composer.

$ mkdir www/
$ composer create-project drupal/recommended-project www
$ cd www/
$ composer show | grep ^drupal
drupal/core                        10.2.1   Drupal is an open source content management platform powering millions of websites and applications.
drupal/core-composer-scaffold      10.2.1   A flexible Composer project scaffold builder.
drupal/core-project-message        10.2.1   Adds a message after Composer installation.
drupal/core-recommended            10.2.1   Core and its dependencies with known-compatible minor versions. Require this project INSTEAD OF drupal/core.

On peut en suite, aller directement à l'addresse du site pour obtenir l'interface d'installation du site. On aura notamment besoin d'avoir des identifiants pour accéder à une base de données.

Cron

$ crontab -l 

42 * * * * php /home/foo/www/vendor/bin/drush cron --root /home/foo/www/ 2&>1 >/dev/null

drush

Drush est un outil en ligne de commande pour installer/gérer des sites Drupal.

Installation

Pour installer la dernière version :

$ cd $ROOT
$ composer require drush/drush
$ composer require symfony/http-kernel
$ composer show drush/drush | grep ^version
versions : * 12.4.3

$ php ./vendor/bin/drush version
Drush version : 12.4.3.0 

Pour installer une ancienne version :

$ composer global require drush/drush:8.4.8

$ php ./.composer/vendor/bin/drush version
 Drush Version   :  8.4.8 

ou

$ composer require drush/drush:8.4.8

$ php ./vendor/bin/drush version
 Drush Version   :  8.4.8 

Utilisation

Au sein d'un site Drupal, on peut vérifier/collecter différentes informations :

$ cd $ROOT

$ drush sql-connect

$ drush status
Drupal version : 10.2.1
Site URI       : http://default
PHP binary     : /usr/bin/php8.2
PHP config     : /etc/php/8.2/cli/php.ini
PHP OS         : Linux
PHP version    : 8.2.7
Drush script   : /home/foo/www/vendor/bin/drush
Drush version  : 12.4.3.0                      
Drush temp     : /tmp
Drush configs  : /home/foo/www/vendor/drush/drush/drush.yml
Drupal root    : /home/foo/www/web
Site path      : sites/default

Configuration derrière un reverse-proxy

Dans la configuration de Drupal, des directives sont à activer pour la prise en compte des headers HTTP X-Forwarded-For).

$settings['reverse_proxy'] = TRUE;

$settings['reverse_proxy_addresses'] = ['192.0.2.1'];

Pour le HTTPS (signalé via X-Forwarded-Proto), il y a déjà des directives de configuration pour prendre ce réglage en compte. Elles ressemblent à :

  /**
   * If external request was HTTPS but internal request is HTTP, set $_SERVER['HTTPS'] so Drupal detects the right scheme.
   */
  if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && isset($_SERVER['REQUEST_SCHEME'])) {
    if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' && $_SERVER["REQUEST_SCHEME"] == 'http') {
      $_SERVER['HTTPS'] = 'on';
    }
  }

Optimisation

watchdog

Désactiver le logging non nécessaire en prod... surtout dans la base de données : https://www.karelbemelmans.com/2015/05/drupal-watchdog-logging-dblog-vs-syslog/

Sécurité

Annonces de sécurité

Nous recommandons aux développeurs de garder un oeuil sur les annonces de sécurité faites par l'équipe Drupal.

CVE-2018-7600 // SA-CORE-2018-002

Règle mod_security de protection (théorique)

SecRule ARGS_GET_NAMES|ARGS_POST_NAMES|REQUEST_COOKIES_NAMES "^#" "t:none,log,deny,msg:'CVE-2018-7600/Drupal-SA-CORE-2018-002 -- Deny # in (cookie|query|post) names',id:300000001"

Plomberie

An automated attempt to create the directory ../config/sync failed, possibly due to a permissions problem.

Ça arrive quand on a initialisé un projet Drupal depuis composer. Il semble que ce soit un vieux bug non corrigé

La solution est de créer un dossier config/sync a la racine du projet, avec des droits d'écritures pour le serveur web.