Mutualisation chez OVH, on applique une solution différente

, par Jacques

J’ai eu pas mal de soucis avec mon premier essai de mutualisation, principalement avec les mises à jour de plugins qui désactivaient les plugins sur les autres sites... Et aussi ce n’était pas très pratique d’avoir tous les sites dans une même base.
L’hébergement perf que j’ai chez OVH me permet d’avoir un "SQL Privé" avec autant de bases que je veux, alors pourquoi s’embêter, créons une base par site.
Un essai intermédiaire avec le plugin mutualisation ne m’a pas satisfait parce que je n’arrivais pas à afficher un site avec le www avec lequel il était référencé.
Alors j’ai décidé d’essayer la solution que nous avait proposé Pierrox lors d’un apéro-SPIP à Toulouse : pas besoin du plugin mutualisation : juste un dossier sites et un mes_options.php qui configure la mutualisation, et c’est tout.

La solution en deux mots

  • on installe un SPIP de base
  • on crée le fichier mes_options.php
  • le fichier mes_options.php contient deux lignes permettant l’utilisation d’un dossier plugins/auto par site
  • on créée le dossier sites dans lequel on créera manuellement les dossiers de chaque site

Nota : ne pas oublier de protéger le dossier sites avec un .htaccess contenant simplement
options -indexes

Paramétrer le domaine dans le manager OVH

Il faut d’abord paramétrer le domaine ou le sous-domaine dans la partie "multisites" de l’hébergement OVH.
On fait pointer le ou les nouveau(x) domaine(s) sur le dossier de l’hébergement où on a décidé d’installer la mutualisation.
Egalement SSL est activé pour chaque nouveau site et il faut éventuellement "régénérer le certificat SSL"

Créer la base liée au site

il faut créer la base de données et lui affecter un utilisateur. L’utilisateur doit avoir des droits d’administrateur. On peut créer un administrateur indépendant si on doit déléguer l’administration du site à une personne indépendante.

Installation du site

J’ai d’abord installé un SPIP de base. Puis j’ai créé le dossier sites avec le .htaccess options -indexes et j’ai créé le fichier mes_options .php avec les valeurs du fichier exemple fourni par Pierrox :

<?php

$rep = 'sites/';
   $site = $_SERVER['HTTP_HOST'];
   $site = preg_replace('#^(dev|www).#','',$site);
   $site = preg_replace('#(.loc)$#','',$site);
   $path = _DIR_RACINE . $rep . $site . '/';
 
   # ordre de recherche des chemins
   define('_SPIP_PATH',
           $path . ':' .
           _DIR_RACINE .':' .
           _DIR_RACINE .'squelettes-dist/:' .
           _DIR_RACINE .'prive/:' .
           _DIR_RESTREINT);
   
   # ajout du dossier squelette
   if (is_dir($path . 'squelettes'))
           $GLOBALS['dossier_squelettes'] = $rep . $site . '/squelettes';
   
   # Logs dans racine/tmp/logs pour tous les sites
   define('_FILE_LOG_SUFFIX', '_' . $site . '.log');
   define('_DIR_LOG',  _DIR_RACINE . 'tmp/logs');
               
        # On ajoute un dossier supplémentaire pour les plugins
#        define('_DIR_PLUGINS','');    
        define('_DIR_PLUGINS_SUPPL',_DIR_RACINE.'sites/'.$site.'/plugins/');
        define('_DIR_PLUGINS_AUTO',_DIR_RACINE.'sites/'.$site.'/plugins/auto/');

   # prefixes des cookie et des tables :
   $cookie_prefix = str_replace('.', '_', $site);
   $table_prefix = 'spip';
   
   # exectution du fichier config/mes_option.php du site mutualise
   if (is_readable($f = $path . _NOM_PERMANENTS_INACCESSIBLES . _NOM_CONFIG . '.php'))         # config/mes_options.php
           include($f);
   
   // demarrage du site
   spip_initialisation(
           ($path . _NOM_PERMANENTS_INACCESSIBLES),                        # config/
           ($path . _NOM_PERMANENTS_ACCESSIBLES),                        # IMG/
           ($path . _NOM_TEMPORAIRES_INACCESSIBLES),               # tmp/
           ($path . _NOM_TEMPORAIRES_ACCESSIBLES)                         # local/
   );

C’est prêt !

Il faut maintenant compléter les dossiers pour chaque site qui sera installé.
Je me suis créé en local une configuration de base avec tous les dossiers nécessaires, que je copie au besoin, en renommant le exemple.jack31.org avec le bon nom de site.

.htaccess

A la racine du site de base on renomme le htaccess.txt en .htaccess.
Ensuite on peut rajouter dans les paramètres personnalisés deux lignes qui activent le SSL (https) sur tous les sites :

RewriteCond %{SERVER_PORT} 80
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Ensuite pour chaque site qui requiert www devant le domaine il faut écrire

RewriteCond %{HTTP_HOST} ^mondomaine.tld
RewriteRule ^(.*)$ https://www.mondomaine.tld/$1 [R,L]

Et dans cette configuration de mutualisation ça fonctionne, contrairement aux soucis que j’avais exprimés dans ce mail

Le dossier plugins/auto

Les paramètres dans mes_options.php requièrent un dossier plugins/auto par site.
Il est dommage de ne pas optimiser là aussi. Mais il y a trop de bugs liés au x mises à jour en mutualisé. La solution serait de faire les mises à jour en svn... Peut-être un jour ^^
Nota :
Parfois les plugins, lorsqu’ils créent des tables ne s’installent pas bien. C’est probablement lié à la configuration d’OVH. Donc à chaque fois bien vérifier que tout est bien créé. J’ai dû plusieurs fois importer des tables manuellement. Ensuite les mises à jour de ces tables fonctionnent normalement.