Ferme à SPIP

Un petit article synthétique qui explique en quelques mots et captures d’écrans comment faire une «ferme à SPIP» avec le plugin “Mutualisation” à partir d’un nom de domaine principal.

ATTENTION , cet article nécessite d’utiliser une version stable > à 2.0

Les prérequis (au 1er janvier 2008) :

-  posséder un nom de domaine disponible
-  avoir la possibilité de modifier la configuration apache

Dans l’exemple suivant on supposera que l’on cherche à mettre la ferme sur le site GrmlEU [1]

Installation SPIP

Installer un SPIP (une version récente est recommandée). Pour la suite de l’exercice on supposera que le SPIP est installé dans le répertoire «/home/grml/public_html/».

Installation plugin mutualisation

Installer le plugin Mutualisation [2] (il est plus simple de ne pas le mettre dans le répertoire plugin) . Nous avons donc «/home/grml/public_html/mutualisation»

Configuration apache

Modifier la configuration apache

Si vous êtes sur apache2 il faut créer un fichier grml.eu.

etc/apache2/sites-available# more grml.eu 
<VirtualHost *>
ServerName grml.eu
ServerAlias *.grml.eu
DocumentRoot /home/grml/public_html
</VirtualHost>

Ce qui veut dire que tous les sous domaines de grml.eu vont pointer vers le répertoire «/home/grml/public_html».

Ensuite il faut faire une lien symbolique pour que le domaine soit actif

cd etc/apache2/sites-enable
ln -s /etc/apache2/sites-available/grml.eu  grml.eu 

Enfin il faut prendre en compte ces changements

/etc/init.d/apache2 force-reload 

Configuration DNS

Il faut maintenant que lorsque l’on tape grml.eu, il redirige vers l’adresse ip du serveur

voici la config utilisée chez gandi

Configuration de la mutualisation

Copier le fichier /home/grml/public_html/mutualisation/mes_options.php.txt vers «/home/grml/public_html/config» et enlevez l’extension «.txt» . Ouvrez ce fichier et procédez au paramétrage.

Pour vous aider voici le fichier de config utilisé sur scriibe

<?php
 
        $GLOBALS['taille_des_logs']=1000;
        #parametrage a faire 
        $monTld="scriibe.net";
 
        require _DIR_RACINE.'mutualisation/mutualiser.php';
        define ('_ID_WEBMESTRES', 1);
 
        $site = $_SERVER['HTTP_HOST'];
 
        $type_urls = 'propres2'; # par defaut, surchargeable ci-dessous

        switch($site) {
                case "www.$monTld":
                        $site=$monTld;
                        break;
                case 'www.spip-blog.net':
                        $site='spipblog';
                        break;
                case 'spip-blog.net':
                        $site='spipblog';
                        break;
                default :
                        $site = str_replace('.scriibe.net', '', $site);
                        break ; 
        }
        define ('_SITES_ADMIN_MUTUALISATION', ''); // ici sites esclaves
        define ('_INSTALL_SERVER_DB', 'mysql');
        define ('_INSTALL_HOST_DB', 'plouf');
        define ('_INSTALL_USER_DB_ROOT', 'plouf');
        define ('_INSTALL_PASS_DB_ROOT', 'plouf');
        define ('_INSTALL_TABLE_PREFIX', 'spip');
        define ('_INSTALL_NAME_DB', 'scr_'.prefixe_mutualisation($site));
        if ($site != "$monTld") {
                demarrer_site($site,
                        array(
                        'creer_site' => true,
                        'creer_base' => true,
                        'code' => 'plouf',
                        'url_img_courtes' => true,
                        'creer_user_base' => true,
                        'mail' => 'ben.spip@gmail.com'
                        )
                );
        }
        else {
        $GLOBALS['dossier_squelettes']=":mutualisation";
        }
 
?>

pour celui sur GrmlEU

