Les solutions multi sites avec Joomla!

22921 vues
16 juillet 2017
Cyril
joomla-multi-site

 

Lors de nos formations avancées sur le CMS Joomla! nous abordons la question des possibilités multi sites du CMS. C'est un fait trop souvent méconnu, le CMS Joomla! est nativement multi sites, même si quelques extensions majeures peuvent enrichir cette fonctionnalité. 

La gestion multi-sites revêt plusieurs avantages:

  • éviter des synchronisation complexes entre sites par le partage de contenus ou de fonctions
  • une économie de place car un même jeu de fichiers est utilisé pour plusieurs sites
  • une économie de gestion par une mise à jour et une maintenance des sites immédiate (vous n'avez plus qu'un seul site à mettre à jour)

Nous avons retenu pour ces articles 4 solutions qui sont:

  • Joomla! lui même qui est multisites nativement
  • JMS
  • Alterbrains MightySites
  • SEBLOD

 

Joomla! est nativement multi sites

C'est un fait peu connu mais qui est directement lié au fait que les liens sous Joomla! sont par défaut relatifs. Les urls qui sont générées entre les pages sont indépendantes du domaine.

La gestion des Virtual Hosts

Il faut commencer par préciser, au niveau du serveur, que votre site Joomla! répond à deux domaines (directive ServerAlias dans le vhost du domaine) avec par exemple:

ServerName monsite1.com

ServerAlias monsite2.com

Alors dans ce cas vous avez déjà un projet multi sites sans installer aucune extension sur votre site Joomla!. A ce moment les deux urls affichent cependant le même site. 

La suite permet de préciser des arborescences et des contenus différents par site.

Création des deux pages d'accueil

