Mutualiser Spip en local

Accueil / Articles / Mutualiser Spip en local
Mutualiser Spip en local

Article publié le 16 mars 2012  Mot(s) clé :   EasyPHP  Enregistrer au format PDF   Version PDF

Un moteur commun à plusieurs sites sous Spip : voilà le principe de la mutualisation. Gain de temps à l’installation, gain de temps à la gestion, mutualisation des ressources : quelques-uns des avantages.

Références :

Sur Spip Contrib : La mutualisation facile.

Sur Spip.net : Mutualisation du noyaux Spip.

Sur Geekographie : Gérer beaucoup de sites SPIP en local sous Mac OsX

Sur Pyrat.net : Mutualisation SPIP sur OVH

Sur code18.blogspot.com : Ajout d’un virtual host sur un serveur local

J’utilise Wampserveur, et Firefox.

Présentation de la mutualisation

Nous présentons ici la mutualisation de Spip sur un serveur local, émulé par EasyPHP ou Wampserveur ou toute autre combinaison Apache + PHP + Mysql.

En quelques mots, le principe de la mutualisation de Spip est simple : nous allons partager le « moteur » de spip et les plugins avec tous les sites.

Les avantages de la mutualisation de spip en local sont multiples :

-  Lorsqu’une nouvelle version de spip est disponible, faciliter la mise à jour de tous vos sites en un seul clic.

-  S’entraîner « en local » à mutualiser un site, afin de reproduire sans risque la mutualisation sur un serveur distant.

On utilise pour cela une version de Spip installée par Subversion (svn) ainsi que le plugin « Mutualisation ».

Mon serveur local aura comme adresse « localhost ».

REM : Pour Windows 7, pour que l’adresse « localhost » fonctionne, vous devez l’activer dans le fichier « hosts » :

-  exécutez en tant qu’administrateur votre éditeur de texte préféré (bloc-notes, ou Wordpad)

-  recherchez le fichier C :\Windows\System32\drivers\etc\Hosts (attention : si vous utilisez un éditeur de texte, n’oubliez-pas d’afficher « tous les fichiers », sinon, il ne vous proposera que les fichiers « .txt », et Hosts n’est pas un fichier « .txt »)

