Carnet Wiki

Mutualisation SPIP+THELIA

Version 4 — Juin 2014 Suske

Cet article décrit une solution permettant de conserver la mutualisation des sites SPIP utilisant THELIA. Elle permet d’avoir une boutique distincte pour chaque site.

Cette solution est loin d’être parfaite mais elle peut déjà dépanner.

La mutualisation sous SPIP

SPIP offre des mécanismes de mutualisation permettant d’éviter de dupliquer le noyau SPIP pour chaque site. Le code est ainsi factorisé et il suffit de faire les mises à jour à un seul endroit, en une seule fois, et tous les sites SPIP mutualisés sont impactés.

En mutualisé, il n’y pas plus qu’un seul répertoire (par exemple dans /home/spip3/public_html). Tous les virtual hosts pointent vers ce répertoire. Et c’est le plugin (plutôt module) de mutualisation qui se charge d’orienter vers les répertoires spécifiques à chaque site (local, tmp, config, IMG) en fonction du nom de domaine présent dans l’url.

Utiliser THELIA sous SPIP

Quand on utilise THELIA sous SPIP (donc avec l’aide du plugin SPIP-THELIA), on est obligé de copier l’arborescence de THELIA à la racine du site. Il s’agit des répertoires : clients, classes, lib, fonctions, admin_xxx.

Tous les site SPIP mutualisés peuvent donc accéder à THELIA. Le problème, c’est qu’il accèdent TOUS à la même boutique THELIA. En effet, les répertoires clients et classes contiennent le paramétrage de la boutique. Et comme il n’y a qu’un seul répertoire client et qu’un seul répertoire classe, on a donc une seule boutique accessible, la même pour tous les sites.

Et comme THELIA n’offre pas de mécanisme de mutualisation ; à ce que je sache ; on est bloqué.

Comment faire si on veut des boutiques différentes pour chaque site, mais qu’on ne veut pas tout dupliquer pour chaque site ?

La solution : faire pointer le virtual host vers un répertoire spécifique

La solution que j’ai testé consiste à faire pointer le virtual host, non plus vers /home/spip3 mais vers un répertoire spécifique à la boutique : /home/maboutique1

Dans ce répertoire spécifique, on y copie les répertoires THELIA :
-  classes : contient notamment la classe cnx qui contient les paramètrages d’accès à la base. Cela permet de pointer vers une base THELIA spécifique au site.
-  admin_xxx : répertoire d’administration de THELIA. Spécifique aussi à la boutique.
-  lib
-  client : les fichiers spécifiques de la boutique (images, doc, cache, etc.)

Éventuellement, on y copie aussi les répertoires spécifiques SPIP :
-  local
-  tmp
-  config
-  IMG

C’est la solution que j’ai retenue. Mais on peut aussi placer ces répertoires sous /home/spip3/public_html/sites/maboutique1.
Dans mon cas, j’ai aussi un /home/spip3/public_html/sites/maboutique1 mais il ne contient que des liens symboliques vers /home/maboutique1/public_html

En théorie, il faudrait aussi copier les répertoires de SPIP pour que SPIP fonctionne. Mais l’astuce consiste à créer des liens symboliques vers les répertoires présents dans /home/spip3. Ainsi, si SPIP3 évolue, de même que les plugins, la boutique SPIP+THELIA évolue aussi.

Les liens symboliques à créer dans /home/maboutique1/public_html pointant vers le même répertoire/fichier dans /home/spip3/public_html :
-  .htaccess
-  index.php
-  spip.php
-  ecrire
-  favicon.ico (on peut aussi avoir un favicon spécifique à la boutique)
-  mutualisation
-  plugins
-  plugins-dist
-  prive
-  sites
-  squelettes-dist

Je suis conscient que cette solution peut sembler complexe pour le néophyte. Mais elle est finalement assez simple. Il faut juste avoir les droits suffisants pour créer les liens symboliques. Il est probable que cette solution ne sera pas implémentable sur des serveurs type mutualisé.

Cette solution ne permet pas non plus de mutualiser le noyau de THELIA. Il faut copier tous les fichiers THELIA pour chaque boutique. Mais elle permet au moins de factoriser tous ce qui est relatif à SPIP. Et c’est déjà beaucoup. En attendant mieux.