Carnet Wiki

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”:

  • le noyau du SPIP mutualisé est dans le répertoire /var/www/mutu/
  • les instances de mutualisation (les sites SPIP) sont dans /var/www/mutu/sites (soit réellement soit via des liens symboliques, cela n’a pas d’importance) dans un répertoire qui porte leur nom de domaine. Par exemple le SPIP http://mon-instance-spip.tld est installé dans /var/www/mutu/site/mon-instance-spip.tld.
  • l’application Gallery est installée dans un sous-répertoire du noyau: /var/www/mutu/gallery: tel quel cela signifie que tous les SPIP y ont accès via http://mon-instance-spip.tld/gallery (!)
  • chaque instance de Gallery sera installée avec sa propre base de données: gallery_nom_instance (on peut envisager que cette base soit commune avec celle du SPIP sans que cela change l’organisation de la suite).
  • chaque instance de Gallery stockera ses données [1] dans un sous-dossier /g2_photos de l’instance du SPIP mutualisé, ce qui donne pour notre exemple: /var/www/mutu/site/mon-instance-spip.tld/g2_photos [2]

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:
      // choper le nom de domaine sans l'éventuel www. initial
        $ndd = (strpos($_SERVER['SERVER_NAME'],'www.') === 0 ? substr(4, $_SERVER['SERVER_NAME']) : $_SERVER['SERVER_NAME']);
       
      // inclure le fichier de connection spécifique de l'instance mutu ...si il existe!
        if (@file_exists('/var/www/mutu/sites/'.$ndd.'/g2_photos/g2_connect.php')) 
            include_once('/var/www/mutu/sites/'.$ndd.'/g2_photos/g2_connect.php');
        else {
           header("HTTP/1.0 404 Not Found");
           die();
        }
    • partie des infos de connexion à la base: (ligne 100 et suivantes du fichier avant modifs):
      $storeConfig['type'] = 'mysqli';
      $storeConfig['hostname'] = 'localhost';
      $storeConfig['schema'] = '';
      $storeConfig['tablePrefix'] = 'g2_';
      $storeConfig['columnPrefix'] = 'g_';
      $storeConfig['usePersistentConnections'] = false;
       
      //$storeConfig['database'] = 'gallery_mon_instance';
      //$storeConfig['username'] = 'utilisateur_MySQL';
      //$storeConfig['password'] = 'pass_MySQL';
      $storeConfig['database'] = $Tmutus_infos['db'];
      $storeConfig['username'] = $Tmutus_infos['db_user'];
      $storeConfig['password'] = $Tmutus_infos['db_pass'];
       
      $gallery->setConfig('storage.config', $storeConfig);
    • partie des définition du dossier de stockage des photos (fin du fichier):
      //$gallery->setConfig('baseUri', 'http://frank.spip/gallery/main.php');
      $gallery->setConfig('baseUri', $Tmutus_infos['baseUri']);
  5. 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:
    <?php
    // fichier de connexion de Gallery pour mon-instance-spip.tld
     
    // Prevent direct access to g2_connect.php.
      if (!isset($gallery) || !method_exists($gallery, 'setConfig')) exit;
     
    // générer l'array des données de connexion spécifiques de l'instance de mutu
      $Tmutus_infos = array(
                'data.gallery.base' => '/var/www/mutu/sites/mon-instance-spip.tld/g2_photos',
                'db' => 'gallery_mon_instance',
                'db_user' => 'utilisateur_MySQL',
                'db_pass' => 'pass_MySQL',
                'baseUri' => 'http://mon-instance-spip.tld/gallery/main.php'
      );
    ?>

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

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

  • créer la base de donnée par copie du dump fait à l’étape 2
  • copier le dossier /g2_photos “modèle” dans le SPIP concerné (/var/www/mutu/sites/mon-instance-spip.tld/g2_photos/)
  • modifier le fichier g2_connect.php du site pour qu’il comporte les paramètres de connexion corrects.

[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...

cy_altern - Mise à jour :15 October 2009 at 20:02