Vu que Joomla! ne peut définir qu'un seul élément de menu principal (la home du site) nous définirons que la page d'accueil du site1 (lien vers l'article "accueil site 1") est http://www.monsite1.com et que la page d'accueil du site2 sera http://www.monsite2.com/accueil-site2 (vers l'article "accueil site 2").

Faisons deux menus, un pour chaque site avec une page d'accueil par site. Pour cela il faut créer deux articles et deux liens de menus dans deux menus séparés:

articles accueil multisites

Voici les 2 menus:menus multisites

 

Et ici le lien de menu du premier menu:

lien menu accueil multisites

 

Affichage des menus par site

Chaque menu est ensuite affiché par un module distinct:

modules menus multisites

 

Pour indiquer qu'un seul de ces modules de menu sera affiché par domaine on utilise le très connu Advanced Module Manager (version gratuite) qui permet de préciser l'affichage du module selon l'url:

module menu1 adm

Réécriture URL site2

Si on ne fait rien, un appel vers http://www.monsite2.com renvoie toujours vers le site 1 qui est le site par défaut, en affichant l'accueil du site1. Pour éviter cela il faut ajouter une redirection dans le .htaccess à la racine du projet Joomla!:

rewrite url

 

Passerelle entre les sites

Si vous faites un lien vers un second article depuis l'article 1  (http://www.monsite1.com/lien-vers-article2) il suffit de préciser /lien-vers-article2 et le routeur de Joomla! fait le reste. Mais rien ne vous empêche de préciser depuis cet article1 un lien absolu comme http://www.monsite2.com/lien-vers-accueil2.

 

Le résultat

Si on appelle http://monsite1.com on a l'affichage suivant (noter l'affichage du module de menu1 seulement)

monsite1 accueil

Et si on appelle http://monsite2.com on aura (noter l'affichage du module de menu2 seulement et la redirection automatique vers l'article d'accueil du site 2):

monsite2 accueil

 

Un design différent par site

Reste la question d'un design différent par site mais là encore tout est natif puisque depuis longtemps on peut spécifier un style de template par élément de menu:

template site2

 

Les solutions suivantes vont ajouter chacune des fonctions supplémentaires à cette gestion multi sites comme par exemple le contrôle du partage des contenus sur les différents sites ou la génération facilité de sites clones.

 

JMS: Le pionnier

logo jms multisitesSorti en juillet 2008, JMS (Joomla Multi Sites) est la première extension majeure pour gérer plusieurs sites avec une seule installation Joomla! fonctionnant d'abord sur les version 1.5 puis 2.5, JMS a su s'adapter et se bonifier avec le temps pour être compatibles avec les dernières versions 3.x du CMS.

Les versions et évolutions de JMS

Le principe de JMS est qu'avec cette extension vous pouvez utiliser une seule installation de Joomla! pour gérer plusieurs bases de données ou une seule base de données avec des tables possédant des préfixes différents (par site).

Chaque site dispose aussi de son propre fichier de configuration. On peut aussi installer ou desinstaller une extension à l'intérieur d'un site "esclave". Un site "esclave" peut seulement reinstaller une extension qui a été installée précédemment sur le site "maître" et seulement si il s'agit de la même version.

Chaque site esclave dispose de ses propres répertoires template, image, media, cache, log, et tmp.

On peut aussi créer des sites esclaves depuis le front office. Ces sites esclaves peuvent être soit "libres" soit "payants" dans une logique d'usine à sites payants.

gestion sites jms

La version 1.2 de juin 2009 a apporté la possibilité de dupliquer un site dans une autre base de données. La gestion des "templates de sites" (un ensemble de règles de duplication depuis le site maître) a été aussi simplifiée avec notamment la possibilité de mettre à jour automatiquement les sites esclaves selon une mise à jour des extensions sur site template.

Avec cette version on dispose d'un panneau de contrôle pour définir quels composants sont partagés entre les sites et quelles extensions doivent être déployées ou mises à jour sur les sites esclaves à partir des sites maître ou template.

La version 1.3 de Juillet 2012 apporte la possibilité de générer des variantes de sites selon la géolocalisation ou la détection du support (les mobiles en particulier).

La gestion des sites est très simple et consiste en la déclaration du nom de domaine (ou de sous-domaine) qu'on veut partager avec le site maître (la première installation de Joomla!). Voici maintenant les différentes possibilités d'architecture et d'organisation des sites esclaves:

Architecture multi sites

Soit on fonctionne avec plusieurs bases de données soit avec une seule base mais des prefixes de tables différents par site.

Création d'un site esclave

On peut créer un site esclave directement ou en utilisant un template de site qui est en fait une liste de regles de création et de partage des informations du site maître vers le site esclave. 

Quand on partage une extension (par exemple les utilisateurs Joomla!) il n'y a pas de copie de la table mais la création d'une vue (au sens SQL) sur la table existante, c'est à dire d'une sorte de lien ou de raccourci vers la table physique.

On peut créer un site esclave selon 3 méthodes:

  • nouveau site esclave vierge en utilisant l'installation Joomla!
  • site esclave répliqué en utilisant un template de site
  • site esclave partagé pour créer une variante d'un site en partageant certaines parties (composants) mais en conservant certaines particularités.

Même dans la 3eme option il y a des limitations sur les règles de partage. On n'a pas forcément toute latitude sur le partage des contenus par exemple. On ne peut pas définir quels contenus sont partagés ou uniquement visibles sur tel ou tel site. C'est tout ou rien. Il existe cependant des extensions de JMS comme "Partial User Sharing" ou "Articles Sharing" pour contourner ces limitations.

Documentation et support

La documentation de JMS est assez fournie et vous guidera pas à pas dans l'installation et la configuration de vos sites que ce soit à l'intérieur du CMS ou au niveau du serveur qui héberge les le site avec la gestion des différents noms de domaines, sous domaines et vhosts.

A noter aussi la présence de l'extension "Single Sign-In for domains" qui permet une connexion automatique sur un site esclave à partir du moment qu'on est connecté sur un des autres sites (si le composant com_users est partagé).

Le support répond rapidement (en français ou en anglais) et le forum contient de précieuses informations. Le site contient aussi beaucoup de tutoriels avec des vidéos pour vous aider dans le gestion de cette extension qui reste assez complexe.

Par contre on peut regretter que le produit ne soit pas plus souvent réactualisé, la version 1.3 datant de 2012 (même si des correctifs sont arrivés en 2015). 

Limitations

La gestion multi sites est un sujet complexe qui ne va pas sans quelques limitations qu'il faut bien comprendre avant de choisir une extension.

Une difficulté principale réside dans la granularité du partage entre les sites. Au delà des composants natifs (com_content, com_users...) le partage n'est pas toujours assuré avec les extensions tierces ou dans le meilleur des cas il ne peut être que total. On ne pourra donc pas, par exemple, disposer de n sites avec un Jomsocial avec chacun ses propres contenus mais qui partageraient les mêmes utilisateurs.

Le coût

JMS est une extension 100% payante avec différentes versions selon les options choisies. Les prix vont de 50 à 175 € ce qui n'est pas cher pour une agence. Un particulier n'a en général pas besoin de ce genre d'extensions. A noter aussi que les plugins additionnels (partages partiels d'articles, connexion sso, etc...) sont aussi payants.

