Mutualisation du noyau SPIP via le pseudo plugin
Article mis en ligne le 16 juillet 2024
dernière modification le 17 juillet 2024

La mutualisation du noyau de SPIP est possible.

Il s’agit de pouvoir gérer plusieurs sites SPIP sur un seul serveur ou hébergement en n’utilisant qu’une seule fois les fichiers du noyau de SPIP.

Cela permet un gain d’espace disque important, ainsi qu’une possibilité de mise à jour de SPIP simple de l’ensemble des sites en ne mettant à jour que le noyau.

Pouvoir n’utiliser qu’un seul noyau de SPIP pour héberger plusieurs sites est une des grandes améliorations depuis SPIP 1.9 sur un hébergement qui permet l’url rewriting.

Le concept...

Les dossiers nécessaires au fonctionnement du noyau SPIP (ecrire, plugins-dist, prive, squelettes-dist, ...), et ceux marquant l’activité d’un site (config, IMG, tmp, local) sont clairement identifiables et séparés. C’est cette séparation qui permet d’avoir plusieurs sites SPIP autonomes pour un même noyau de SPIP.

Cette autonomie repose sur l’existence d’un quatuor de répertoires par site, dans lesquels Spip va écrire les données résultant de l’activité du site. Ces répertoires sont au nombre de quatre, car on distingue les données temporaires et permanentes d’une part, et les données accessibles par http et celles qui ne le sont pas d’autre part, d’où quatre types de données. Les deux répertoires inaccessibles par http seront protégées par un .htaccess installé automatiquement par SPIP (les administrateurs du serveur pourront même mettre ces répertoires en dehors de l’arborescence servie par http).

Ces quatre répertoires sont distincts et nommés par les constantes PHP suivantes :

define('_NOM_TEMPORAIRES_INACCESSIBLES', "tmp/");
define('_NOM_TEMPORAIRES_ACCESSIBLES', "local/");
define('_NOM_PERMANENTS_INACCESSIBLES', "config/");
define('_NOM_PERMANENTS_ACCESSIBLES', "IMG/")

Dans une installation de Spip non mutualisée, ces répertoires sont créés à la racine du site, lors de l’application de la fonction spip_initialisation sur les quatre valeurs ci-dessus. Pour obtenir la mutualisation des sources de SPIP,
il suffit de savoir associer une URL spécifique à son quatuor de répertoires spécifiques, en appelant la fonction spip_initialisation sur quatre autres valeurs, déduites de l’URL.

Prérequis

 posséder un nom de domaine disponible
 savoir installer SPIP (une version récente est recommandée). https://www.spip.net/fr_download
spip ?

Créer les bons répertoires

Pour démarrer la mutualisation, il faut tout d’abord partir d’un site fonctionnel.

remarques : pourquoi 2 articles sur l’installation de spip

Pour les exemples, nous partirons d’un site appelé par l’url http://example.org/ stocké physiquement dans /home/toto/public_html/.

Il faut créer un répertoire (par exemple nommé ’sites’) qui va contenir les répertoires des sites mutualisés, à la racine de la distribution (au même niveau que /ecrire).

Remarque : Toutes les url doivent pointer à la racine de la distribution SPIP, c’est-à-dire dans /home/toto/public_html/.

Installer le pseudo plugin mutualisation

 Télécharger le plugin
Ce plugin contient quelques fonctions facilitant la mutualisation de sites : notamment demarrer_site(), prefixe_mutualisation() et mutualiser_creer().

Attention ce pseudo plugin s’installe à la racine du spip

  • config
  • ecrire
  • IMG
  • lib
  • local
  • mutualisation
  • plugins_dist
  • prive
  • sites
  • tmp
  • etc.

Mutualiser grâce à mes_options.php

Pour que SPIP reconnaisse qu’un site est mutualisé, il faut que le script spip.php (appelé par index.php) soit executé. Celui-ci cherchera, grâce à un code ajouté dans /config/mes_options.php si l’URL appelée correspond à un site mutualisé ou non.

Il faut donc recopier le fichier mes_options.php.txt se trouvant dans le répertoire du pseudo plugin mutualisation (/mutualisation) dans /config/ et renommer celui-ci en mes_options.php

C’est le fichier /config/mes_options.php à la racine de la distribution qui va réaliser la majeure partie du travail : il doit chercher si une URL est à mutualiser ou non, et initialiser SPIP en fonction.

Information :

Toute modification du fichier config/mes_options.php du noyau SPIP affectera les options de tous les sites hébergés.

