Mutualisation, le retour !

Salut à tous,
Je commence mes tests sur la mutualisation.
J'ai cependant une question.

Voilà l'arborescence à laquelle je devrais arriver en terme d'organisation :
pays_A/site_1
pays_A/site_2
pays_A/site_3
pays_B/site_1
pays_B/site_2
pays_B/site_3
admin/ecrire
admin/dist
admin/plugins

et les sites devraient êtres accessibles via les url :
http://www.sitegenerale.ltd/pays_A/site_1
ou
http://pays_A.sitegenerale.ltd/site_1

Est-ce que je peut mettre des path complet dans mes_config.php ? (/var/www/...)
Sinon vous avez une idée de comment faire ?

Seb

--
Denooz Sébastien. Crowfoot pour les intimes...
Jabber : crowfoot@jabber.fr
Web : http://www.licronux.org

Hacking For Freedom
Fellowship of F.S.F.E.
http://www.fsfe.org

On Fri, 2007-05-25 at 15:51 +0200, Denooz Sébastien wrote:

Est-ce que je peut mettre des path complet dans mes_config.php ? (/var/www/...)

oui, mais ça a l'air de mettre la zone dans le résultat de la balise
#CHEMIN qui se met alors à retourner comme url des chemin absolus.

j'ai contourné ça comme ça :
function balise_CHEMIN($p) {
  $p->code = interprete_argument_balise(1,$p);
  $p->code = 'str_replace("'.$_SERVER['DOCUMENT_ROOT'].'/", "", find_in_path(' . $p->code .'))';

  return $p;
}

  je ne sais pas si ça marche à tous les coups, mais pour l'instant,
"chez moi ça marche" ©

--
À+, Pif.

Cool ! merci.
Donc tu utilise une mutualisation organisée de la même facon que moi ?
Parce qu'en fait, j'ai des doutes sur le fait qu'une tel organisation
fonctionne ...

Peu-tu m'éclairer sur comment tu as dis à spip ou à apache d'aller
dans un sous-sous dossier de la racine (dans "un autre secteur" en
spip) ? C'est là dessus que je cale.

Merci bien.

Le 25/05/07, christian lefebvre<christian.lefebvre@atosorigin.com> a écrit :

On Fri, 2007-05-25 at 15:51 +0200, Denooz Sébastien wrote:
> Est-ce que je peut mettre des path complet dans mes_config.php ? (/var/www/...)
oui, mais ça a l'air de mettre la zone dans le résultat de la balise
#CHEMIN qui se met alors à retourner comme url des chemin absolus.

j'ai contourné ça comme ça :
function balise_CHEMIN($p) {
        $p->code = interprete_argument_balise(1,$p);
        $p->code = 'str_replace("'.$_SERVER['DOCUMENT_ROOT'].'/", "", find_in_path(' . $p->code .'))';

        return $p;
}

  je ne sais pas si ça marche à tous les coups, mais pour l'instant,
"chez moi ça marche" (c)

--
À+, Pif.

--
Denooz Sébastien. Crowfoot pour les intimes...
Jabber : crowfoot@jabber.fr
Web : http://www.licronux.org

Hacking For Freedom
Fellowship of F.S.F.E.

Denooz Sébastien a écrit :

Salut à tous,
Je commence mes tests sur la mutualisation.
J'ai cependant une question.

Voilà l'arborescence à laquelle je devrais arriver en terme d'organisation :
pays_A/site_1
pays_A/site_2
pays_A/site_3
pays_B/site_1
pays_B/site_2
pays_B/site_3
admin/ecrire
admin/dist
admin/plugins

et les sites devraient êtres accessibles via les url :
http://www.sitegenerale.ltd/pays_A/site_1
ou
http://pays_A.sitegenerale.ltd/site_1

Est-ce que je peut mettre des path complet dans mes_config.php ? (/var/www/...)

ca, clairement, ca serait l'idéal, mais dans ca serait une autre approche, /ecrire n'etant pas fatalement accessible sous ton documentRoot.

Sinon vous avez une idée de comment faire ?

peut etre qu'en mettant une rewrite qui remette pays_A.sitegenerale.ltd/site_1 en www.sitegenerale.ltd/pays_A/site_1

et donc en configurant pour www.sitegenerale.ltd/pays_A/site_1

Sinon, sans "mutualisation", tu peux faire simplement des alias pour ecrire, dist et plugins mais....
- je crois qu'un alias est valable pour tous les sites (=> serveur dedié avec que ca dessus)
- ca ne laisse pas la possibilité de faire des /plugins pour chaque site

On Fri, 2007-05-25 at 16:08 +0200, Denooz Sébastien wrote:

Cool ! merci.
Donc tu utilise une mutualisation organisée de la même facon que moi ?

