Un noyau SPIP 1.9, plusieurs sites !

Ce tutoriel tente de décrire une procédure pour utiliser la mutualisation des fichiers du noyau de SPIP 1.9, permettant d’avoir plusieurs sites SPIP utilisant un même noyau.

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

Nota SPIP-Contrib : la mutualisation évolue (dans la branche 1.9.3 dev), voir le dernier article sur ce sujet La mutualisation facile : modifications manuelles

Introduction

Pour ma part, j’ai mis du temps à comprendre le fonctionnement et à pouvoir rendre cela fonctionnel. Un tutoriel ne sera donc pas de trop pour ceux qui veulent aussi tenter l’expérience (testée sur Ouvaton).

Ce tutoriel s’adresse plutôt aux hébergés qu’aux hébergeurs, qui, je suppose, utiliseront les Alias ou VirtualHost d’Apache.

Ce tutoriel s’inspire du ticket 186 qui utilise des Alias.

2Déroulement2

J’ai installé un SPIP 1.9 avec plusieurs sites de deux manières : SPIP à la racine du compte, ou dans un sous répertoire. Peu de choses changent en fait, mais il est utile de les connaître !

Cas (1), à la racine du serveur :

-  http://mon_serveur.org/

avec les sites spips de type :
-  http://mon_serveur.org/mon_site/ ,
-  http://mon_serveur.org/mon_autre_site/

Cas (2), dans un répertoire du serveur :

-  http://mon_serveur.org/mes_spips/

avec les sites spips de type :
-  http://mon_serveur.org/mes_spips/mon_site/ ,
-  http://mon_serveur.org/mes_spips/mon_autre_site/

Remarquez que vous pouvez utiliser l’adresse http://mon_serveur.org/ ou http://mon_serveur.org/mes_sites/ pour avoir un SPIP aussi à cet endroit. Il vous suffit d’aller dans http://mon_serveur.org/ecrire/ ou http://mon_serveur.org/mes_sites/ecrire/ et de configurer.

Si vous avez déjà un site en SPIP 1.9 configuré, vous pouvez aussi suivre ce tutoriel pour en creer d’autres, dans un sous-dossier. Votre premier site continuera de fonctionner correctement.

21- Création des dossiers accueillant les sites2

Creer un dossier dans le répertoire hébergeant SPIP
nommé SITES (ou le nom que vous voulez, à condition de le changer partout dans le turoriel) (au même niveau que CACHE, IMG,...)

Dans ce dossier, créer un sous dossier pour chacun des sites (mon_site, mon_autre_site), et dans chacun :

des sous dossiers :
-  CACHE,
-  IMG,
-  data,
-  upload,
-  squelettes (éventuellement)

des fichiers (éventuellement) :
-  .htaccess (obligatoire ou non ?)
-  mes_fonctions.php
-  mes_options.php

22- Création et modification du .htaccess2

Le .htaccess doit être modifié pour rediriger les adresses des sites SPIP correctement.

(Ce n’est pas la méthode décrite par le ticket 186 qui modifie le fichier de configuration du serveur Apache en créant des Alias, ce qu’on ne peut pas faire dans un .htaccess)

(Il faut donc, dans notre cas, que le serveur autorise le mod_rewrite d’Apache)

Le but est que les adresses de type :
-  http://mon_serveur.org/mon_site ou http://mon_serveur.org/mes_spips/mon_site

soient redirigées vers :
-  http://mon_serveur.org/ ou http://mon_serveur.org/mes_spips/

pour être traitées par :
-  http://mon_serveur.org/spip.php ou http://mon_serveur.org/mes_spips/spip.php

Créer le fichier .htaccess, en copiant le fichier htaccess.txt .
Puis selon le cas...

3Cas (1) : racine du serveur3

Le .htaccess est à ce niveau :
-  http://mon_serveur.org/.htaccess

À l’intérieur, mettre :

  • Dans Configuration :
    • RewriteBase /
  • Dans Réglages personnalisés :
    • RewriteRule ^mon_site/(.*) /$1 [QSA,L]
    • RewriteRule ^mon_autre_site/(.*) /$1 [QSA,L]

3Cas (2) : répertoire du serveur3

Le .htaccess est à ce niveau :
-  http://mon_serveur.org/mes_spips/.htaccess

A l’intérieur, mettre :

  • Dans Configuration :
    • RewriteBase /mes_spips/
  • Dans Réglages personnalisés :
    • RewriteRule ^mon_site/(.*) /mes_spips/$1 [QSA,L]
    • RewriteRule ^mon_autre_site/(.*) /mes_spips/$1 [QSA,L]

23- Création et modification de ecrire/mes_options.php2

Il faut maintenant dire à SPIP que les adresses comportant des dossiers dans l’url (/mon_site) doivent être utilisés comme des SPIP autonomes, si leur dossier existe.

3Pour information3

Toute modification de ce fichier 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 /mon_site/mes_option.php

3Cas (1) : racine du serveur3

Créer/éditer le fichier ecrire/mes_options.php :
Le mes_options.php est à ce niveau :
-  http://mon_serveur.org/ecrire/mes_options.php

Ajouter entre

<?php et ?>

