Installer drupal 8 et drush 8.1 sur un Pi - test 2 (drupal composer)

Sur ce pi sous raspbian jessie, il y a apache2 + nginx 1.6.2, composer, suite à install (via ansible) de drupal-pi (pas à jour et trop ancien).  On va installer un Drupal 8 (en multi site) et drush 8.1.11

conf mysql

pour full utf8, ajout dans: /etc/mysql/my.cnf des lignes 

[mysqld]
 innodb_large_prefix=true
 innodb_file_format=barracuda
 innodb_file_per_table=true

Création base drucomp (full utf8) avec nom user drucomp et pw drucomp :

$ mysql -u root -p

mysql> CREATE DATABASE IF NOT EXISTS drucomp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
mysql> CREATE USER drucomp IDENTIFIED BY 'drucomp';
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES ON drucomp.* TO 'drucomp'@'localhost' IDENTIFIED BY 'drucomp';
mysql> FLUSH PRIVILEGES;
mysql> \q

conf srv web (hotes virtuels)

vérifier /etc/hosts puis
créer l'hote virtuel dans nginx (ici on copie une conf):

cd /etc/nginx/sites-available ; sudo cp druc1 druc2
sudo ln -s sites-available/druc2 sites-enabled/druc2

ou utiliser par ex 

server {
	listen 80;
	listen [::]:80;

	server_name druc1;
#
	root /home/pi/drucomp/web;
#	index index.html;
#
	location / {
		try_files $uri $uri/ =404;
	}
}

Modifier cette conf (sudo vi druc2) puis:

sudo service nginx reload ; sudo service nginx restart ; sudo service nginx status

le projet

On ne mettra pas de données dans drucomp (dont les fichiers seront à web/sites/default).
On va créer 2 sous-sites, nommés druc1 et druc2 (en web/sites/drucx), qui vont partager le meme code php. Pour ces sites, soit on créee d'autres db, soit on héberge leurs tables dans drucomp, avec les préfixes sx_ (à préciser dans les settings.php). Ne pas oublier les droits sur les .yml
-> Dans web/sites/all/drush (dossier créé), j'ai mis les alias.
-> créer des dossiers pour les conf (chown -R pi:www-data) drucomp/config/sync + drucomp/config/sync1 + drucomp/config/sync2...

commandes

composer create-project drupal-composer/drupal-project:8.x-dev nom-du-projet-à-créer --stability dev --no-interaction

pour maj (composer.json est dans drucomp, pas dans drucomp/web ou drucomp/web/sites/nomsite):  $ composer update

en multi site : doc officielle pas faite

Note: dès drupal 9, les commentaires de settings.php laissent penser qu'il va ici y avoir du changement : "un seul préfixe de table pour toutes les tables d'une db".

Préfixes de table pour certaines tables
'prefix' => array( on défini prefix comme un tableau

   'default'   => 'main_',
   'users'     => 'shared_',
   'sessions'  => 'shared_',
   'role'      => 'shared_',
   'authmap'   => 'shared_', 
),

'nom-table' => 'prefix'

default est obligatoire, car indique le préfixe pour toute table qui n'est pas citée dans ce tableau


On peux aussi utiliser les préfixes pour référencer une base de données (utile si base n'est pas le schéma par défaut, ou qu'on accède à diverses db du meme code php au meme moment):
    'prefix' => array(
      'default'   => 'main.',    'users'     => 'shared.',    'sessions'  => 'shared.',        'role'      => 'shared.',        'authmap'   => 'shared.',
    );

 

conf drupal

Le user est pi, nging et apache tournent sous www-data:

cd /home/pi/drucomp
chown -R pi:www-data web
sudo chmod 775 web
cd web/sites
cp example.settings.local.php default/settings.local.php
cp example.sites.php sites.php

/vers/doc-root/sites/default/settings.local.php

Lire ce fichier (décommenter en bas des lignes de default/settings.php et y indiquer les infos de la base). A chaque ajout de sous-site, il faut modifier ce fichier :

$settings['trusted_host_patterns'] = [
  '^drucomp$',
  '^localhost$',
  '^druc1$',
  '^druc2$',
];

Avec PHP 7.0, il est recommandé en dev, dans  PHP.ini :  zend.assertions=1   et à 0 en prod.

Quelques notes (ce qu'on peux y activer) :

  • active /sites/development.services.yml
  • log verbieuses (avec $config['system.logging']['error_level'] = 'verbose';)
  • css et js non compressés
  • $settings['extension_discovery_scan_tests'] = TRUE;
  • $settings['rebuild_access'] = FALSE;    donne accès à la page rebuild.php (vide cache db et php de drupal)
  • $settings['skip_permissions_hardening'] = TRUE;  (le module system vérifie périodiquement les perms du dossier du site, car le user du site ne doit pas pouvoir y écrire - ce qui peux poser soucis à git)
    On a alors des erreurs sur la protection non activée. Ou mettre à FALSE avec (cf https://www.drupal.org/node/2820620#comment-12083217) les droits:
    chmod 644 sites/default/settings.local.php
    chmod 644 sites/default/settings.php
    chmod 755 sites/default

     

Les nouveautés de /vers/doc-root/sites/default/settings.php

$settings['container_yamls'][] = $app_root . '/' . $site_path . '/services.yml';
$settings['trusted_host_patterns'] = array(
    '^localhost$',
    '^druc1$',
    '^druc2$',
    '^drucomp$',
  );

if (file_exists($app_root . '/' . $site_path . '/settings.local.php')) {
   include $app_root . '/' . $site_path . '/settings.local.php';
 }
$config_directories['sync'] = '../config/sync';

Active configuration settings : Par défaut, la conf active est stockée en base, dans la table config.
Avant d'installer drupal on peux créer un dossier (hors de l'arbo du site), configurer son chemin via $config_directories + overrider dans settings.php bootstrap_config_storage + dans services.yml config.storage.active

 

Ajout de module

voir "Using Composer to manage Drupal site dependencies" à https://www.drupal.org/node/2718229

"composer require drupal/devel" donne l'erreur "Could not find package drupal/devel at any version for your minimum-stability (stable). Check the package spelling or your minimum-stability" => 

Puis préparer le(s) site(s) suivant(s) avec cp -R default drc1

logo drush