-  Ouvrez le fichier, et décommentez la ligne « 127.0.0.1 Localhost » (enlevez le #)

Préparation de la mutualisation

Je passe sur la mise en place de tel ou tel logiciel d’émulation d’un serveur Apache : prenez EasyPhP ou WampServeur, cela n’a pas d’importance. On recommande simplement, si on utilise Windows 7, d’installer ces logiciels en dehors du dossier « Program Files (x86) » pour simplifier la gestion des droits. Installez votre serveur préféré à la racine.

Je souhaite pouvoir installer sur mon serveur local d’autres sites que des sites Spip. Je vais donc suivre les indications qui me sont données dans tous les tutoriels proposés : je vais installer mes sites Spip dans un dossier « spip ». Dans mon cas, le dossier s’appellera « Spip2 », pour me laisser la possibilité plus tard de créer un dossier « Spip3 » lorsque la version 3 de Spip sera stable.

Chacun de mes sites aura une adresse du genre monsite.localhost, c’est-à-dire que chacun de mes sites sera en sous-domaine de Localhost.

Deux techniques possibles :

-  Utiliser un fichier .htaccess et la ré-écriture d’adresses

-  Configurer son serveur Apache

J’utilise la 2nde technique.

Pour que la mutualisation fonctionne, lorsque je souhaite me rendre à l’adresse monsite.localhost, il faut que mon serveur Apache soit configuré de telle sorte que monsite.localhost pointe sur le dossier où se trouve le moteur de spip et le plugin mutualisation.

Je vais créer pour cela dans la configuration d’Apache des « Hôtes Virtuels » (VirtualHost) et dire à mon serveur de diriger ces hotes virtuels vers le dossier où se trouve le moteur de Spip

Dans le fichier de configuration de mon serveur Apache (httpd.conf) je décommente ou, si elle n’existe pas, j’ajoute la ligne

# Virtual hosts
Include conf/extra/httpd-vhosts.conf

(a priori, à la fin de votre fichier de conf, vous avez une partie intitulée # Supplemental configuration)

Toujours avec mon éditeur de texte préféré, toujours en mode administrateur si l’on est sous Windows 7, j’ouvre le fichier

C:\wamp\bin\apache\Apache2.2.21\conf\extra

Attention : il s’agit du chemin pour Wampserveur. Pour EasyPhP, il se peut que le fichier se trouve « ailleurs ». Il est, en tout cas, dans le dossier \conf\extra.

S’il n’existe pas, créez-le.

REM : Attention à l’extension, qui doit bien être en « .conf ». Pour cela, n’oubliez pas, si vous êtes sous Windows 7, d’afficher les extensions connues, sinon, par défaut, votre fichier aura une extension « .txt » cachée, et il s’appellera httpd-vhosts.conf.txt Comme .txt sera caché, vous ne le verrez pas, et votre configuration d’Apache ne marchera pas, et vous ne comprendrez pas pourquoi…

Dans mon fichier httpd-vhosts.conf, je commence par rappeler que Localhost pointe sur la racine de mon serveur

NameVirtualHost *:80
<VirtualHost *:80>
     
       DocumentRoot "C:\wamp\www"
        ServerName localhost

</VirtualHost>

Et ensuite, pour chacun de mes sites, je défini le VirtualHost correspondant :

#BdP.com
<VirtualHost *:80>
     
       DocumentRoot "C:\wamp\www\spip2"
        ServerName bdp.localhost
  <Directory "C:\wamp\www\spip2">
      Options Indexes FollowSymLinks MultiViews
      AllowOverride All
      Order allow,deny
      Allow from all
  </Directory>

</VirtualHost>

#Blog Photos
<VirtualHost *:80>
     
       DocumentRoot "C:\wamp\www\spip2"
        ServerName blogphotos.localhost
  <Directory "C:\wamp\www\spip2">
      Options Indexes FollowSymLinks MultiViews
      AllowOverride All
      Order allow,deny
      Allow from all
  </Directory>

</VirtualHost>

Vous voyez que mes sites s’appellent bdp.localhost, blogphotos.localhost, etc... et que je fais pointer le sous domaine vers le dossier où se trouve le moteur de spip, c’est-à-dire le dossier « spip2 »

Après avoir défini mes Virtualhost dans la configuration d’Apache, je reviens sur mon fichier host pour préciser que mon sous-domaine doit pointer vers Localhost

Dans le fichier C :\Windows\System32\drivers\etc\Hosts, j’ajoute les lignes

127.0.0.1        bdp.localhost
127.0.0.1        blogphotos.localhost

N’oubliez pas de redémarrer Apache pour que la nouvelle configuration prenne effet.

A chaque fois que je voudrai ajouter un nouveau site spip mutualisé, je ferai de même :

-  définition du VirtualHost dans le fichier httpd-vhosts.conf

-  définition de l’adresse dans le fichier C :\Windows\System32\drivers\etc\Hosts

Une fois cette définition faite, utilisez « l’invite de commande », et videz la mémoire DNS avec la ligne de commande suivante :

Ipconfig/flushdns

Et maintenant, tout est prêt pour la mutualisation, qui va se faire toute seule. Le plus compliqué de la mutualisation de spip en local, c’est la préparation du serveur.

Mise en place d’un site Spip mutualisé

1. Déposez par svn dans votre dossier spip2 un spip sans l’installer.

2. Créez dans votre dossier spip2 un dossier intitulé « sites »

3. Déposez par SVN le plugin mutualisation

4. Configurez le fichier /config/mes_options.php comme cela est expliqué dans les différents tutoriels de mutualisation.

Je précise dans ce fichier l’adresse de ma base de donnée mysql, en modifiant les lignes

        define ('_INSTALL_SERVER_DB', 'mysql');
        define ('_INSTALL_HOST_DB', 'localhost');
        define ('_INSTALL_USER_DB', 'root');  
        define ('_INSTALL_PASS_DB', '');

(j’utilise une base mysql, elle se trouve à localhost, et l’utilisateur est “root”, à vous d’adapter selon vos besoins)

Et comme cela est précisé au tout début du fichier , je supprime le nom de domaine scriibe.net

* Si le site maitre n'est pas dans sites/ mais a la racine, mettre ''
       
* et ajouter 'mutualisation' dans $dossier_squelettes
         
*/
        define ('_SITES_ADMIN_MUTUALISATION', '');

Et c’est parti !

J’appelle bdp.localhost dans mon navigateur, et le plugin mutualisation se met en marche.

Comme je n’ai pas changé le code de mutualisation, il reste « ecureuil »

Le plugin créé les dossiers propres à mon site, et il installe les dossiers IMG, Config, local, et temp

Et normalement, tout fonctionne.

Installation des plugins

Les plugins sont installés dans le dossier plugins à la racine, et sont communs à tous vos sites. Il suffit pour chaque site de les activer, ou non. L’un des grands avantages de la mutualisation : vous installez le plugin une fois pour toute, par SVN de préférence. Un gain de temps important.

Restauration d’une base de données.

A l’heure où j’écris cet article, la restauration de la base pose un tout petit problème, simple à corriger.

L’adresse du dossier IMG de votre site mutualisé est sites/bdp.localhost/IMG/ Vous pouvez voir cette valeur en utilisant Phpmydmin, en regardant dans la table spip_meta de votre base de données, à la valeur dir_img.

Or, lorsque vous restaurez la base d’un site distant par exemple, le nom de votre dossier image est IMG

Il faut donc, si vous faites la restauration d’un site distant, modifier cette valeur et mettre sites/monsite.localhost/IMG (à supposer que vous avez suivi les indications de ce topo, et que l’adresse de votre site est du genre monsite.localhost . Sinon, adaptez)

URL Rewritting

Afin de mettre en place y compris en local l’URL rewritting pour obtenir des URL propres, vous installez un fichier .htaccess à la racine des sites mutualisés, c’est-à-dire dans votre dossier spip2

Votre fichier .htaccess doit ressembler à quelque chose de ce genre :

RewriteEngine On
RewriteBase /
################ GESTIONS DES URLS SPIP #######################

RewriteCond %{REQUEST_FILENAME} -f

RewriteRule "." - [skip=100]

RewriteCond %{REQUEST_FILENAME} -d

RewriteRule "." - [skip=100]

RewriteRule rubrique([0-9]+)\.html$        /spip.php?page=rubrique&id_rubrique=$1 [QSA,L]

RewriteRule article([0-9]+)\.html$        /spip.php?page=article&id_article=$1 [QSA,L]

RewriteRule breve([0-9]+)\.html$        /spip.php?page=breve&id_breve=$1 [QSA,L]

RewriteRule mot([0-9]+)\.html$                /spip.php?page=mot&id_mot=$1 [QSA,L]

RewriteRule auteur([0-9]+)\.html$        /spip.php?page=auteur&id_auteur=$1 [QSA,L]

RewriteRule site([0-9]+)\.html$        /spip.php?page=site&id_syndic=$1 [QSA,L]


RewriteRule ^(rubrique|article|breve|mot|auteur|site|agenda|backend|backend-breves|distrib|forum|ical|plan|recherche|resume|sommaire|sommaire_texte)\.php3?$        spip.php?page=$1 [QSA,L]

RewriteRule ^page.php[3]?        spip.php [QSA,L]

RewriteRule ^spip_cal\.php3?$        spip.php?action=ical [QSA,L]

RewriteRule ^spip_rss\.php3?$        spip.php?action=rss [QSA,L]

# Les mots-cles

RewriteRule ^\+-[^/\.]+(-\+)?(\.html)?$        spip.php?page=mot [QSA,E=url_propre:$0,L]

# Les breves

RewriteRule ^\+[^/\.]+\+?(\.html)?$         spip.php?page=breve [QSA,E=url_propre:$0,L]

# Les rubriques

RewriteRule ^-[^/\.]+-?(\.html)?$        spip.php?page=rubrique [QSA,E=url_propre:$0,L]

# les auteurs

RewriteRule ^_[^/\.]+_?(\.html)?$        spip.php?page=auteur [QSA,E=url_propre:$0,L]

# Les sites

RewriteRule ^@[^/\.]+@?(\.html)?$        spip.php?page=site [QSA,E=url_propre:$0,L]

# Les articles (en dernier car expression plus "large")

RewriteRule ^[^/\.]+(\.html)?$                spip.php?page=article [QSA,E=url_propre:$0,L]

# Fin URLs "propres" et "propres2"

###

C’est tout !... (et c’est déjà pas mal)

Merci à tous ceux qui ont écrit auparavant sur ce sujet. Ce texte me sert avant tout pour moi, comme aide-mémoire, pour ne pas ré-inventer l’eau chaude à chaque fois que je mettrai en place un nouveau site.

Si cela peut vous aidez, c’est avec plaisir !

Et si vous trouvez des coquilles, un petit mot dans le forum ! Merci !

Ces articles peuvent vous intéresser