Mutualisation SPIP sur Gandi Simple Hosting

Ceci est une « contribution pédagogique », qui montre par l’exemple comment développer une nouvelle fonctionnalité pour SPIP.

La mutualisation du noyau de SPIP présente des avantages pour les opérations de maintenance (du noyau comme des plugins) ainsi que pour l’économie des ressources du serveur mais encore faut-il pouvoir l’installer ! On croit parfois que cette possibilité est réservée aux propriétaires d’un serveur dédié qui peuvent modifier la configuration de celui-ci. Les lignes qui suivent présentent la mise en place d’une mutualisation sur une plateforme grand public.

Avertissement

Ce tutoriel n’a pas vocation à inciter les utilisateurs de SPIP à migrer leurs sites vers Gandi Simple Hosting (il ne s’agit pas de publicité). Il présente simplement une méthode de mutualisation du noyau SPIP sur cette plateforme pour les personnes ayant ce besoin.
Ce tutoriel s’appuie principalement sur le plugin mutualisation et sa documentation provisoire.

Pré-requis et cahier des charges

On suppose que le lecteur de ces lignes dispose d’une instance de type « Gandi Simple Hosting ».
Pour information, l’instance qui a servi de modèle pour ce tutoriel est de taille L, basée à Paris avec PHP 5.6 et MySQL 5.6 (Percona).
Tous les sites considérés ci-après utilisent SPIP (version 3.1).

Afin qu’un maximum de personnes puissent tirer parti de ce tutoriel, on essaiera de détailler les procédures suivantes :

  1. Mise en place de la mutualisation. On explique comment préparer la mutualisation sur un site « maître ».
  2. Mutualisation d’un autre site situé sur la même instance. On présente les modifications nécessaires permettant d’ajouter (à la mutualisation) un site indépendant situé sur la même instance.
  3. Mutualisation d’un site développé en local. On propose une procédure pas à pas pour ajouter à la mutualisation un site développé en local.

Mise en place de la mutualisation

On dispose d’un site (à l’adresse www.domaine1.tld) hébergé sur une instance Simple Hosting et on souhaite qu’il soit utilisé pour stocker la mutualisation.
Cela signifie que ce site va héberger le moteur de la mutualisation ainsi que tous les fichiers de tous les sites mutualisés. On peut toutefois noter que cela ne sera pas visible par le visiteur et que ce site fonctionnera comme tous les autres sites mutualisés avec sa propre base de données, ses propres plugins et tous ses fichiers de personnalisation (répertoires « tmp », « IMG », « local », « config », « squelettes »).

Configuration du plugin Mutualisation

On télécharge le plugin « Mutualisation » compatible avec SPIP 3.0/3.1/3.2, on dézippe le répertoire puis on le renomme éventuellement « mutualisation » (au moment de l’écriture de cet article, le répertoire s’appelle « mutualisation_v1 », ce qui pose un problème lors de l’appel mutualisation/mutualiser.php du futur fichier « mes_options.php » livré avec le plugin).

Dans le répertoire « mutualisation », on trouve un fichier « mes_options.php.txt » qu’on copie en dehors du répertoire puis renomme « mes_options.php ».
On réalise alors les modifications suivantes :

  • define ('_SITES_ADMIN_MUTUALISATION', 'domaine1.tld');
  • /* placer dans ce tableau les sites ou l'on ne veut pas la redirection canonique */ 
    $www = array('domaine1.tld');
  • Astuce de Matthieu Marcillaud permettant d’avoir le site www.domaine1.tld accessible : lien vers le forum. )
    En tête de fichier, juste après < ?php :
    $mutualisation = ($_SERVER['HTTP_HOST'] == 'domaine1.tld') ? false : true ;
    if ($mutualisation) { 

    Puis tout en fin de fichier, ou juste avant ?> si c’est présent :

    }

Préparation des répertoires sur le serveur

Attention : l’opération suivante va rendre l’adresse www.domaine1.tld temporairement inaccessible.

On se connecte maintenant à l’instance par SFTP et on ouvre le répertoire vhosts/www.domaine1.tld/htdocs.
On déplace les cinq répertoires « config », « tmp », « local », « IMG » et « squelettes » dans un répertoire temporaire (par exemple celui correspondant au vhost de test de forme c123456789.url-de-test.ws fourni avec l’instance) puis on recrée ces répertoires (vides) dans le répertoire htdocs. Ne pas oublier de modifier les droits de ces répertoires conformément aux directives de SPIP (chmod 777 pour « config », « tmp », « local » et « IMG »).

Transfert du plugin Mutualisation puis redémarrage de l’instance

On transfère :

  • le répertoire « mutualisation » dans le répertoire htdocs.
  • le fichier édité « mes_options.php » dans le répertoire « config » précédemment créé.

On crée ensuite le dossier « sites » dans le répertoire htdocs.
Enfin, on redémarre l’instance Simple Hosting (lien sur la page de l’instance) puis on se connecte à l’interface d’administration de l’instance et on vide le cache Varnish.

Redémarrer l’instance
Connection à l’interface d’administration
Nettoyage du cache Varnish

Ré-installation du site

On tape www.domaine1.tld dans le navigateur. Le formulaire d’activation de la mutualisation apparaît :

Installation du site

Le code d’activation demandé est ecureuil (modifiable dans le fichier « mes_options.php » ci-avant). On laisse le système créer les répertoires « config », « tmp », « local » et « IMG » dans vhosts/www.domaine1.tld/htdocs/sites/domaine1.tld/ mais on ne poursuit pas l’installation de SPIP (les fichiers de connexion existent déjà).

