--- categories: web CMS title: Howto Drupal --- * Documentation : [Drupal](https://www.drupal.org/) 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 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](https://www.drupal.org/docs/user_guide/en/install-requirements.html) notamment : * [pré-requis pour Drupal 7](https://www.drupal.org/docs/7/system-requirements/) * [pré-requis pour Drupal 8 et versions suivantes](https://www.drupal.org/docs/system-requirements/) ### Apache Drupal est livré avec des fichiers `.htaccess` qui utilisent un nombre varié de directives. La configuration Apache doit donc contenir au minimum : ~~~{.apache} 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](https://www.nginx.com/resources/wiki/start/topics/recipes/drupal/) ### 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](https://www.drupal.org/docs/8/install/step-1-get-the-code). Mais la méthode d'amorcer un nouveau site/projet avec 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 create-project drupal/recommended-project www $ composer show | grep ^drupal drupal/core 9.4.5 drupal/core-composer-scaffold 9.4.5 drupal/core-project-message 9.4.5 drupal/core-recommended 9.4.5 ~~~ 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 ### Installation ~~~ $ composer require drush/drush $ composer require symfony/http-kernel $ composer show drush/drush | grep ^version versions : * 11.1.1 $ drush version Drush Commandline Tool 11.1.1 ~~~ ## Optimisation * Drupal 7 : * Drupal 8 : ### watchdog Désactiver le logging non nécessaire en prod... surtout dans la base de données : ## Sécurité ### Annonces de sécurité Nous recommandons aux développeurs de garder un oeuil sur [les annonces de sécurité](https://www.drupal.org/security) 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é](https://github.com/drupal-composer/drupal-project/issues/274) La solution est de créer un dossier `config/sync` a la racine du projet, avec des droits d'écritures pour le serveur web.