ces lignes :

  if ( preg_match(',/([a-zA-Z0-9_-]*)[/?],',$_SERVER['REQUEST_URI'],$r)) {
        if (is_dir($f = _DIR_RACINE . 'SITES/' . $r[1]. '/')) {
                $cookie_prefix = $table_prefix = $r[1];
                	
                define('_SPIP_PATH', 'SITES/' . $table_prefix  . '/:./:dist/:formulaires/:ecrire/');
                define('_DIR_IMG', $f.'IMG/');
                define('_DIR_DOC', _DIR_IMG);
                define('_DIR_CACHE', $f.'CACHE/');
                define('_DIR_SESSIONS', $f.'data/');
                define('_DIR_TRANSFERT', $f.'upload');
                define('_FILE_CONNECT_INS', $f.'inc_connect');
                
	        $GLOBALS['dossier_squelettes'] = $f.'squelettes';
                
                if (is_readable($f .= 'mes_options.php')) include($f);
        }
  }

Un rapide détail s’impose

Par défaut, la ligne
-  $cookie_prefix = $table_prefix = $r[1] ;

Va créer des tables mysql avec des préfixes ayant le nom du répertoire contenant le site : mon_site_article à la place de spip_article par exemple. Cela permet d’héberger tous les sites sur une seule et même base de données. Vous pouvez garder le préfixe par défaut (spip), mais il faut penser à avoir plusieurs bases de données différentes pour chaque site. _ Pour cela, mettre à la place :
-  $cookie_prefix = $r[1] ;

La ligne ci dessous définit l’adresse du dossier de squelette (mon_site/squelettes) :
-  $GLOBALS[’dossier_squelettes’] = $f.’squelettes’ ;

Pour que tous les sites aient le même squelette situé dans http://mon_serveur/squelettes/ vous pouvez enlever le $f. pour n’avoir que :
-  $GLOBALS[’dossier_squelettes’] = ’squelettes’ ;

3Cas (2) : répertoire du serveur3

On ajoute ces lignes entre

<?php et ?>

du fichier http://mon_serveur/mes_sites/ecrire/mes_options.php :

  if ( preg_match(',/mes_sites/([a-zA-Z0-9_-]*)[/?],',$_SERVER['REQUEST_URI'],$r)) {
        if (is_dir($f = _DIR_RACINE . 'SITES/' . $r[1]. '/')) {
                $cookie_prefix = $table_prefix = $r[1];
                	
                define('_SPIP_PATH', 'SITES/' . $table_prefix  . '/:./:dist/:formulaires/:ecrire/');
                define('_DIR_IMG', $f.'IMG/');
                define('_DIR_DOC', _DIR_IMG);
                define('_DIR_CACHE', $f.'CACHE/');
                define('_DIR_SESSIONS', $f.'data/');
                define('_DIR_TRANSFERT', $f.'upload');
                define('_FILE_CONNECT_INS', $f.'inc_connect');
                
	        $GLOBALS['dossier_squelettes'] = $f.'squelettes';
                
                if (is_readable($f .= 'mes_options.php')) include($f);
        }
  }

En fait, toute la nuance est dans le preg_match...

24- Création et modification de mon_site/.htaccess2

(je ne suis pas sûr que ce soit indispensable)

Mettre dans Configuration :

  • Cas (1)
    • RewriteBase /mon_site/
  • Cas (2)
    • RewriteBase /mes_spips/mon_site/

Conclusion

Si vous êtes chanceux, peut être que ça fonctionne !

Pour lancer la procédure d’installation de vos sites, allez dans le répertoire écrire :
-  http://mon_serveur/mon_site/ecrire/
-  http://mon_serveur/mes_spips/mon_site/ecrire/

Il faut bien configurer l’adresse de vos sites dans l’interface privée :
http://mon_serveur.org/mon_site/ ou http://mon_serveur.org/mes_spips/mon_site/

Il se peux que vous croisiez certains problèmes par la suite, comme trouver la bonne url pour faire fonctionner un javascript... J’ai du pour la configuration d’un menu dépliant (pour l’image des + et - qui se configure dans le javascript) mettre : SITES/nom_site/squelettes/img/mon_image.gif à la place de img/mon_image.gif . SInon, rien de bien méchant.

Alors si tout fonctionne, quand Spip passera en version 2.0 (je sais que vous en rêvez déjà !), vous n’aurez qu’un seul noyau à mettre à jour !

Discussion

21 discussions

  • 1

    Très intéressant. Je me pose néanmoins des questions.
    -  N’est pas intéressant uniquement si on veut strictement la même configuration pour tous les sites ?
    -  Quid des plugins ? Lorsqu’on les active, sont-ils de fait actifs (ce que je crois comprendre) sur tous les sites ou peut-on individualiser ? Par exemple si j’active la spip-liste puis-je activer spip-lettre sur un seul site. Ou bien dans ce cas dois-je activer les deux et n’utiliser que celle je veux selon le site ?
    -  Les sauvegardes sont sans doute plus lourdes ?

    • J’ai oublié de parler des plugins...
      Tel que j’ai fait, j’ai mis un seul dossier /plugins au niveau que /ecrire, /SITES, soit ici : http://mon_serveur.org/plugins ou http://mon_serveur.org/mes_spips/plugins

      On peut alors choisir pour chaque site dans la configuration quels plugins utiliser. Cela veux dire que de cette manière, tous les plugins présents dans l’unique /plugins sont utilisables pour tous les sites ; Ils sont tous décochés par défaut.

      Les sites ne peuvent en ajouter en créant un dossier mon_site/plugins et Je ne sais pas si on peux changer ce comportement simplement.

      Pour les sauvegardes, chaque site gère sa sauvegarde stockée dans /SITES/mon_site/data. Elles restent donc de même taille. Ce n’est pas une sauvegarde qui regroupe tous les sites présents dans /SITES, si c’est ce que tu pensais ?

      Cordialement, MM.

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom