Gepi en multisite

Principes

Il s'agit de n'utiliser qu'une seule arborescence de Gepi pour plusieurs établissements.
Chaque établissement possède sa propre base de données qui est appelée par une information en GET dans l'url.
Ensuite un cookie contenant le RNE de l'établissement en question permet de faire suivre cette information.
Il est donc souhaitable que le système d'authentification soit centralisé (comme un LDAP ou CAS,...),
mais ce n'est pas une obligation car il est peu probable qu'un utilisateur avec le même login et le même mot de passe existe sur deux bases différentes.

Un professeur nommé sur plusieurs établissements pourra se retrouver avec plusieurs comptes et des mots de passe pas nécessairement identiques... sauf s'il prend soin de mettre le même mot de passe pour les différents établissements, ou, mieux, si l'authentification est effectuée par via un serveur LDAP, CAS,...

Que faut-il faire

Il faut commencer par lire les fichiers connect.cfg et multisite.ini.php où tout est expliqué... mais pas forcément très clair... d'où la documentation qui suit (merci à Bertrand Lods pour le compte-rendu).

L'installation STANDARD et l'installation MULTISITE sont distinct :

Soit on fait l'installation STANDARD
Soit on fait l'installation MULTISITE

Dans le cas d'une installation Standard, le fichier /secure/connect.inc.php est généré automatiquement d'après les saisies dans l'interface web.
Dans le cas d'une installation Multisite, il faudra renseigner manuellement les fichiers,... créer la structure de la base et son contenu initial manuellement (ou via phpMyAdmin).

Il faut commencer par lire les fichiers :

/secure/modeles/connect-modele.inc.php
/secure/modeles/multisite-modele.ini.php

Ce sont les fichiers qui serviront de modèles à ceux qu'il faudra copier et compléter manuellement en

/secure/connect.inc.php
/secure/multisite.ini.php

1. Transfert de fichier par ftp dans /var/ftp/pub/public :

Le compte-rendu a été effectué avec la dernière version stable à la date de rédaction: gepi-1.6.8-4297f2a.tar.gz (20 Avril 2016)

2. Transfert du répertoire vers /var/www/html :

[root@applietab1 html]# mv /var/ftp/pub/public/gepi-1.6.8/ /var/www/html/gepi

3. Rendre apache propriétaire du répertoire gepi :

[root@applietab1 html]# chown apache:apache -R gepi/

4. Installation MULTISITE:

Fichier connect.inc.php

Les déclarations des variables

$dbHost="localhost";
$dbDb="gepi";
$dbUser="gepi";
$dbPass="gepi";
$gepiPath="/gepi";

en début de fichier ne seront pas prises en compte dans une installation multisite.
Vous pouvez ne pas modifier ces valeurs.
Vous pouvez même commenter ces lignes.

C'est la deuxième partie du fichier qu'il va falloir paramétrer:

# ============
# Deuxième cas : vous êtes en configuration multi-site
# (une installation de Gepi / plusieurs établissements)
#
# 1- Passez la variable $multisite à "y",
#    Remplacez "n" par "y" dans la ligne [$multisite = "n";]
#    située au 1- du premier cas ci-dessus
#    ou dé-commentez -retirez le "# " en début de ligne- la ligne ci-dessous
$multisite = "y"; => Décommenter la ligne
#

Et décommentez toute la portion de code suivante pour le multisite

/*
if ($multisite == "y" AND $_SERVER["SCRIPT_NAME"] != "/login.php") {
    $RNE = isset($_REQUEST['rne']) ? $_REQUEST['rne'] : (isset($_REQUEST['RNE']) ? $_REQUEST['RNE'] : (isset($_REQUEST['organization']) ? $_REQUEST['organization'] : (isset($_COOKIE['RNE']) ? $_COOKIE['RNE'] : NULL)));
    if (!isset($RNE) || $RNE == 'RNE') {
        echo 'Erreur : Numero d\'etablissement manquant dans la requete (parametre rne ou organization).'; die();
    } else {
        setcookie('RNE', $RNE, null, '/');
        $_COOKIE['RNE'] = $RNE;
        $init = parse_ini_file(dirname(__FILE__)."/../secure/multisite.ini.php", TRUE);
        if (    !isset($init[$RNE]["nomhote"]) ||
            !isset($init[$RNE]["nombase"]) ||
            !isset($init[$RNE]["mysqluser"]) ||
            !isset($init[$RNE]["mysqlmdp"]) ||
            !isset($init[$RNE]["pathname"])
            ) {
            echo 'Erreur : Numero d\'etablissement '.$RNE.' non trouve dans la configuration'; die();
        }
        $dbHost        = $init[$RNE]["nomhote"];
        $dbDb        = $init[$RNE]["nombase"];
        $dbUser        = $init[$RNE]["mysqluser"];
        $dbPass        = $init[$RNE]["mysqlmdp"];
        $gepiPath    = $init[$RNE]["pathname"];
    }
}
 */