Par exemple, mettre dans ce fichier :
$type_urls = ’propres’ ;

Donnera par défaut à tous les sites ce type d’url... Mais chaque site peut le changer dans son propre /sites/mon_site/config/mes_options.php.

Note sur les sauvegardes et les restaurations

Chaque site copie ses fichiers de sauvegardes dans le répertoire
/sites/premier_site/tmp/dump (ou /sites/premier_site/tmp/upload/login pour les sauvegardes d’un administrateur restreint).
Les restaurations se font par le même dossier, elles peuvent se réaliser d’un SPIP à l’autre comme s’il n’était pas mutualisé).

Configuration suplémentaire

Mettre à disposition un sous-répertoire « non-SPIP » dans un SPIP mutualisé
l’idée est de pouvoir offrir la possibilité aux utilisateurs d’avoir un (ou plusieurs) répertoires pour des fichiers « non-SPIP »

Dans le cadre de la mutualisation, les choses sont beaucoup plus complexes... un répertoire /toto placé dans le dossier du site mutu ne fonctionnera pas automatiquement puisque l’url http://mon-spip.tld/toto appellera le répertoire /toto à la racine du site primaire et non pas du SPIP mutu...

Il est donc nécessaire d’ajouter une réécriture d’URL (RewriteRule) dans le .htaccess à la racine du SPIP primaire. Exemple pour un répertoire toto :

################ REGLAGES PERSONNALISES ######################
# Inscrivez ci-dessous vos reglages supplementaires

#utiliser un rep /static pour partie statiques du site incluse dans le SPIP
RewriteCond     /chemin/vers/spip/mutu/sites/%{HTTP_HOST}/toto -d
RewriteCond     %{HTTP_HOST} (.*)
RewriteRule     ^toto(.*) /chemin/vers/spip/mutu/sites/%1/toto$1  [QSA,L]

 La première ligne fait le test (à l’aide d’une RewriteCond) que le répertoire toto existe
 la deuxième n’est là que pour disposer du nom du virtualhost dans un paramètre %1 dans la ligne suvante
 la troisième ligne contient la rêgle de réécriture en elle-même : tout appel à un fichier ou dossier avec une url de la forme http://mon-spip.tld/toto/qqchose renverra vers le dossier /toto/ du mutualisé.

  • _DIR_PLUGINS_SUPPL (Apparu en : SPIP 2.1)
    permet de définir un chemin supplémentaire considéré comme dossier de plugins en complément de _DIR_PLUGINS

_DIR_PLUGINS_SUPPL se définit de la manière suivante :

define('_DIR_PLUGINS_SUPPL', _DIR_RACINE . 'chemin/plugins/supplementaires/');

On y met le chemin du dossier des plugins supplémentaires à partir de la racine du site.

Grâce à cette constante, il devient plus aisé d’ajouter un dossier de plugins pour un site particulier pour l’usage de la mutualisation par exemple :

define('_DIR_PLUGINS_SUPPL', _DIR_RACINE . 'sites/' . $site . '/plugins/');




Ressources de l’article :

 https://www.spip.net/spip.php?page=recherche&recherche=mutualisation

 https://contrib.spip.net/spip.php?page=recherche_gribouille&id_secteur=607&recherche=mutualisation


Contrib SPIP avec 3 rubriques et 77 articles
et Ailleurs
https://www.blanche-de-peuterey.com/Mutualiser-Spip-en-local
https://www.blanche-de-peuterey.com/Mutualiser-Spip-sous-Linux
https://www.pyrat.net/Beneficier-de-la-mutualisation-du-code-de-SPIP.html
https://www.pyrat.net/Mutualisation-SPIP-sur-OVH.html
https://mutu.jack31.org/Une-mutualisation-SPIP-sur-un-serveur-mutualise-OVH
https://wiki.auf.org/wikiteki/SPIP
https://wiki.auf.org/wikiteki/ZAO/Dakar/Configuration/Spip
https://geekographie.maieul.net/6
https://www.mediaspip.net/documentation/documentation-pour-les-administrateurs/configuration-du-canal/managing-a-mediaspip-farm/gestion-generale-de-la-ferme/article/le-plugin-gestion-de-la


« Sur SpipFactory, le bug vient souvent de l’interface entre la chaise et le clavier »
Plan du site Contact Mentions légales

2017-2025 © SpipFactory - Tous droits réservés
Haut de page
Réalisé sous SPIP
Habillage ESCAL 5.5.4
Hébergeur : SpipFactory