Carnet Mutualisation

Mutualiser Gallery2 dans un SPIP mutualisé

SPIP-Contrib :: Carnet Wiki :: Carnet Mutualisation :: Recherche :

Mutualiser Gallery2 dans un SPIP mutualisé

But

Si vous gérez une mutualisation de SPIP et que vous souhaitez proposer en plus à vos utilisateurs l’application Gallery2 pour leurs photos (via le plugin Gallery2 pour SPIP), il est possible de mutualiser le noyau de Gallery afin de pouvoir proposer une instance de Gallery par site SPIP.

Configuration de départ

On suppose la situation suivante sur un serveur ayant une mutualisation de SPIP en mode « domaines différents » ou « sous-domaines » :

Il est donc nécessaire de gérer la connexion à la base de données et au répertoire des photos utilisé par l’application Gallery en fonction du domaine/sous-domaine via lequel on s’y connecte : http://mon-instance-spip.tld/gallery doit renvoyer les données de la base gallery_nom_instance et les photos stockées dans /var/www/mutu/site/mon-instance-spip.tld/g2_photos alors que http://l-autre-spip.tld/gallery doit renvoyer les données de la base gallery_l_autre et les photos stockées dans /var/www/mutu/site/l-autre-spip.tld/g2_photos.

Installation et paramétrage de départ

Pour cela on peut procéder de la manière suivante :

  1. commencer par faire une installation « classique » de gallery (ne pas choisir le mode « mutualisé ») dans un des SPIP (mon-instance-spip.tld par ex). Cela va générer le fichier config.php à la racine du répertoire du noyau de Gallery : /var/www/mutu/gallery/config.php. Ce fichier contient les infos nécessaires pour connecter la base et le dossier de données spécifiques de cette instance.
  2. faire un dump MySQL de la base de Gallery (via phpmyadmin par exemple) : ce dump sera utilisé pour les installations des autres instances afin de ne pas avoir à relancer tout le processus d’installation à chaque fois.
  3. faire une copie du dossier /g2_photos créé : idem, cette copie permettra de créer le dossier de chaque future installation.
  4. modifier le fichier config.php pour permettre l’utilisation d’un fichier de connexion par site en le modifiant de la manière suivante :
    • début du fichier : (ligne 33 et suivante if (!isset($gallery) || !method_exists($gallery, 'setConfig')) { ...) ajouter :
      1. // choper le nom de domaine sans l'éventuel www. initial
      2.   $ndd = (strpos($_SERVER['SERVER_NAME'],'www.') === 0 ? substr(4, $_SERVER['SERVER_NAME']) : $_SERVER['SERVER_NAME']);
      3. // inclure le fichier de connection spécifique de l'instance mutu ...si il existe!
      4.   if (@file_exists('/var/www/mutu/sites/'.$ndd.'/g2_photos/g2_connect.php'))
      5.       include_once('/var/www/mutu/sites/'.$ndd.'/g2_photos/g2_connect.php');
      6.   else {
      7.      header("HTTP/1.0 404 Not Found");
      8.      die();
      9.   }
  1. Ces modifs ont donc pour but de fournir un mécanisme basique d’identification du site qui appelle Gallery et de déclencher l’intégration d’un fichier de connexion spécifique des paramètres du site. Dans cette méthode le fichier de connexion g2_connect.php est stocké dans le répertoire g2_photos de l’instance de mutualisation. Il faut donc le créer : dans /var/www/mutu/sites/mon-instance-spip.tld/g2_photos/ (ou son équivalent pour les autres sites) créer un fichier g2_connect.php dans lequel on mettra le code suivant :
    1. <?php
    2. // fichier de connexion de Gallery pour mon-instance-spip.tld
    3. // Prevent direct access to g2_connect.php.
    4.   if (!isset($gallery) || !method_exists($gallery, 'setConfig')) exit;
    5. // générer l'array des données de connexion spécifiques de l'instance de mutu
    6.   $Tmutus_infos = array(
    7.             'data.gallery.base' => '/var/www/mutu/sites/mon-instance-spip.tld/g2_photos',
    8.             'db' => 'gallery_mon_instance',
    9.             'db_user' => 'utilisateur_MySQL',
    10.             'db_pass' => 'pass_MySQL',
    11.             'baseUri' => 'http://mon-instance-spip.tld/gallery/main.php'
    12.   );
    13. ?>

Pour bien faire les choses, on ajoutera un modèle de ce fichier dans la copie du dossier g2_photos fait à l’étape 3...

Installation des instances de Gallery suivantes

Pour créer une instance de Gallery pour un SPIP il faudra donc :

[1dossier datas selon la nomenclature Gallery

[2en vérité, selon les préconisations de Gallery, il serait préférable de placer ces dossiers de données dans un répertoire du serveur non-accessible par le web (hors /www donc dans ce cas) mais cela ne change pas grand chose à la bidouille proposée ici si ce n’est embrouiller les explications...