Renseigner le fichier /secure/multisite.ini.php

Il va s'agir de renseignez le fichier /secure/multisite.ini.php
Copier/renommer le ficher /secure/modeles/multisite-modele.ini.php vers /secure/multisite.ini.php

Il faut déclarer dans multisite.ini.php une base par établissement

[RNE]
nomhote        = 
mysqluser      = 
mysqlmdp      =
nombase        = 
pathname      = 
nometablissement = 

Par exemple:

[012345A]
nomhote        = localhost
mysqluser      = gepiuser1
mysqlmdp      = Ce_que_vous_voulez_de_bien_secure
nombase        = gepidb1
pathname      = /gepi1
nometablissement = Collège Georges Brassens

où 012345A est le RNE de l'établissement.
localhost sera le serveur de base de données si le serveur web héberge aussi le serveur de bases de données.

Comme mentionné plus haut, il faut effectuer un certain nombre d'opérations manuellement ou via phpMyAdmin:
  1. créer la base associée et l'utilisateur de la base :

mysql -uroot -p
CREATE DATABASE gepidb1;
GRANT ALL PRIVILEGES ON gepidb1.* TO gepiuser1@localhost IDENTIFIED BY 'Ce_que_vous_voulez_de_bien_secure';
FLUSH PRIVILEGES;

  1. Créer la structure de tables dans la base d'après le fichier structure_gepi.sql

mysql -ugepiuser1 -p < CHEMIN_GEPI/sql/structure_gepi.sql

en remplaçant CHEMIN_GEPI par le chemin relatif ou absolu vers l'arborescence Gepi.

  1. Importer les données initiales de la base d'après le fichier data_gepi.sql

mysql -ugepiuser1 -p < CHEMIN_GEPI/sql/data_gepi.sql

  1. Dans la table setting passer la valeur « multisite » à « y »

mysql -ugepiuser1 -p
UPDATE setting SET value='y' WHERE name='multisite';

Procéder de la même façon dans le multisite.ini.php pour les autres établissements:

[RNE2]
nomhote        = 
mysqluser      = 
mysqlmdp      =
nombase        = 
pathname      = 
nometablissement = 

Par exemple:

[098765B]
nomhote        = localhost
mysqluser      = gepiuser2
mysqlmdp      = Ce_que_vous_voulez_de_bien_secure
nombase        = gepidb2
pathname      = /gepi2
nometablissement = Collège Jacques Brel

  1. créer la base associée et l'utilisateur de la base :

mysql -uroot -p
CREATE DATABASE gepidb2;
GRANT ALL PRIVILEGES ON gepidb2.* TO gepiuser2@localhost IDENTIFIED BY 'Ce_que_vous_voulez_de_bien_secure';
FLUSH PRIVILEGES;

  1. Créer la structure de tables dans la base d'après le fichier structure_gepi.sql

mysql -ugepiuser2 -p < CHEMIN_GEPI/sql/structure_gepi.sql

en remplaçant CHEMIN_GEPI par le chemin relatif ou absolu vers l'arborescence Gepi.

  1. Importer les données initiales de la base d'après le fichier data_gepi.sql

mysql -ugepiuser2 -p < CHEMIN_GEPI/sql/data_gepi.sql

  1. Dans la table setting passer la valeur « multisite » à « y »

mysql -ugepiuser2 -p
UPDATE setting SET value='y' WHERE name='multisite';

Etc.

Se connecter

Pour se connecter, l'utilisateur (sans CAS) doit accéder à:

https://SERVEUR_GEPI/CHEMIN_GEPI/login.php?rne=012345A

c'est-à-dire préciser en barre d'adresse le RNE de l'établissement.
Attention : La chaine rne= doit être en minuscules.

retour au menu