non, j'ai juste essayé de mettre spip dans /usr/local/spip et de
l'utiliser depuis /var/www/site1 et var/www/site2

pour l'instant, j'en suis à ça :
- spip dans /usr/local/spip avec le "plugin" mutualisation
- dans mes_options.php, ce code (inspiré de l'original) :
<?php

        if (!defined("_ECRIRE_INC_VERSION")) return;
        require _DIR_RACINE.'mutualisation/mutualiser.php';

        $site=$_SERVER["HTTP_HOST"];
        require $_ENV["PHPRC"]."/bdd.php";
// ça, c'est une bidouille pour que chaque site mette ces données
// de connexion au même endroit que son php.ini, mais dans un
// cas "tout sur la même bdd", ça n'a pas de sens => mettre les
// define _INSTALL_HOST_ en dur

        $e=$_SERVER["DOCUMENT_ROOT"].'/';

        define('_SPIP_PATH',
                $e . ':' .
                _DIR_RACINE .':' .
                _DIR_RACINE .'dist/:' .
                _DIR_RESTREINT
        );

        spip_initialisation(
                ($e . _NOM_PERMANENTS_INACCESSIBLES),
                ($e . _NOM_PERMANENTS_ACCESSIBLES),
                ($e . _NOM_TEMPORAIRES_INACCESSIBLES),
                ($e . _NOM_TEMPORAIRES_ACCESSIBLES)
        );

        $GLOBALS['dossier_squelettes'] = $e.'squelettes';

        if (is_readable($f = $e._NOM_PERMANENTS_INACCESSIBLES._NOM_CONFIG.'.php'))
                include($f);
?>

- dans mes_fonctions (pour l'instant, mais ça serait à mettre à un
  endroit plus "joli"
<?php

function balise_CHEMIN($p) {
        $p->code = interprete_argument_balise(1,$p);
        $p->code = 'str_replace("'.$_SERVER['DOCUMENT_ROOT'].'/", "", find_in_path(' . $p->code .'))';

        #$p->interdire_scripts = true;
        return $p;
}

?>
pour que #CHEMIN retourne pas des chemin absolus

pour l'instant, j'ai 2 sites qui marchent comme ça. j'ai un truc qui
déconne sur l'un d'eux, mais ça n'a peut être rien à voir avec ça.

--
À+, Pif.

oui, mais ça a l'air de mettre la zone dans le résultat de la balise
#CHEMIN qui se met alors à retourner comme url des chemin absolus.

Ah tu vois bien que ça ne marche pas :slight_smile:

On a toujours ce problème qui est qu'on ne fait pas de distinction
entre le chemin http et le chemin filesystem.

-- Fil

On Fri, 2007-05-25 at 16:17 +0200, Fil wrote:

> oui, mais ça a l'air de mettre la zone dans le résultat de la balise
> #CHEMIN qui se met alors à retourner comme url des chemin absolus.

Ah tu vois bien que ça ne marche pas :slight_smile:

oui, mais le patch proposé dans le même mail à l'air de suffire.
reste à voir si c'est vrai tout le temps. y'a notamment le fait que dans
mon cas, le site est dans / et pas dans un /spip. s'il y a un lien
symbolique sur la route, ça peut aussi ne pas correspondre.

--
À+, Pif.

On Fri, 2007-05-25 at 16:17 +0200, christian lefebvre wrote:

pour l'instant, j'en suis à ça :

J'ai oublié un morceau : les rewrite rules

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteCond /usr/local/spip/%{REQUEST_FILENAME} -f
RewriteRule ^(.+) /usr/local/spip/$1 [L]

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-d
RewriteCond /usr/local/spip/%{REQUEST_FILENAME} -d
RewriteRule ^(.+) /usr/local/spip/$1/index.php [L]

là aussi, c'est à revoir car c'est un peu violent.
à priori, il suffirait plutôt faire des alias sur spip.php,
ecrire et quelques autres trucs.

--
À+, Pif.

Je profites pour étendre la question, j'ai une structure du genre
http://www.premiersite.tld
http://www.deuxiemesite.tld
http://troisiemesite.ouvaton.org
http://bidule.deuxiemesite.tld

tous se trouvent sur mon espace ouvaton, j'aimerais utiliser les path
complets et je ne sais pas comment et où...
... et où placer le SPIP qui gère tout ça? On peut imaginer de placer
SPIP en dehors (donc "avant" un site "visible" sur le net?)

Christian, tu places la fonction CHEMIN où?

Martin

Le vendredi 25 mai 2007 à 15:51:47, vous écriviez :

DS> Salut à tous,
DS> Je commence mes tests sur la mutualisation.
DS> J'ai cependant une question.

DS> Voilà l'arborescence à laquelle je devrais arriver en terme d'organisation :
DS> pays_A/site_1
DS> pays_A/site_2
DS> pays_A/site_3
DS> pays_B/site_1
DS> pays_B/site_2
DS> pays_B/site_3
DS> admin/ecrire
DS> admin/dist
DS> admin/plugins

DS> et les sites devraient êtres accessibles via les url :
DS> http://www.sitegenerale.ltd/pays_A/site_1
DS> ou
DS> http://pays_A.sitegenerale.ltd/site_1

DS> Est-ce que je peut mettre des path complet dans mes_config.php ? (/var/www/...)
DS> Sinon vous avez une idée de comment faire ?

DS> Seb

christian lefebvre a écrit :

On Fri, 2007-05-25 at 16:17 +0200, christian lefebvre wrote:

pour l'instant, j'en suis à ça :

J'ai oublié un morceau : les rewrite rules

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteCond /usr/local/spip/%{REQUEST_FILENAME} -f
RewriteRule ^(.+) /usr/local/spip/$1 [L]

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-d
RewriteCond /usr/local/spip/%{REQUEST_FILENAME} -d
RewriteRule ^(.+) /usr/local/spip/$1/index.php [L]

là aussi, c'est à revoir car c'est un peu violent.

Bonsoir,

Je viens de tester ta proposition, mais je n'arrive pas à me passer de certains problèmes :wink:

Voici ce que j'ai du faire pour activer les url propres... Les rewritesrules ici ne suffisaient pas. Je n'ai pas testé en alias (ça me parait encore plus dur !). J'ai ajouté que si on ne demande ni un fichier ni un dossier du site mutualisé, alors on va sur le noyau, sinon les url modifiées restaient sur place avec un 404 :
C'est fait rapido, hein :wink:

<VirtualHost *>
     ServerName essai.org
     DocumentRoot "/home/marcimat/public_html/essai.org/"

     RewriteEngine on

     RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
  RewriteCond /home/marcimat/public_html/spip/%{REQUEST_FILENAME} -f
  RewriteRule ^(.+) /home/marcimat/public_html/spip/$1 [L]

  RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-d
  RewriteCond /home/marcimat/public_html/spip/%{REQUEST_FILENAME} -d
  RewriteRule ^(.+) /home/marcimat/public_html/spip/$1/index.php [L]
  
  RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} -f
  RewriteRule ^(.+) - [L]
  
  RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} -d
  RewriteRule ^(.+) - [L]
  
  RewriteRule ^(.+) /home/marcimat/public_html/spip/$1 [L]