Plus d'info sur http://www.jms2win.com/

 

 Myghtysites d'AlterBrains: l'évolution

alterbrainsProfitant des limitations de JMS la société AlterBrains a édité quelques années après une extension assez similaire qui est MyghtySites. Cette extension est utilisée pour :

  • faire tourner des sites Joomla! multiples sur une même installation (tous les sites utilisent les mêmes fichiers mais une base de données différentes)
  • le partage de contenus en base de données (des sites multiples utilisent les tables de la base)

Liste des sites sous MightySites

Les cas d'utilisation sont alors:

  • Sous-sites avec des contenus indépendants: master.com et slave.master.com ou slave.master.com
  • Domaines séparés pour chaque langue dans un site multilangues: On a le site master.com avec les fonctions natives de multilangues de Joomla! et des domaines séparés par langue comme master-fr.com ou fr.master.com
  • Domaine séparé pour une version mobile du site: on aurait ici master.com et mobile.master.com qui aurait un template différent mais les mêmes contenus
  • Sous-sites avec des données de composants différents mais le même cœur Joomla! ici slave.master.com utiliserait des données propres de certains composants
  • Sous-sites qui partagent des composants mais sur un cœur différent: ici au contraire du cas précédent l'essentiel de la base de données de slave.master.com est différent de master.com sauf pour certains composants
  • Deux sites indépendants mais qui partagent certaines données: par exemple deux sites Joomla! avec la même base d'utilisateurs pour qu'un utilisateur enregistré sur un domaine puisse le faire avec le même compte sur un autre
  • Sous-sites avec des variations mineures des menus ou des modules: slave.master.com et master.com sont quasi identiques au logo ou au menu prés par exemple
  • Sous-sites avec des variations majeures entre eux au niveau des menus et des modules

Documentation et support

Elle n'est pas en ligne mais est envoyée sur simple demande. Pas aussi fournie que celle de JMS elle permet cependant de vous guider efficacement dans l'installation et la configuration de l'extensions. Le support est d'excellente qualité, réalisé par des professionnels et experts de Joomla! depuis l'époque même de Mambo!

Le coût

A la différence de JMS il n'y a ici qu'un tarif unique à $59. Il n'y a pas non plus des coûts additionnels pour des plugins supplémentaires payants comme JMS. La solution est donc plus abordable mais est-ce important pour un outil qui n'intéresse principalement que des agence ?

Les avantages par rapport à JMS:

Au delà d'un coût moindre, MightySites permet de partager des contenus de la base de données, des composants ou de tables personnalisées, ce que JMS ne peut pas faire. Il est aussi plus simple et plus rapide à prendre en main.

mightysites partage composants

Plus d'info sur https://alterbrains.com/joomla-extensions/administration/multisites-manager

