Créer une ferme de wikis avec Dokuwiki
Cet article a été publié par Benjamin
le 23-12-09 à 17:44 dans la catégorie Logiciels
Tags :
- Libre
- Tutoriel
- Wiki
Ce titre n'est peut-être pas très explicite, qu'est-ce que "dokuwiki", qu'est-ce qu'une "ferme", qu'est-ce que "créer" ?
Cet article va vous présenter ce qu'est dokuwiki, pourquoi je pense que c'est le meilleur moteur de wiki libre, ce qu'est une ferme de wikis et comment faire une ferme de dokuwikis.
I. Pourquoi Dokuwiki ?
DokuWiki est un moteur de wiki libre distribué sous licence GNU GPL créé par Andreas Gohr en juin 2004. Contrairement à la plupart des autres moteurs de wiki, Dokuwiki stocke ses données dans des fichiers textes sur la machine, aucune base de données n'est donc nécessaire (ce qui est, pour moi, un atout non négligeable et très appréciable) !
La dernière version de dokuwiki est disponible sur le site officiel.
Un autre gros avantage de Dokuwiki est sa grande communauté de contributeurs. En effet, dokuwiki est tellement souple que beaucoup de monde à décidé de développer dessus. Par exemple, si vous allez voir sur la page officielle des plugins, vous pourrez vous rendre compte qu'il y en a énormément (570 à l'heure où j'écris ces lignes), pour tous les goûts, du plus utile au plus futile :)
L'installation d'un plugin est également très pratique : tout est contenu dans un répertoire, donc pour supprimer un plugin, il vous suffit de supprimer ce répertoire. Rien ne reste, pas de configuration orpheline, pas de fichiers temporaires, pas d'inclusion dans d'autres fichiers, etc. De plus, tout est faisable via l'interface web d'administration de Dokuwiki.
Un autre avantage qui à été décisif pour l'adoption de Dokuwiki dans mon travail : ses très nombreux modes d'authentification. En effet, comme je vous l'ai dit, ce logiciel est tellement souple que la communauté à créé un grand nombre de modules d'authentification. Au programme, en plus des comptes locaux, vous pouvez vous identifier sur Dokuwiki via MySQL, LDAP, pgSQL, punbb, CAS, drupal, htaccess, radius, pam, shibboleth, imap, xmpp, etc. Vous pouvez coupler toutes ces authentifications, les utiliser séparément, et tout un tas d'autres méthodes.
Pour la petite histoire, dans mon travail (DSI de l'Université Nancy 2), j'ai mis en place une authentification qui peut-être différente en fonction des fermes parmi CAS, comptes locaux, shibboleth, le tout couplés ou séparément.
Bref, je pourrais m'étendre encore longtemps sur les vertus de ce moteur de wiki mais pour résumer, je peux dire qu'il s'agit d'une vraie mine d'or :)
II. Qu'est-ce qu'une ferme de wikis ?
Voici en l'arborescence simplifiée d'un répertoire Dokuwiki :
|_conf (répertoire de configuration du wiki)
|_data (contient les données du wiki comme les pages, les images, les documents joints, etc.)
|_lib (contient les plugins, les templates du wiki)
|_inc (contient les fichiers de langue, les modules d'authentification, etc.)
Admettons que vous souhaitez héberger plusieurs wikis sur une machine (par exemple 24 wikis). Avec un système de wiki "classique", il faudrait 24 répertoires avec 24 répertoires conf, data, lib, inc, etc., il faudrait installer 24 fois les mêmes plugins, 24 fois les mêmes modules d'authentification et faire 24 mises à jour si besoin est.
Bref, un vrai calvaire (surtout quand on dépasse les 50 wikis) !
Le principe des fermes est le suivant :
Il y a un répertoire maître qui contient tous les modules, tous les plugins, tous les templates et après, pour chaque nouveau wiki, il y a un répertoire contenant un sous-répertoire conf (qui contiendra la configuration de chaque wiki) et un sous répertoire data (qui contiendra les données de chaque wiki). C'est tout. Chaque wiki (appelé aussi animal) ira chercher des modules, ses templates, ses librairies dans le répertoire maître.
Au final, nous obtiendrons donc une arborescence de ce type :
|_master
|_lib
|_inc
|_wiki1
|_conf
|_data
|_wiki2
|_conf
|_data
|_wiki3
|_conf
|_data
Plusieurs gros avantages à cela :
- Limitation de la place occupée sur le disque dur : nous n'avons plus 50 fois le même répertoire lib/ ou inc/
- Facilité de maintenance : il suffit d'installer une seule fois un plugin sur le wiki master pour que tout le monde y ai accès, de même, il suffit de mettre à jour un plugin ou même l'intégralité de Dokuwiki uniquement sur le master pour que les changements soient appliqués à tous les animaux.
- Une création rapide : pour créer un nouveau wiki, on utilise un script (fourni ci-dessous) auquel on passe en paramètre le nom du wiki. En clair, dans un terminal on tape ./addanimal.sh wiki4 et tout est créé automatiquement !
III. Comment mettre en place une ferme de wikis avec DokuWiki ?
1. Introduction
Avant tout, il faut savoir qu'il existe deux "types"de fermes de wiki :
- Une version avec des wikis accessibles via ce genre d'URL : monsite.fr/wiki1, monsite.fr/wiki2, etc. (c'est cette version que je présenterai ici)
- Une version avec des URL du type cname (wiki1.monsite.fr, wiki2.monsite.fr, etc.)
De plus, sachez que je ne parlerai que d'une authentification via les comptes locaux de dokuwiki (afin de ne pas tout embrouiller). Pour info, dokuwiki est extrêmement complet au niveau des modules d'authentification. Par exemple, à mon travail, j'ai mis en place une authentification plain (compte locaux) ainsi que LDAP, CAS et Shibboleth.
2. Préparation
Rendez-vous sur la page de téléchargement officielle de dokuwiki et téléchargez la dernière version. Ensuite il faut extraire cette archive en tant que dossier master sur votre serveur.
Note : Ici, j'appelle mon répertoire principal "master" mais vous pouvez l'appeler autrement, il faut juste le renseigner dans les différents fichiers de configuration. De plus, je pars du principe que vous utilisez une arborescence comme celle-ci (avec, pour document root : /var/www/wiki/php):
|_var
|_www
|_wiki
|_addanimal.sh
|_php
|_master
|_lib
|_inc
|_wiki1
|_conf
|_data
|_wiki2
|_conf
|_data
- Nous avons donc notre répertoire master, créez un fichier ./master/inc/preload.php et copiez-y ces lignes :
<?php
// the home directory for all animals and the farmer located in subdirectories
$farmdir = '/var/www/wiki/php/';
// don't do anything if the animal doesn't exist
if(isset($_REQUEST['animal'])) {
if(!is_dir($farmdir . $_REQUEST['animal'])) {
nice_die("Ce wiki n'existe pas !");
}
if($_REQUEST['animal']=="master") {//si on appelle le master
nice_die("Interdit d'appeler le master");
}
if(!defined('DOKU_CONF')) {
define('DOKU_CONF', $farmdir . $_REQUEST['animal'] . '/conf/');
}
// correct paths according to animal and make nice looking in HTML source
if(!defined('DOKU_URL')) define('DOKU_URL',preg_replace('/(.+)\/([^\/]+)\//','$1/'.$_REQUEST['animal'].'/',getBaseURL(true)));
if(!defined('DOKU_REL')) define('DOKU_REL',preg_replace('/([^\/]+)\/\/([^\/]+)\/(.+)\//','/$3/',DOKU_URL));
} else {
// don't do anything on the farmer instance
return;
}
- Ensuite, il faut créer un fichier .htaccess dans le répertoire wiki contenant ceci :
#Définition des règles de redirection
RewriteEngine On
RewriteRule index - [L]
RewriteRule ^([^/]+)/(.*) /home/www/wiki/php/master/$2?animal=$1 [QSA,L]
RewriteRule ^([^/]+)$ http://wiki.votre-site.fr/$1/ [QSA,L]
- Enfin, il vous faut créer un fichier addanimal.sh (ou n'importe quel autre nom) que vous placerez dans /var/www/wiki/ (pas dans le répertoire php, de manière à ce que le serveur apache n'ai pas accès à ce fichier). Voici le fichier addanimal.sh pour des comptes locaux :
#!/bin/bash
#
# Création d'animal pour une ferme dokuwiki
# benjamin@generation-linux.fr - 10/12/09
#
MASTER_DIR=/var/www/wiki/php/master
FARM_DIR=/var/www/wiki/php
if [ $# -ne 1 ]; then
echo "Usage: $(basename $0) [animal_name]"
exit 1
fi
if [ ! -d $MASTER_DIR ]; then
echo "ERREUR : $DOKUWIKI n'existe pas !"
exit 1
fi
if [ ! -d $FARM_DIR ]; then
echo "ERREUR : $FARM_DIR n'existe pas !"
exit 1
fi
echo ">> Ajout de la ferme $1"
FARM=${FARM_DIR}/$1
FARM_TITLE=$1
if [ -d $FARM ]; then
echo "ERREUR : $FARM existe deja !"
exit 1
fi
echo ">> Creation des repertoires"
mkdir -p ${FARM}/{data,conf}
chmod 755 ${FARM}/{data,conf}
cp -a ${MASTER_DIR}/data/* ${FARM}/data
cp -a ${MASTER_DIR}/conf/* ${FARM}/conf
find ${FARM}/data -type d -exec chmod 755 {} \;
touch ${FARM}/conf/{local.php,local.protected.php,acl.auth.php,users.auth.php}
chmod 666 ${FARM}/conf/{local.php,acl.auth.php,users.auth.php}
echo ">> Creation des fichiers de configuration"
echo "<?php
\$conf['title'] = '${FARM_TITLE}';
\$conf['lang'] = 'fr';
\$conf['savedir'] = '${FARM}/data';
\$conf['useacl'] = 1;
\$conf['template'] = 'nancy2';
\$conf['plugin']['sidebar']['enable'] = 1;
\$conf['authtype'] = 'plain';
\$conf['superuser'] = '@admin';" > ${FARM}/conf/local.php
echo ">> Creation des comptes admin"
echo "# <?php exit()?>
admin:d51ba34ef116c2cffacfa2125b87e6b5:Administrateur:votre@mail.fr:admin,user" > ${FARM}/conf/users.auth.php
echo ">> Mise en place des permissions"
echo "# <?php exit()?>
* @admin 255
* @ALL 1" > ${FARM}/conf/acl.auth.php
chown -R apache2:apache2 ${FARM}
echo ">> Ferme $1 installee !"
exit 0
Note : Attention à l'antépénultième ligne, j'ai mis apache:apache car je suis sous RedHat, sous Ubuntu et Debian cela doit être www-data:www-data et peut-être d'autres noms sous d'autres systèmes.
Il ne vous reste plus qu'à rendre ce fichier exécutable grâce à cette commande : chmod +x /var/www/wiki/addanimal.sh
Pour créer un nouvel animal, il suffit de taper : ./addanimal.sh nom_animal
Simple non ? :)
3. Personnalisation
Afin de supprimer les liens dans l'administration (gestion des plugins, gestion de la configuration, gestion des réversions, etc.), il faut créer des fichiers disabled dans chaque répertoires :
- touch /home/www/projets/wiki-dsi/php/master/lib/plugins/plugin/disabled
- touch /home/www/projets/wiki-dsi/php/master/lib/plugins/revert/disabled
- touch /home/www/projets/wiki-dsi/php/master/lib/plugins/config/disabled
- touch /home/www/projets/wiki-dsi/php/master/lib/plugins/popularity/disabled
4. Conclusion
Ainsi s'achève ce tutoriel sur la mise en place d'une ferme de wikis avec Dokuwiki. Comme vous avez pu vous en rendre compte, cela est très simple à mettre en œuvre et s'avère très pratique pour les fans de wikis (moi même j'en utilise plusieurs régulièrement).
Pour la petite anecdote, voici un screenshot de mon wiki au boulot (c'est moi qui ai fait le design à partir ce celui-ci) :
De plus, je vous met à disposition le (petit) diaporama de ma présentation de cette solution : presentation-DW.pdf.
Pour ceux que ça intéresse, je vais bientôt mettre en place ce système sur mon serveur pour offrir à qui le souhaite son ou ses wikis rapidement et gratuitement. Si cela vous intéresse, n'hésitez pas à me le faire savoir ;)
Commentaires
Pour info, un plugin pour mettre en place une ferme de wiki très facilement devrait bientôt sortir.
Il est déjà sorti en effet mais cette personne n'utilise pas la même méthode, il utilise un système de fermes "templates" que je trouve un peu moins bien, mais ce n'est que mon avis.
Si il passe par ici, je tiens à lui dire que j'ai bien aimé sa présentation aux Jres 2009 ;)
Je viens également de déployer dokuwiki et j'ai été bluffé par sa simplicité d'installation et d'administration. Auparavant j'ai testé sans succès réel l'installation de xwiki mais je n'ai jamais réussi à configurer correctement apache. De plus je le trouvais bien moins réactif que Dokuwiki (xwiki est en JAVA).
C'est donc du tout bon :).
Une petite erreur dans la description du fichier addanimal.sh : la variable $DOKUWIKI est testée mais ni initialisée ni utilisée par la suite. Par contre, la variable ${MASTER_DIR} n'est pas testée. Je pense donc que $DOKUWIKI devrait être ${MASTER_DIR}.
Une question : dans
, à quoi cela sert-il de supprimer les liens dans l'administration ? Et quelle administration ? celle de master ou celles des animaux ?Autre question : je viens de trouver ceci, t'es-tu basé dessus ?
En effet il y avait une petite erreur. J'ai couplé deux fichiers de mes configurations et il y a eu un petit problème. Merci :)
Pour la page du wiki, j'y ai pas mal contribué en fait. Elle est tout récente. Avant elle était complètement différente (en utilisant une autre méthode de ferme, avec les liens symboliques).
Il est parfois nécessaire de supprimer les liens dans l'admin car l'administration est accessible pour tous les administrateurs de toutes les fermes (par exemple, sans faire cela, n'importe quel admin de n'importe quelle ferme aurait un contrôle total sur les plugins de l'ensemble des fermes). J'espère avoir été assez clair...
Merci pour cet article. Dokuwiki est effectivement un petit bijou que j'utilise aussi bien au travail qu'en bloc notes perso ou en site de partage avec mes amis.
Commet crée une ferme, avec landwirtschafts-simulator 2009
J'ai suivi ta procédure pour créer ma ferme de wiki mais maintenant je rencontre un problème lors de la connexion à mon wiki, je ne parviens pas a me connecter avec l'authentification en mode plain, que dois-je faire de spécial ? D'ailleurs le bouton "Editer" n'affiche jamais l'éditeur de texte !
Merci d'avance pour ton aide
Comment ça ?
Tu vois quand même les champs de login ?
Que ce passe t-il quand tu cliques sur "Éditer" ?
Bonjour,
utilisant cette brillante solution sur un intranet (accès en https), je constate deux problèmes :
- le module de recherche ne fonctionne plus
- les logs d'apache renvoient 6 erreurs identiques à chaque appel de page (les logs grossissent à vue d'oeil) :
Wed May 18 10:26:12 2011 error client ***.***.***.*** File does not exist: /var/www/wiki/animal/lib, referer: https://mon_domaine/wiki/animal/dok...
Précisions :
- j'ai fait une mise à jour il y a quelque mois vers “Anteater” il y a peu (copie des fichiers dans le master ET les animaux)
- extérieurement, les wikis fonctionnent bien (sauf la recherche et les erreurs mentionnées ci-dessus)
une idée de ce qui pourrait causer ces symptômes ?
Je me souviens avoir eu ce problème l'année dernière, peux-tu m'envoyer par mail (voir contact en haut) ton fichier de conf apache ?
Il me semble que le problème vienne de là.
Bonjour,
Quelqu'un a déjà implémenté cette config sous Windows (Apache) ?
J'ai en fait du mal avec la réécriture d'url par le fichier .htaccess.
Merci pour votre réponse