wiki/HowtoDrupal.md

175 lines
5.3 KiB
Markdown
Raw Normal View History

2018-03-29 12:14:49 +02:00
---
categories: web CMS
title: Howto Drupal
---
2018-10-11 00:17:27 +02:00
* Documentation : <https://www.drupal.org/documentation>
2018-03-29 12:14:49 +02:00
2018-10-11 00:17:27 +02:00
[Drupal](https://www.drupal.org/) est un CMS libre écrit en PHP.
2018-03-29 12:38:40 +02:00
## Pré-requis
* Un serveur web (Apache/Nginx/...)
2022-08-26 12:31:21 +02:00
* Une base de données MySQL/Mariadb ou PostgreSQL
2022-10-18 11:35:52 +02:00
* PHP 8.1 (Drupal 10), PHP 7.4/8.0/8.1 (Drupal 9), PHP 7.3/7.4 (Drupal 7 et 8)
2019-03-22 21:47:38 +01:00
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/)
2022-08-26 11:32:28 +02:00
* [pré-requis pour Drupal 8 et versions suivantes](https://www.drupal.org/docs/system-requirements/)
2019-03-22 21:47:38 +01:00
### Apache
2019-01-11 15:15:07 +01:00
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
~~~
2019-01-11 15:25:17 +01:00
Le `DocumentRoot` d'Apache doit correspondre au dossier `web` qui se trouve à la racine du dossier du projet
2019-06-28 15:07:44 +02:00
### 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.
~~~
2022-08-26 12:31:21 +02:00
$ 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
~~~
2018-10-11 00:17:27 +02:00
2019-01-11 15:25:17 +01:00
On peut en suite, aller directement à l'addresse du site pour obtenir l'interface d'installation du site.
2022-08-29 08:37:49 +02:00
On aura notamment besoin d'avoir des identifiants pour accéder à une base de données.
2019-01-11 15:25:17 +01:00
### Cron
~~~
$ crontab -l
42 * * * * php /home/foo/www/vendor/bin/drush cron --root /home/foo/www/ 2&>1 >/dev/null
~~~
2018-10-11 00:17:27 +02:00
2022-08-26 12:31:21 +02:00
## drush
2022-10-04 14:42:50 +02:00
[Drush](https://www.drush.org/) est un outil en ligne de commande pour installer/gérer des sites Drupal.
2022-08-29 08:37:49 +02:00
2022-08-26 12:31:21 +02:00
### Installation
2022-09-16 12:20:29 +02:00
Pour installer la dernière version :
2022-08-26 12:31:21 +02:00
~~~
$ composer require drush/drush
2022-08-29 08:37:49 +02:00
$ composer require symfony/http-kernel
2022-08-26 12:31:21 +02:00
$ composer show drush/drush | grep ^version
versions : * 11.1.1
2022-08-29 08:37:49 +02:00
$ drush version
Drush Commandline Tool 11.1.1
2022-08-26 12:31:21 +02:00
~~~
2022-09-16 12:20:29 +02:00
Pour installer une ancienne version :
~~~
$ composer global require drush/drush:8.4.8
$ ./.composer/vendor/bin/drush version
Drush Version : 8.4.8
~~~
2022-10-04 14:42:50 +02:00
### Utilisation
Au sein d'un site Drupal, on peut vérifier/collecter différentes informations :
~~~
$ cd $ROOT
$ drush sql-connect
$ drush status
~~~
2022-10-27 17:32:48 +02:00
### 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).
~~~php
$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 à :
~~~php
/**
* 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';
}
}
~~~
2022-10-04 14:42:50 +02:00
2018-10-11 00:17:27 +02:00
## Optimisation
* Drupal 7 : <https://www.drupal.org/docs/7/managing-site-performance-and-scalability/optimizing-drupal-to-load-faster-server-mysql>
* Drupal 8 : <https://www.valuebound.com/resources/blog/a-beginners-guide-to-performance-optimization-drupal-8>
### 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é
2019-01-11 15:15:07 +01:00
### 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.
2018-10-11 00:17:27 +02:00
### CVE-2018-7600 // SA-CORE-2018-002
2018-03-29 12:38:40 +02:00
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"
~~~
2019-01-11 15:15:07 +01:00
## 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)
2019-03-22 21:47:38 +01:00
La solution est de créer un dossier `config/sync` a la racine du projet, avec des droits d'écritures pour le serveur web.