SEBLOD: une approche native Joomla! pour des possibilités décuplées

seblod logoSi JMS et MightySites utilisent une approche assez similaire (principe du site esclave) il en va tout autrement avec SEBLOD dont la fonction multi sites se repose entièrement sur la gestion native multisites de Joomla! et les ACLs du CMS.

Gestion multi sites avec SEBLOD

La gestion des sites sous SEBLOD est simplissime. En fait l'apport de SEBLOD au mutli sites de Joomla! consiste à permettre le contrôle du partage des contenus entre les sites. Il devient alors très facile de préciser que telle ou telle actualité sera visible sur tel ou tel site sans avoir à la dupliquer. Ce contrôle s'effectue au travers des niveux n'accès (les ACLs). A chaque nouveau site est associée une collection de groupes et d'ACLs de telle sorte que selon le domaine demandé Joomla! utilise le jeu d'ACL correspondant.

Ici on ne parle pas de site maître ou de site esclave ou dupliqué. L'approche est radicalement différente et quasiment native Joomla! puisque pour chaque site on définit des menus, modules et contenus auxquels on attribue les acls souhaitées. 

Gestion d'un site SEBLOD: template, acls et menu associés

Le grand avantage de cette méthode est qu'elle permet de définir précisément ce qu'on veut partager. Là où JMS et MightySites ont ne peuvent que difficilement partager tel contenu et non tel autre (car le partage est souvent global au niveau du composant) SEBLOD nous permet de choisir exactement ce qu'on veut partager. 

Il suffit de définir les acls croisés entre les domaines pour les élements qu'on veut partager entre tel et tel site.

Par site on attribue le menu par défaut comme son template par défaut ce qui permet d'avoir des site avec des visuels très spécifiques avec un contrôle de partage des fonctions et des contenus très fin.

Facilité de prise en main

L'approche multi sites de SEBLOD est d'une part beaucoup plus simple (il ne s'agit que d'une association entre un domaine et un jeu d'ACLs) qu'avec les méthodes de sites Maître/Esclave utilisées par JMS ou MightySites, mais elle nécessite la prise en main de SEBLOD qui reste une extension très riche et relativement complexe.

Limitations

Etant donné qu'il s'agit plus de construire un nombre quelconque de sites sur une seule installation Joomla! et qui vont partager de façon fine autant de contenus et fonctions qu'on le souhaite, cette approche n'est pas idéale quand on veut pouvoir déployer rapidement des sites images selon un site type. Ici on a un seul fichier configuration.php et chaque extension n'a aussi qu'une seule configuration unique pour tous les sites.

Le coût

C'est un grand avantage de SEBLOD car la solution est totalement gratuite. Quelques dizaines d'euros ne sont cependant par un frein pour une agence qui doit développer un projet multi sites de plusieurs dizaines de miliers d'euros!

Documentation et support

C'est souvent le point faible des solutions à base de SEBLOD. La documentation existe sur le site mais elle n'est pas très synthétique (il faut chercher les tutoriels un à un) et quasiment toujours en anglais (mais c'est le cas aussi pour les autres extensions). Une formation SEBLOD est souvent nécessaire pour vous éviter de passer des semaines à tâtonner. 

Plus d'info sur http://www.seblod.com/

Conclusion

Le CMS Joomla!, fait trop souvent méconnu, est nativement multi sites.

Ces 3 extensions améliorent cependant cette gestion native multisites de Joomla! mais selon des approches radicalement différentes. Si votre objectif est essentiellement d'automatiser ou au moins de simplifier la création de sites "copie" prêts à l'emploi selon un site type et avec des fonctions de partage limitées, JMS et MightySites sont d'excellents choix.

Si par contre votre but est de développer plusieurs sites un peu ou très différents qui doivent partager finement certains contenus et certaines fonctions en sachant que ces partages peuvent évoluer dans le temps, alors SEBLOD est clairement la solution.