Usines à site avec Drupal - Meetup Drupal Strasbourg

2 860 vues

Publié le

"Usine à sites avec Drupal : comment choisir la meilleure approche ?"

Slides de la présentation de Nicolas Loye et Jurgen Pecher au premier Meetup Drupal de l'Est, 19/06/2014, Strasbourg.

Une usine à site permet de créer plusieurs sites sur le même serveur avec la même installation Drupal, et de pouvoir les dupliquer pour les adapter facilement à un nouveau besoin.

Publié dans : Technologie
0 commentaire
3 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
2 860
Sur SlideShare
0
Issues des intégrations
0
Intégrations
230
Actions
Partages
0
Téléchargements
72
Commentaires
0
J’aime
3
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Usines à site avec Drupal - Meetup Drupal Strasbourg

  1. 1. usine à sites avec Drupal Drupal Meetup Strasbourg 19-06-2014 Nicolas LOYE Jürgen PECHER @ ACTENCY
  2. 2. Quoi, qui et comment ? J / JN
  3. 3. Le programme Première mi-temps : ○ Intro / Présentation ○ Usine à sites – les besoins ○ Architectures et exemples ○ Comment choisir ? ○ Les solutions Drupal ○ Questions & réponses Deuxième mi-temps : ○ Installation profiles ○ Drush ○ Organic groups ○ Domain accessJN / N
  4. 4. Présentation - Nicolas Chef de projet technique & Lead Développeur Drupal @ Actency Drupal-addict depuis 2006 Projets professionnels sur Drupal 4.5 à 7 Distrib standard / Pressflow / Commerce kickstart / Open Atrium Module contrib Drupal 8 Présence régulière en Drupalcon Patch, module & translation contribs & reviews. Jeux de rôles, jeux vidéos, heavy metal. N / J
  5. 5. Présentation - Jürgen Directeur Technique @ Actency Drupal-addict depuis 2006. J’ai piloté des projets de D4.6 à D7, des petits aux grands, de 5K€ à plus d’1M€. Je porte les casquettes de Capitaine, Navigateur, Architecte, Consultant et éternel insatisfait. J’aime l’esprit Open Source de la communauté Drupal, j’adore les DrupalCon’s. Et pour prendre un break, je pratique la plongée, le fitness et je suis fan de Metal... Mais il me reste toujours suffisamment d’énergie pour mon ultime passion : Drupal bien sûr… ;-) J / J
  6. 6. Pourquoi une usine à sites? J / J
  7. 7. La promesse … ?!? J / J
  8. 8. Pourquoi une usine à sites? Les besoins - client : ○ Temps - Mise en production dans un délai plus court ○ Réduction du coût de fabrication ○ Réduction du coût de maintenance ○ Respect d’un catalogue de fonctionnalités et de layout communs ○ “Recyclage” d’un site existant J / N
  9. 9. Pourquoi une usine à sites? Les besoins - agence : ○ Temps - Mise en production dans un délai plus court ○ Utilisation d’un catalogue de fonctionnalités et layouts testés, validés et approuvés ○ Réduction du coût de fabrication N / J
  10. 10. Les architectures potentielles J / J
  11. 11. Les architectures potentielles Sur la base de ces éléments Code + base de données on distingue trois types d’architecture : 1. Sites 100 % indépendants - chaque site dispose de son propre code - chaque site dispose de sa propre base de données 2. Sites 50% indépendants - les sites partagent le même code - chaque site dispose de sa propre base de données 3. Sites 0% indépendants - les sites partagent le même code et la même base de données J / N
  12. 12. Exemple 01 Sites 100 % indépendants Socle des sites de production une agence / drupal-shop Chaque nouveau projet se base sur le même set de modules, de configurations, de themes… qui ont été validés et représentent le socle de chaque nouveau site. Le site évoluera ensuite (enrichissement du code, configurations différenciées) et aura sa propre base de données. N / N
  13. 13. Exemple 02 Sites 50 % indépendants Sites d’administration / portail avec microsites ○ Ensemble de sites ayant leurs fonctionnalités propres mais partageant des éléments (configurations, contenus, utilisateurs.) ○ Code base commune, les mises à jour du code sont partagées, le même thème peut être utilisé sur tous les sites, etc. ○ Configurations indépendantes, modules actifs différents. ○ Possibilité de partager tout ou partie de la base entre les différentes instances. N / J
  14. 14. Exemple 03 Sites 0 % indépendants Site d’une école nationale ○ Une présentation commune (home-page, pages institutionnelles) ○ Des sections dédiées à chaque école avec leur propres contenus, publication-workflows, fonctionnalités, administrateurs et permissions d’utilisateur. (CRUD) ○ Les différentes sections des sites sont définies dans l’url-pattern comme par exemple : http://www.epitech.eu/strasbourg/ecole-informatique-strasbourg.aspx J / J
  15. 15. Les solutions Drupal J / J
  16. 16. Solutions drupal Sites 100% indépendants ○ Installation profiles + outils de deployment Sites 50% indépendants ○ Multi-sites + Installation profiles + outils de deployment Sites 0% indépendants ○ Organic groups + modules d’extension ○ Domain access + modules d’extension J / N
  17. 17. Installation profiles + outils de deployment Les profils d’installation de Drupal … ... offrent des caractéristiques et fonctionnalités pour un type spécifique de site packagé en une seule code base contenant Drupal, les modules, thèmes et configurations prédéfinies souhaitées. Ils permettent de mettre en place rapidement un site complexe d'utilisation spécifique en moins d'étapes que si l'installation et la configuration des éléments étaient faits individuellement. N / N
  18. 18. Profile d’installation + outils de deployment N / J
  19. 19. Multi-sites La promesse : Si vous utilisez plus d'un site Drupal, vous pouvez simplifier la gestion et la mise à niveau de vos sites en utilisant l’architecture multi-site. Multi-site vous permet de partager une seule installation Drupal (la code base, les modules contrib et thèmes) entre plusieurs sites. J / J
  20. 20. Multi-sites Le concept Site unique : Multi-sites J / J
  21. 21. Multi-sites “The good, the bad and the ugly” J / J
  22. 22. Multi-sites “des instances distincts … THE GOOD, … ” J / N
  23. 23. Multi-sites “… le partage de certaines tables ... THE BAD ” Exemple : Le site 02 partage certaines tables de la base de données du site 01. Cette configuration sera définie dans le fichier settings.php du site 02. Des erreurs multiples sont possibles : ○ Désynchronisation de la configuration et du fichier settings.php. ○ Certains custom hooks peuvent ne plus fonctionner comme attendu. ○ Problèmes de caching. $databases = array ( 'default' => array ( 'default' => array ( 'database' => 'dev_xxxx_xxxxxxxx', 'username' => 'xxxx-xxxx-user', 'password' => '***************', 'host' => 'localhost', 'port' => '', 'driver' => 'mysql', 'prefix' => array( 'default' => '', //user_tables shared 'users' => 'dev_xxxx_public.', 'sessions' => 'dev_xxxx_public.', 'role' => 'dev_xxxx_public.', 'users_roles' => 'dev_xxxx_public.', // user authentification tokens shared 'tokenauth_tokens' => 'dev_xxxx_public.', //user_fields shared ... N / N
  24. 24. Multi-sites “Connection temporaire à une autre base de données... THE UGLY” Exemple : Le site 02 se connecte temporairement à une autre base de données. Des erreurs multiples sont possibles : ○ Désynchronisation de la configuration et du fichier settings.php. ○ Certains custom hooks peuvent ne plus fonctionner comme attendu. ○ Le code custom contient un risque supplémentaire : requêter la “mauvaise” table/base de données. ○ Problèmes de caching. Dans le fichier settings.php : <?php $databases = array(); $databases['default']['default'] = array( // Drupal's default credentials here. // This is where the Drupal core will store its data. ); $databases['my_other_db']['default'] = array( // Your secondary database's credentials here. // You will be able to explicitly connect to this database from your modules. ); ?> Dans votre module custom : <?php // Use the database we set up earlier db_set_active('my_other_db'); // Run some queries, process some data // ... // Go back to the default database, // otherwise Drupal will not be able to access its own data later on. db_set_active(); ?> N / N
  25. 25. Domain access + modules d’extension Le projet Domain Access est une suite de modules qui fournissent des outils pour l'exécution de groupes de sites affiliés au sein d'une installation Drupal avec code et base de données uniques. Par défaut, ces sites partagent toutes les tables de l’installation Drupal. Toutes les différences de configuration sont assignées à des contextes basés sur des domaines différents. N / N
  26. 26. Domain access + modules d’extension N / N
  27. 27. Domain access + modules d’extension - création d’un “site” N / N
  28. 28. Domain access + modules d’extension - settings per “site” N / J
  29. 29. Organic Groups + modules d’extension Cette suite de modules permet aux utilisateurs de créer et de gérer leurs propres «groupes». Un groupe est créé par un utilisateur propriétaire unique, qui dispose de permissions spéciales, y compris la possibilité de supprimer le groupe. Les administrateurs de groupe ont également des permissions spéciales, mais ne peuvent pas supprimer le groupe, sauf s'ils sont définis comme propriétaires du groupe. J / J
  30. 30. Organic Groups + modules d’extension J / J
  31. 31. Organic Groups + modules d’extension - création d’une “site” J / J
  32. 32. Organic Groups + modules d’extension -settings per “site” J / J
  33. 33. Les critères de choix J / J
  34. 34. Comparaison : Indépendance sites 100% 50% 0% Partage du code non oui oui Partage de la bdd non non oui Facilité de création d’un nouveau site non non oui/non Facilité de maintenance non oui/non oui SSO “par défaut” non non oui Partage des utilisateurs “par défaut” non non oui Partage des contenus “par défaut” non non oui Partage des configurations “par défaut” non non oui BO/administration partagée non non oui Indépendance de code et déploiement oui non non Indépendance d’hébergement oui non non Pas de “single point of failure” oui non non J / J
  35. 35. Organic Groups VS. Domain Access Fonctionnalités Organic Groups Domain Access Facilité de création d’un nouveau “site” oui non Chaque site possède sa propre URL non oui Rôles et permissions spécifiques oui oui Chaque site peut utiliser son propre theme oui oui Intégration d’un Variable realm oui oui Intégration de workbench moderation oui oui Intégration i18n oui oui Vocabularies dédiés oui oui Menus dédiés oui oui Block-visibilité par “site” oui oui J / J
  36. 36. Vos questions ...
  37. 37. Deuxième mi-temps ... J / N
  38. 38. Installation profiles ... N / N
  39. 39. Installation profiles Le profil embarque toutes les configurations et modules testés et validés dont vous avez besoin. Permet de modifier les formulaires d’installation standards pour adapter la configuration aux inputs fournis. Des contenus pré-définis peuvent être créés dès l’installation. N / N
  40. 40. Installation profiles Fichier .info > identique à un module 1. name = MyDrupalProfile 2. description = Install my most commonly used modules and configurations. 3. version = VERSION 4. core = 7.x 5. ; STANDARD 6. dependencies[] = block 7. dependencies[] = color 8. dependencies[] = comment 9. ; CUSTOM 10. dependencies[] = my_module N / N
  41. 41. Installation profiles Fichier .install > identique à un module Mêmes opérations qu’un .install standard : ○ Création de schemas customs ○ Modifications de configs ○ Création de contenus ○ Définitions de permissions ○ Possibilité de définir des hook_update_N() ○ Etc. N / N
  42. 42. Installation profiles Fichier .profile Opérations spécifiques réalisées pendant l’installation : ○ Modification des étapes de l’installation en soi (ajout/altération des étapes de l’install) ○ Altération des formulaires présentés à l’utilisateur pendant l’install ○ Autres modifications diverses N / J
  43. 43. Drush ... J / J
  44. 44. Drush En quelques mots : ○ Drush ou “drupal shell” est un outil de ligne de commandes qui facilite la création de site et les processus de maintenance. ○ Package de commandes CLI spécifiques Drupal. ○ Gain de temps. ○ Extensible par simple écriture de hooks. ○ Accès à des fonctionnalités avancées de Drupal. ○ Cool & rock’n’roll ! J / N
  45. 45. Drush N / N
  46. 46. Drush / make Fichier .make / Dites à Drush quoi installer 1. ; This file was auto-generated by drush make 2. core = 7.x 3. api = 2 4. defaults[projects][subdir] = contrib 5. projects[drupal][version] = 7.28 6. ; Modules 7. projects[] = views_bulk_operations 8. projects[admin_menu][version] = 3.0-rc4 9. projects[admin_menu][patch][1961178] = "http://drupal.org/files/admin_menu-ie6detect- 1961178-1.patch" 10. projects[] = views 11. projects[] = backup_migrate 12. projects[] = ctools 13. projects[] = content_access N / N
  47. 47. Drush / make Installation rapide et personnalisée drush site-install drupency --db-url="mysql://USER:PASS@localhost/DB_NAME" --site-name="My drupal site" --account-name="hodor" --account-pass="hodor" -y Projet information for drupal retrieved. [ok] Projet information for views_bulk_operations retrieved. [ok] Projet information for admin_menu retrieved. [ok] Projet information for views retrieved. [ok] Projet information for backup_migrate retrieved. [ok] Projet information for ctools retrieved. [ok] Projet information for content_access retrieved. [ok] drupal download from http://ftp.drupal.org/files/projects/XXXX [ok] views_bulk_operations download from http://ftp.drupal.org/files/projects/XXXX [ok] admin_menu download from http://ftp.drupal.org/files/projects/XXXX [ok] N / J
  48. 48. Drush / Core-quick-install Génère une instance Drupal standard dans un dossier avec la base de données associée. ○ Installation rapide ○ Permet de spécifier un profil d’installation ○ Plusieurs arguments permettent de customiser l’installation. drush qd -y Starting drupal installation. This takes a few seconds ... J / J
  49. 49. Variables realm ... J / J
  50. 50. Variable API 01 1. /** 2. * Implements hook_variable_info(). 3. */ 4. function mymodule_variable_info($options) { 5. $variable['needed_variable'] = array( 6. 'title' => t('my needed variable', array(), $options), 7. 'description' => t('myneeded_variable for the og and ad realms', array(), $options), 8. 'type' => 'properties', 9. 'default callback' => 'color_bartik_variable_defaults', 10. 'group' => 'meetup_demo', 11. 'localize' => TRUE, 12. 'multidomain' => TRUE, 13. ); 14. ; 15. ); 16. return $variable; 17. } 18. /** 19. * Callback for default theme settings 20. */ 21. function color_bartik_variable_defaults($variable, $options) { 22. return array( 23. 'taa' => ‘’, J / J
  51. 51. Variable API 02 function mymodule_variable_group_info() { $groups['meetup_demo'] = array( 'title' => t('Meetup Demo'), 'description' => t('variables made accessible by a custom module using the variable API'), 'access' => 'administer site configuration', ); return $groups; } J / N
  52. 52. Variable API 03 J / N
  53. 53. Aegir ... N / N
  54. 54. Aegir Logiciel de gestion de déploiement et de maintenance d’instances drupal. ○ Gestion de plusieurs versions / distrib du core. ○ Gestion des updates de modules et du core (spécification de la version de destination pour chaque update). ○ Contrôle des code base et bases de données. ○ Gestion des queues, batch, cron, etc. ○ Compatible drush. ○ Requiert une infrastructure assez spécifique. N / N
  55. 55. Aegir N
  56. 56. Merci de votre attention Vos questions ...

×