</VirtualHost>

Ca a réglé un problème...
Mais j'en ai trouvé un autre...
Alors que les css et js trouvées par la balise #CHEMIN (modifiée) passent sans incident, les images inclues dans les articles, elles ne traversent pas #CHEMIN et du coup, il cherche ces images dans http://essai.org/home/~marcimat/public_html/essai.org//IMG/… ou local parfois... Bref, pas jojo !

J'ai tenté de supprimer directement $_SERVER['DOCUMENT_ROOT'] du résultat de la fonction find_in_path, mais là non plus ça ne va pas !

Autre idée venue ensuite : corriger les chemins après le calcul du rendu par spip, en utilisant un pipeline qui va bien... je n'ai trouvé que affichage_final. J'ai utilisé comme suit (dans mes_options, avec la balise chemin)(un rien brute aussi !) :

$spip_pipeline['affichage_final'] .= '|chemin_correct';

function chemin_correct($texte){
  return str_replace($_SERVER['DOCUMENT_ROOT'], '', $texte);
}

(penser à supprimer tmp/charger_pipelines.php pour qu'il se régénère... j'ai galéré à cause de ça !)

Je n'ai maintenant plus de problème d'affichage des images dans la partie publique, mais aucune ne s'affiche dans la partie privée ! Car les adresses sont encore /home/marcimat/patati/patata.......

[->mode abandon]
Qui parlait de séparer l'adresse des path de celle des url ?
Je ne sais vraiment pas s'il y a d'autre solution si on veux avoir les sites en dehors du répertoire spip...

Par ailleurs, il reste un autre problème insoluble aussi, celui des url qui ne passent ni par query string (?) ni par spip.php, comme propres...

Elles nécessitent de renseigner le rewritebase du .htaccess du /spip/ dans mon cas. Si je mets rewritebase /, ça fonctionne pour tous les domaines et sous domaines... mais plus pour un spip dans un répertoire. C'est galère pour la mutualisation du coup si on ne veux pas tous les sites pareils.

J'ai bien tenté de mettre un rewritecond puis un rewritebase, mais apache ne garde que le dernier rewritebase quelque soit le rewritecond qui le précède... Ca aurait pu être sympa pourtant !

C'est vraiment tordu l'informatique parfois !

Bon... dodo !
MM.