J'héberge en effet déjà deux blogs sur ce brave Totor, et seul l'ashram était jusqu'ici sous DotClear 2.0ß installé en mode monoblog, l'autre blog tournant jusqu'ici de son côté sous DotClear 1.2.5.

Comme j'envisageais depuis l'autre jour l'éventuelle mise en route d'un nouveau blog pour mademoiselle Patâpatî (afin d'inciter celle-ci à écrire davantage, dans le but sournois - on peut rêver - d'améliorer son orthographe), j'ai décidé de rationaliser tout ça, et de tirer parti des capacités multiblog de DotClear 2.0ß pour gérer les deux blogs existants et laisser la place à de futurs petits nouveaux, le tout avec une seule installation de DotClear à faire tourner et à maintenir, comme c'est reposant...

Il existe déjà, sur le forum de DotClear 2, un fil traitant de la question, toutefois je ne m'en suis pas vraiment inspiré, préférant me fier à mon instinct et à ce que j'avais déjà compris du fonctionnement du nouveau bestiau.

Mon objectif était :

  • Utilisant un serveur physique unique (une seule machine) ;
  • Avoir une seule installation de DotClear ;
  • Faisant tourner plusieurs blogs différents ;
  • Hébergés sous des noms de domaines différents ;
  • Via des serveurs HTTP virtuels (Apache) différents ;
  • Ayant pour chaque blog son répertoire de base, son répertoire "public", et son répertoire de "themes" à soi, possiblement dans le "home directory" de chaque utilisateur, de manière à rendre facile pour l'utilisateur la gestion par FTP de ses thèmes et fichiers personnels.

Donc en gros, avoir une installation de DotClear unique du point de vue de l'administrateur système, mais gérant plusieurs blogs de manière "étanche" et apparemment indépendante du point de vue tant du visiteur, que du propriétaire de chaque blog.

L'opération est un succès, aussi voici comment j'ai procédé, ainsi que les limites que j'ai pu percevoir à la chose.

La limite principale me semble être que, dans la mesure où, dans la configuration de dotclear, on doit définir pour chaque blog le chemin hébergeant le répertoire "themes" et celui du répertoire "public" non seulement sous forme d'URL (relative au blog), mais également sous forme de chemin de répertoires (relatif au répertoire dans lequel le "moteur" de DotClear est installé), il apparaît que le moteur de DotClear doit être installé sur le même serveur physique que les répertoires des blogs des utilisateurs (sauf à vouloir trifouiller du NFS...).

Lors de l'installation de multiples blogs, on verra en fait que ces définitions de chemins relatifs sont les choses les plus chiantes à faire. Mais pas tant que ça, une fois qu'on a saisi le truc.

En dehors de cette histoire de chemins, l'installation de DotClear en mode multiblog est assez peu différente du mode monoblog, aussi m'a-t-il été relativement facile de convertir mon système d'un mode vers l'autre. Je ne reviendrai pas sur mon installation de base initiale, que j'avais décrite dans cet article, notamment en ce qui concerne redirections, ré-écriture d'URLs, etc.

A partir de cette base, pour passer le tout en mode multiblog, voici, ce que j'ai fait :

  • J'ai installé tous les fichiers de DotClear quelque part sous la racine de mon serveur web "principal", par exemple sous /var/www/html/dotclear/ .
  • Je me suis ensuite arrangé, par une petite ruse de Sioux, pour que cette installation soit "invisible" pour un visiteur de mon serveur principal (s'il requiert cette URL, il se mangera un "404 Ça n'existe pas !", et non pas un "403 Niet tovarich !".)

Ensuite, et pour chaque blog à héberger :

  • Créer un répertoire de base pour le "serveur" virtuel, où on le souhaite.
  • Dans la configuration du serveur virtuel, définir simplement deux "Alias" pour l'installation de DotClear et l'accès à son interface d'administration :
<IfModule mod_alias.c>
        Alias /blog/ "/var/www/html/dotclear/"
        Alias /admin "/var/www/html/dotclear/admin"
</IfModule>

...rendant ainsi l'installation unique accessible depuis des serveurs virtuels installés dans un répertoire de base franchement différent.

Puis, installer dans le répertoire de chaque blog, uniquement :

  • Un fichier "index.php" appelant le blog ;
  • Le répertoire "themes" contenant les thèmes que le blog utilisera, et que son propriétaire pourra personnaliser à loisir (Ne pas oublier d'y copier le répertoire du thème "default" !) ;
  • Le répertoire "public" dans lequel le propriétaire du blog pourra mettre ses fichiers attachés personnels.

On voit donc que l'installation pour chaque blog est extrêmement "légère", le truc un peu glauquesque étant seulement la bonne définition des chemins :

  • Pour l'"index.php" de chaque blog, deux lignes sont particulièrement importantes, et doivent être soigneusement réglées :
define('DC_BLOG_ID','nomdemonblog');

Celle-ci se passerait presque de commentaire : Il faut y indiquer le nom du blog que cet index.php devra afficher ;-)

require dirname(__FILE__).'/../../../../var/www/html/dotclear/inc/public/prepend.php';

Celle-ci est plus poilue des fesses, et c'est bien elle qui m'a donné du mal, à cause de la rafale de point-slash à doser convenablement, car on doit :

  • Aboutir au fichier "prepend.php" de l'installation "unique" de DotClear ;
  • Le chemin spécifié est relatif à l'emplacement de l'index.php ;
  • Bien que commençant par un "/", qui est "nécessaire mais ignoré", en quelque sorte ;
  • On est donc obligé de définir un chemin relatif, en remontant jusqu'à la racine du filesystem (d'où les ../../../...), puis en redescendant de là, dans /var
  • C'est en fait le seul truc vraiment tordu, mais pas de doute, il est tordu.

Ceci étant fait, il ne reste plus qu'à définir, pour chaque blog, les chemins d'accès au répertoire de thèmes, et au répertoire "public", dans son "about:config"

Voici ce que ça donne chez moi :

public_path :   /home/tartempion/web/public
public_url :    /public
themes_path :   /home/tartempion/web/themes
themes_url:     /themes

Et c'est tout !

On voit simplement que le "path" est relatif au filesystem du serveur, tandis que l'URLest relative à la racine du serveur web virtuel. C'est toute l'astuce.

A partir de là, ça gazouille gentiment.

Enjoy !