On déplace les contenus des répertoires « config », « tmp », « local », « IMG » et « squelettes » du répertoire de test vers les contenus des répertoires « config », « tmp », « local », « IMG » et « squelettes » (à créer à la main) du répertoire vhosts/www.domaine1.tld/htdocs/sites/domaine1.tld/.

On réactualise la page www.domaine1.tld dans son navigateur et on se connecte à l’espace privé. On vide le cache et on se rend sur la page d’administration des plugins (et on les réactive le cas échéant).

Le site est fonctionnel et la base de mutualisation est établie.

Mutualisation d’un autre site situé sur la même instance

On dispose d’un autre site (à l’adresse www.domaine2.tld) hébergé sur la même instance Simple Hosting et on souhaite lui faire bénéficier de la mutualisation.

Redirection vers le site de mutualisation

Attention : l’opération suivante va temporairement rendre l’adresse www.domaine2.tld inaccessible.

On se rend sur l’interface d’administration de son instance et on clique sur « multi-address management » puis on relie www.domaine2.tld à www.domaine1.tld.

Multi-adress management - figure 1
Multi-adress management - figure 2

Les fichiers et répertoires du site sont temporairement stockés dans le répertoire vhosts/www.domaine2.tld/htdocs_old. On en aura besoin plus tard.

Configuration de la mutualisation et installation du site

On récupère le fichier « mes_options.php » situé dans le répertoire vhosts/www.domaine1.tld/htdocs/config/ puis on effectue la modification suivante :

/* placer dans ce tableau les sites ou l'on ne veut pas la redirection canonique */ 
$www = array('domaine1.tld','domaine2.tld');

On transfère ensuite ce fichier modifié à son emplacement d’origine puis on tape www.domaine2.tld dans le navigateur.
Le formulaire d’activation de la mutualisation apparaît et on reprend la procédure de la partie précédente (Ré-installation du site) en déplaçant les contenus des répertoires « config », « tmp », « local », « IMG » et « squelettes » de vhosts/www.domaine2.tld/htdocs_old/ vers vhosts/www.domaine1.tld/htdocs/sites/domaine2.tld/. (On pensera également à déplacer les plugins vers vhosts/www.domaine1.tld/htdocs/plugins/).

On réactualise la page www.domaine2.tld dans le navigateur et on se connecte à l’espace privé. On vide le cache et on se rend sur la page d’administration des plugins (et on les réactive le cas échéant).

On efface enfin les fichiers restants contenus dans vhosts/www.domaine2.tld/htdocs_old afin d’économiser de l’espace disque.

Le deuxième site est mutualisé.

Mutualisation d’un site développé en local

On dispose d’un autre site développé en local qu’on souhaite lier à l’adresse domaine3.tld et joindre à la mutualisation.

Redirection permanente

Tout d’abord, on décide de faire pointer domaine3.tld vers www.domaine3.tld à l’aide d’une redirection permanente. Pour cela, on se rend sur la page de gestion de son nom de domaine et on crée la redirection.

Redirection web - figure 1
Redirection web - figure 2

Modification du fichier de zone

Toujours sur la page de gestion du nom de domaine, on change le fichier de zone pour que domaine3.tld pointe vers l’instance Simple Hosting.

Fichier de zone

Création du vhost

On ajoute alors le vhost www.domaine3.tld à l’instance Simple Hosting via la page de l’instance en décochant la modification automatique des DNS.

Nouvelle adresse

Redirection vers le site de mutualisation

On se rend sur l’interface d’administration de l’instance et via le « multi-address management », on relie www.domaine3.tld à www.domaine1.tld comme illustré précédemment (Redirection vers le site de mutualisation).

Base de donnée

On crée la base de données depuis l’interface d’administration de l’instance.

Accès à la base de données
Encodage de la base

On exporte ensuite la base de données locale puis on l’importe via PhpMyadmin depuis l’onglet SQL de sa base de données.

Configuration de la mutualisation et installation du site

On récupère le fichier « mes_options.php » situé dans le répertoire vhosts/www.domaine1.tld/htdocs/config/ puis on effectue la modification suivante :

/* placer dans ce tableau les sites ou l'on ne veut pas la redirection canonique */ 
$www = array('domaine1.tld','domaine2.tld','domaine3.tld');

En attendant la propagation DNS liée à la modification du fichier de zone, on transfère les plugins nécessaires vers www.domaine1.tld/htdocs/plugins/.
On transfère également les répertoires « config », « tmp », « local », « IMG » et « squelettes » vers le vhost de test (Préparation des répertoires sur le serveur). Attention à modifier préalablement le fichier « connect.php » du répertoire « config » afin que la connexion à la base de données puisse se faire convenablement.

Au bout d’un certain temps (entre quelques minutes et quelques heures), la propagation DNS est terminée et l’adresse www.domaine3.tld tapée dans le navigateur renvoie bien le formulaire d’activation de la mutualisation. On reprend la procédure indiquée Ré-installation du site (sans oublier de déplacer les plugins vers vhosts/www.domaine1.tld/htdocs/plugins/).

Une fois connecté à l’espace privé, on n’oublie pas de :

  • changer l’URL du site public (dans l’onglet « configuration » puis « identité du site ») qui est certainement une URL liée à l’installation locale.
  • vider le cache.
  • se rendre sur la page de gestion des plugins pour les activer (éventuellement) et recréer le cache des pipelines.

Le troisième site est mutualisé.

Discussion

Aucune discussion

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