<?php
 
        if (!defined("_ECRIRE_INC_VERSION")) return;
        require _DIR_RACINE.'mutualisation/mutualiser.php';
 
        $site = str_replace('www.', '', $_SERVER['HTTP_HOST']);
        if ($site != $_SERVER['HTTP_HOST']) {
                include_spip('inc/headers');
                redirige_par_entete('http://'.$site.'/');
        }
 
        define ('_INSTALL_SERVER_DB', 'mysql');
        define ('_INSTALL_HOST_DB', 'localhost');
        define ('_INSTALL_USER_DB', 'plouf');
        define ('_INSTALL_PASS_DB', 'plouf');
        define ('_INSTALL_NAME_DB', 'grml');
        #define ('_INSTALL_TABLE_PREFIX', 'spip');
 
        define ('_SITES_ADMIN_MUTUALISATION', 'grml.eu');
 
 
        demarrer_site($site,
                array(
                        'creer_site' => true,  
                        'creer_base' => false,
                        'creer_user_base' => false,
                        'mail' => 'ben.spip@gmail.com',               
                        'code' => 'ecureuil',
                        'table_prefix' => true,     
                        'cookie_prefix' => true,   
                        'repertoire' => 'sites',     
                        'url_img_courtes' => true, 
                        'url_creer_base' => '' 
                )
        );
 
?>

On peut noter que pour scriibe, une base et un utilisateur mysql sont créés pour chaque site. Par contre sur GrmlEU, il n’y a qu’un user et qu’une seule base, avec un préfixe différent pour les tables de chaque site.

Footnotes

[1GrmlEU est un site qui permet d’essayer SPIP : vous pouvez créer un SPIP en quelques clics. Les sites sont effacés tous les mois

Discussion

47 discussions

  • Lupitek

    J’ai une ferme a spip avec 20 sites dessus et je viens de me rendre compte qu’en faisant www.monsite1.com/sites/ j’obtient le listing de tous mes sites dans la mutualisation.

    Je n’ai pas vu dans la procédure d’installation qu’il fallait protéger le dossier /sites/ avec un .htaccess... ou alors j’ai raté un truc.

    Reply to this message

  • 3
    ERNCHEMILLOIS

    Bonjour,
    avec une seule base est il possible de jouer uniquement sur les préfixes des tables en réutilisant le nom du site, sans recréer une base de donnée indépendante ?

    Merci !

    • Affirmatif :
      -  le répertoire config est propre a chaque site !
      -  son fichier “connect.php” permet de choisir le $prefix

    • ERNCHEMILLOIS

      Merci pour la rapidité de la réponse, je m’attèle à la tâche de suite ,
      Et merci aux développeurs du plugin !

    • IL faut juste que tu régles bien le fichier de config pour que les sites s’installe correctement.
      Ne fais pas ça avec de gros site sinon j’ai peur que la base déconne.

    Reply to this message

  • Bonjour,

    Est-ce que ce plugin peut-être utilisé avec des sites en sous-répertoire au lieu de sous-domaine ? Je voudrais que mes adresses soient comme ça : www.mondomaine.com/site1, www.mondomaine.com/site2, etc.

    merci!

    Reply to this message

  • 1
    Tipoussin

    Bonjour,

    Je sèche sur l’utilisation de ce plugin. Lorsque je tape mondomaine.tld, j’arrive sur une page “Installation de votre site SPIP” où on me demande un code d’activation du site...

    Qu’est-ce que c’est ?

    Merci

    Reply to this message

  • 4
    Apprenti geek

    Bonjour, j’ai installé le plugin mutualisation et tout marche impeccable.

    Seulement voilà, je ne sais pas comment faire un lien du dossier IMG d’un nouveau site mutualisé vers le dossier IMG du site existant avant la mutualisation...

    Dans le carnet Wiki sur la mutualisation, un auteur a écrit :
    “Ces répertoires peuvent être des liens symboliques vers les originaux du site à la racine, mais dans ce cas, le fichier mes_options.php devrait être déplacé dans /ecrire”

    J’ai bien mis mon fichier mes_options.php dans /ecrire/ mais je ne sais pas comment mettre en place ces liens symboliques.

    Quelqu’un aurait-il une idée ?

    Merci d’avance et comme d’hab, bravo pour le travail collaboratif de toute cette communauté !

    • Bonjour

      Pourquoi ne pas déplacer le fichier IMG vers la mutualisation ?

    • Apprenti Geek

      Bonjour,

      Tu as raison, mais étant que deux sites utiliseront la même base de données et donc les mêmes ressources à savoir le répertoire IMG, j’aurai aimé automatiser un peu le truc...

      Deux solutions s’offrent à moi :
      -  soit je mets en place une synchronisation automatique des deux sous répetoires IMG (aucune idée comment procéder mais cette solution supposerait de dupliquer automatiquement tout fichier dans le dossier IMG du site 1 vers le dossier IMG du site 2;
      -  soit je permets au site 2 d’aller chercher son dossier IMG non pas dans son sous répertoire, mais dans le sous répertoire du site 1;

      J’espère que je suis suffisamment clair... tu penses pouvoir m’aider ?

      Merci d’avance en tout cas pour ta réponse

    • Alors à ta réponse voici une question : 2 sites OK

      Pourquoi la même base et les même images, autant faire un site non ?

    • Apprenti Geek

      non parce que le site 1 n’a pas le même design et ne propose pas les mêmes fonctionnalités que le site 2 ... donc des templates différents mais un contenu de base similaire pour certaines rubriques...

    Reply to this message

  • 5

    Bonjour,

    Je pense créer un site internet et un blog. Idéalement le site sera multilingue et le blog dans une seule langue.

    Mon but est d’avoir une adresse internet www.adresseweb.com et un sous-domaine interne pour mon blog : blog.adresseweb.com

    Est ce que ce plugin est adapté à mon objectif ?
    Si non, y a t il une autre solution ?

    Merci

    • Bonsoir
      L’intéré de ce plugins est de mutualiser un spip et ses plugins donc si tu as 2 sites et 2 squelettes cela ne vos pas le coup a mon avis.

      Peux tu nous en dire plus sur ton projet ?

    • Comme indiqué dans mon précédent message, je souhaite réaliser un site sur une adresse et un blog sur un domaine interne (par exemple http://blog.adresseweb.com.
      L’une des solution que je vois, est de créer des compositions différentes (une pour le site + une autre pour le blog) avec plusieurs rubriques dont l’une blog. Sur mon FTP, dans mon répertoire /blog, je pourrais placer un fichier de redirection php vers l’url générée par spip pour la rubrique blog.

      Néanmoins, tout ça me semble de la bricole. D’où mes recherches s’il n’y aurait pas une meilleure solution plus “propre”.

    • Pierre KUHN

      Dans ce cas autant monter 2 sites a moins que tes plugins soit commun car si je comprend bien tu utiliserais Composition ?

    • Oui, j’utiliserais Compositions et d’autres plugins certainement en commun.
      Néanmoins, le désavantage de 2 sites est d’avoir 2 espaces privés. Mon but est d’en avoir idéalement un seul. D’ou mas recherche sur la mutualisation.

    • Pierre KUHN

      Euh alors tu as pas compris ce qu’est la mutualisation. La mutu te permets d’avoir x sites sur 1 SPIP et donc x espaces privés.

      Si tu veux 1 espace privé, il te faut dans ce cas jouer avec le plugins multidomaine http://www.spip-contrib.net/Plugin-Multidomaines

    Reply to this message

  • 1

    La personnalisation de la variable $dossier_squelettes> via $GLOBALS['dossier_squelettes'] = 'mon_dossier' dans mes_options.php ne fonctionne pas chez moi dans le cadre d’une ferme à spip. C’est normal ça ?

    • Je me réponds à moi-même...
      En fait il faut indiquer le chemin complet du répertoire que l’on souhaite prendre en compte

      Par ex : pour le site1 :

      dans
      www/sites/monsite1/config/mes_options.php

      il faut indiquer
      $GLOBALS['dossier_squelettes'] ='sites/monsite1/skel';
      et le rép. skel est bien pris en compte.

      Quand on y réfléchit, c’est assez logique, mais c’est tout de même perturbant au premier abord puisqu’on a envie d’écrire
      $GLOBALS['dossier_squelettes'] ='skel';

      et dans ce cas, SPIP s’attend à trouver un dossier ’skel’ à la racine.. de la mutualisation ! Et non pas à la racine “du site1”

      Logique, mais pas tout à fait “portable” : si on sort le site de la mutualisation (ex : sur mon site de développement en local, c’est en mutu <==> sur le site en production, ce n’est plus le cas), le contenu de mes_options.php n’est pas strictement le même

      N’y aurait-il pas moyen d’homogénéiser les deux écritures ?

      Allez, bonne année à notre écureuil et un énoooorme merci à ses développeurs !

    Reply to this message

  • 4
    Marc VALLETEAU de MOULLIAC

    Bonjour, je trouve ce plugin vraiment formidable, car je suis en train de mettre en place sur mon serveur dédié (Apache 2) un hébergement de sites accessibles par nom de domaine et non en sous-domaine.

    J’ai alors modifié les lignes du haut pour les remplacer par ceci :

    $site = $_SERVER['HTTP_HOST'];
       if ($site != $_SERVER['HTTP_HOST']) {
          include_spip('inc/headers');
          redirige_par_entete('http://'.$site.'/');
    }

    En effet, en laissant le code d’origine, impossible d’accéder à mon site “maître” (http://www.atoutsweb.org)

    Ai-je bien fait ? La mise en place d’un autre site a été un peu cahotique, - en utilisant un autre domaine pointant sur le “maître”, il m’a mis directement dans la fenêtre de création d’un répertoire, et non sur la demande du code (ecureuil) - mais ça a bien fonctionné en fin de compte.

    Par contre, j’ai un souci plus embêtant : sur la partie publique, il n’arrive pas à afficher les images du dossier IMG ou local/cache-vignettes car le chemin est incomplet (alors que tout s’affiche bien en privé).

    La modification ci-dessus en est-elle la cause ? Sinon, comment faire pour corriger cela ?

    Merci d’avance

    Marc

    • Delorimier

      Idem - j’ai le même problème avec les images dans la partie publique

    • Bonjour

      Est ce que l’on peux avoir l’adresse du soucis et le code du mes_options ?

    • VALLETEAU de MOULLIAC

      Bien, d’une part, je suis content d’avoir enfin (!) une réaction au sujet de mon post ...

      Par ailleurs, le problème a été résolu en complétant la config sur mon serveur (Mac os X) : j’ai autorisé toutes les dérogations, ce qui fait que depuis, cela fonctionne. Donc, le code du fichier mes_options.php n’est pas en cause ...

      Ce qui me soucie le plus, depuis cette solution, c’est la gesiton des plugins (en 2.0.10), car la plugin sensé permettre d’ajouter/enlever des plugins directement dans chaque site mutualisé est absolument inefficace. Il apparaît bien, en effet, la possibilité d’ajouter des plugins, mais ensuite, impossible de les activer !!

      Je suis donc obligé de les mettre dans le site maître, ce qui ne m’arrange pas toujours ...

      Merci à quiconque pourra m’aider à trouver une solution ...

    • Bonsoir

      ton message est dater de 2009 ... alors que j’en ai répondu en 2010 quand meme

      Est ce que tu peux nous en dire plus ?

      -  Tu es parti de quel exemple ?
      -  droit sur les dossiers ?
      ...

      Pour infos, sur ma mutu j’ai domaines et sous domaine et j’ai pas de soucis, les webmaster ont tous les droits

    Reply to this message

  • J’aimerai bien installer le plugin mutualisation chez free-h.org au travers d’une interface Plesk
    certain d’entre vous ont-ils réalisé cette installation

    merci

    Reply to this message

  • 1

    Salut et merci pour ce super plugin qui facilite vraiment les choses.

    Une précision pour les futurs utilisateurs, fruit d’une petite heure de prise de tête :

    il est préférable de s’arranger pour que le nom du répertoire de chaque site (donc dans l’exemple de cet article dans le répertoire ’sites/’) ne comporte pas de point !

    Je sais, c’est bateau mais si l’expérience peut servir ... j’aurai moins l’impression d’avoir perdu une heure pour une erreur d’inattention ;-)

    Explication rapide du problème rencontré :
    Si le répertoire d’un site est nommé du type ’sites/mondom.fr/’, certaines actions et notamment les téléchargements et accès aux documents sont impossibles (cas sur un serveur mutualisé OVH avec chmod limité à 755) ...
    Préférez donc des noms de répertoires du type ’mondom_fr/’ ou ’mondomfr/’

    Tchuss

    • Bonsoir

      Cela est possible chez OVH mais je n’ai pas ce soucis avec mon hébergeur même avec des sous.domaine.fr par exemple.

    Reply to this message

Add a comment

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 / PostgreSQL
  • 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 apparait.

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.

Who are you?
[Log in]

To show your avatar with your message, register it first on gravatar.com (free et painless) and don’t forget to indicate your Email addresse here.

Enter your comment here

This form accepts SPIP shortcuts {{bold}} {italic} -*list [text->url] <quote> <code> and HTML code <q> <del> <ins>. To create paragraphs, just leave empty lines.

Add a document

Follow the comments: RSS 2.0 | Atom