Retrouvez cet article dans : Linux Magazine 82
Le logiciel faisant tourner Wikipédia, Mediawiki, peut être utilisé chez vous, comme base de connaissance. Nous allons le configurer comme tel dans cet article.
Introduction
Comme chacun sait, Mediawiki est le logiciel qui tourne derrière la célèbre encyclopédie collaborative Wikipédia. Il est également utilisé dans d’autres sites web qui, souvent, ne sont rien d’autres que des bases de connaissances. En ce sens, vous pouvez l’utiliser aussi bien comme bloc-notes en ligne que comme serveur de documentation pour votre service en entreprise. Nous allons donc mener une petite réflexion sur ce qu’est la documentation. La documentation d’entreprise apparaît sous au moins cinq formes différentes :- La documentation produite par une équipe pour elle-même : c’est la documentation interne, que l’on trouve souvent dans les cahiers de chacun, et qu’il est dommage de ne pas mettre à disposition des autres ;
- La documentation produite par l’équipe pour les autres équipes ou pour l’extérieur : ce sont les normes, consignes...
- La documentation issue de l’extérieur, sous forme diverse (courriers électroniques, fichiers PDF, doc, images...), à destination de l’équipe ;
- Les rapports automatiques à destination de l’équipe ;
- Les rapports automatiques à destination de l’extérieur.
- Ce que vous écrivez est, dès validation de votre part, immédiatement en ligne. Un site de publication propose un système de relecture et c’est l’autorité compétente qui valide votre article pour publication ;
- Un document avec son propre format (PDF, tableau, audio, vidéo...) peut être directement intégré dans Mediawiki. Un site de publication ne peut fonctionner ainsi car sa vocation est la publication d’article : un tel document serait un complément, pas l’objet de l’article. Il faut donc créer l’article et lui joindre le document comme pièce attachée ;
- La page d’accueil contient ce que vous désirez, contrairement à un site de publications qui, par principe, indiquera les derniers articles en ligne.
Pré-requis
Trêve de discussion, entrons dans le vif du sujet. Votre serveur web Apache, votre base de données MySQL et votre moteur PHP ronronnent-ils déjà à la nouvelle d’accueillir votre tout nouveau Mediawiki ? S’ils ne faisaient pas déjà partie de la famille, faites le nécessaire pour les installer. N’importe quelle version d’Apache devrait convenir, du moment que vous pouvez y installer une version stable de PHP. Que ce soit pour PHP ou MySQL, une coïncidence fait que les numéros de version majeure qui conviennent à Mediawiki sont 4 et 5. Privilégiez ce que propose votre distribution pour vous simplifier l’installation et la maintenance. Si vous n’utilisez pas Linux (personne n’est parfait), vous pouvez être amené à installer l’ensemble en recompilant à partir des sources. Dans ce cas, toujours dans un souci de maintenance, n’hésitez pas à choisir les dernières versions, Mediawiki n’est pas un enfant difficile.Configuration des outils
Vous pouvez installer Mediawiki directement dans un répertoire de l’arborescence connue d’Apache. Néanmoins, pour isoler ce logiciel des documents, nous préférons l’installer ailleurs et créer un alias
Alias /wiki "/opt/mediawiki/mediawiki-1.5.6"
<Directory “/opt/mediawiki/mediawiki-1.5.6”>
AllowOverride AuthConfig
Order allow,deny
Allow from all
</Directory>
PHP ne nécessite pas de configuration particulière. Quant à MySQL, vous pouvez déléguer à Mediawiki la création de la base et de l’utilisateur moyennant le mot de passe administrateur de MySQL que vous devrez lui communiquer. Nous préférons effectuer le travail nous-même :
$ mysql -u root -p Enter password: ********* [...] mysql> create database wikidb; mysql> grant all on wikidb.* to ‘wikiuser’@’localhost’ identified by ‘MOTDEPASSEENCLAIR’;Si le serveur Apache tourne sur la même machine que le serveur MySQL, vous pouvez mettre localhost. Il s’agit en réalité d’être cohérent sur le nom de la machine, car MySQL est pointilleux lors de l’authentification et n’accepte pas d’utilisateur ne venant pas de la machine attendue. De plus, nous choisissons localhost qui utilise la boucle locale et qui marche même quand le réseau n’est pas configuré (ce qui est peut-être le cas sur votre portable en DHCP quand vous voyagez), sans parler de l’optimisation légendaire et imperceptible au niveau de la vitesse d’exécution des requêtes ! Le nom de la machine, le nom de l’utilisateur et son mot de passe, que vous indiquez pour vous connecter à MySQL, ne sont pas à retenir. Nous les utiliserons une fois plus loin lors de la configuration de Mediawiki. Vous pourrez les oublier ensuite : ils ne servent pas à l’utilisation du wiki.
Installation de Mediawiki
Si vous n’avez pas relancé Apache pour prendre en compte l’alias, faites-le. Décompactez l’archive de Mediawiki (mediawiki-1.5.6.tar.gz lors de l’écriture de cet article) dansConfiguration post-installation : sécuriser l’outil
Outre une protection façon// Seul l’admin peut créer des comptes $wgGroupPermissions[‘*’][‘createaccount’] = false;et
// L’édition en anonyme est interdite $wgGroupPermissions[‘*’][‘edit’] = false;Vous disposez aussi d’un paramètre pour interdire la lecture aux utilisateurs non identifiés, mais mieux vaut l’autoriser par ce biais. En effet, cela vous évitera d’avoir à vous connecter pour voir des pages si vous n’avez pas à en éditer. De plus, dans la version 1.5.6 au moins, un bug fait que si vous interdisez la lecture des pages aux utilisateurs non autorisés, vous leur interdisez également l’accès à la page de connexion, ce qui rend impossible toute authentification. Espérons que ce bug sera corrigé rapidement. Et de toute façon, il vaut mieux protéger le site avec une authentification par Apache, par exemple avec un fichier
$wgGroupPermissions[‘*’][‘read’] = true;Vous pouvez maintenant vous amuser à créer des utilisateurs. Pour cela, vous devez vous servir de votre compte

Figure 1

Figure 2
Changez le logo
Le logo par défaut est la première chose qui se voit sur le site. Il risque de vous énerver, vous faire perdre patience, et avant que vous n’ayez l’idée d’aller vous pendre à cause de lui, mieux vaut le changer. Une façon consiste à écraser le logo en place (Autorisez le chargement
Indiquez un nom de fichier de la façon suivante :Alias /wiki "/opt/mediawiki/wikidata"
<Directory "/opt/mediawiki/data">
AllowOverride AuthConfig
Order allow,deny
Allow from all
</Directory>
Nous allons ainsi pouvoir accéder à nos données via l’URL http://localhost/wikidata. Éditez maintenant le fichier de configuration $wgEnableUploads = true; $wgUploadPath = "/wikidata"; $wgUploadDirectory = "/opt/mediawiki/data";
Figure 3
D’autres paramètres permettent de limiter les chargements, selon le type de fichier ou la taille :
$wgFileExtensions = array( ‘png’, ‘gif’, ‘jpg’, ‘jpeg’, ‘doc’, ‘xls’, ‘ppt’, ‘sxw’, ‘pdf’, ‘gz’ ); $wgCheckFileExtensions = true; $wgStrictFileExtensions = true; $wgUploadSizeWarning = 150000;
Essayez à nouveau de charger un fichier : cela devrait être possible maintenant.
Modifiez la boîte de navigation de gauche
Prenez l’identité de l’administrateur de Mediawki (votre compte sysop) car ceci ressemble plus à un cheat code qu’à autre chose, et est donc réservé au master. Visitez maintenant l’adresse suivante : http://localhost/wiki/index.php/MediaWiki:Sidebar.
La syntaxe est quasi évidente. Vous noterez néanmoins qu’à gauche de la barre verticale se trouve l’URL et à droite son intitulé. A vous de jouer!
Figure 4
Réalisation d’une extension
L’extension FileSystemListing
Mediawiki peut facilement être étendu à l’aide d’extensions. Vous pouvez définir de nouveaux tags afin d’afficher un contenu dynamique. Un bon exemple est l’affichage d’une arborescence de fichiers.
Vous pouvez aller sur http://meta.wikimedia.org/wiki/FileSystemListing et y copier/coller le code de l’extension FileSystemListing dans un fichier que vous appellerez par exemple FileSystemListing.php et que vous placerez dans le répertoire /opt/mediawiki/mediawiki-1.5.6/extensions.
Pour activer l’extension, ajoutez include ("extensions/FileSystemListing.php"); dans votre fichier LocalSettings.php. Il ne vous reste plus qu’à écrire une page contenant ceci :
<dirlist dir="/home/votrecompte"></dirlist>Remarquez que l’auteur de cette extension a aussi prévu l’attribut
<dirlist dir="/var/www/htdocs/fichiers" fileprefix="http://localhost/fichiers"></dirlist>
Notre extension ShowDir
Passons à la réalisation de notre propre extension qui, contrairement à FileSystemListing, ne sera pas récursive à travers les sous-répertoires, mais montrera également la taille et la date de dernière modification de chaque fichier. Elle définira le tag 1: <?php
2:
3: $wgExtensionFunctions[] = "wfDirInfoExtension";
4:
5: function wfDirInfoExtension() {
6: global $wgParser;
7: $wgParser->setHook("dirinfo","renderDirInfo");
8: }
9:
10: function renderDirInfo( $input, $argv ) {
11: $output = "Bonjour tout le monde !";
12: $output .= "<br /><b>$input</b>";
13: $output .= "<br />dir=".$argv["dir"];
14: $output .= "<br/>fileprefix=".$argv["fileprefix"];
return $output;
15: }
16: ?>
Déchiffrons cette extension. La ligne 3 ajoute notre extension à celles connues de Mediawiki. Nous avons donc appelé la notre function renderDirInfo( $input, $argv ) {
# Récupération des variables
$dir=$argv["dir"];
$base=$argv["fileprefix"];
# Création du tableau
$output = "<table border=’1’>\n";
$output .= "<tr>";
$output .= "<th>Name</th><th>Last modification</th><th>Size</th>";
$output .= "</tr>\n";
# Lecture du répertoire
$fd = opendir($dir);
while (($f = readdir($fd)) !== false)
{
if ($f == "." || $f == "..")
continue;
# Pour chaque fichier, une nouvelle ligne du tableau...
$output .= "<tr>";
$s = stat("$dir/$f");
if (is_dir("$dir/$f")) {
$output .= "<td>$f/</td>";
$output .= "<td>".
strftime("%d/%m/%Y %H:%M:%S",$s[9]).
"</td>";
$output .= "<td> </td>";
} else {
$output .= "<td><a href=’$base/$f’>".
"$f</a></td>";
$output .= "<td>".
strftime("%d/%m/%Y %H:%M:%S", $s[9]).
"</td>";
$output .= "<td>$s[7]</td>";
}
$output .= "</tr>\n";
}
# On ferme !
closedir($fd);
$output .= "</table>\n";
return $output;
}
Sauvegardez vos données
La sauvegarde des données d’un Mediawiki n’est pas aussi simple que vous pouvez le penser. En elle-même, rien de plus facile : dump de la base, sauvegarde des fichiers et c’est gagné. Perdu : vous allez suer pour restaurer une telle sauvegarde. La première étape consiste effectivement à sauvegarder la base avec$ mysqldump -u wikiuser -p \ --default-character-set=latin1 \ -B wikidb > wikidb.dump $ bzip2 wikidb.dumpNous avons comparé la compression d’un tel dump avec gzip et bzip2. Sur un seul échantillon – cela montre l’objectivité du test – bzip2 semble meilleur avec un taux de compression de 27%. Nous ne ferons pas l’affront au lecteur de lui décrire les conditions d’un tel test. La restauration d’un tel dump s’effectue ainsi :
$ mysql -u root -p Enter password: ********* [...] mysql> create database wikidb; mysql> grant all on wikidb.* to ‘wikiuser’@’localhost’ identified by ‘MOTDEPASSEENCLAIR’; mysql> exit $ mysql --default-character-set=latin1 \ -h localhost -D wikidb \ -u wikiuser -p < wikidb.dump Enter password: *********La sauvegarde ne se limite pas à celle de la base. Vous devez en effet effectuer une copie de la configuration de Mediawiki ainsi que, éventuellement, de tout fichier (thèmes, extensions...) que vous auriez pu ajouter ou modifier. Et vous ne devez pas oublier non plus les fichiers que les utilisateurs auraient pu charger. Pour nous, la façon la plus simple est de disposer d’une copie de
#! /bin/sh
# Preparatifs
DATE=`date +’%Y%m%d’`
cd /opt/mediawiki
mkdir -p backup
# Sauvegarde des fichiers
tar cvzf backup/mediawiki-1.5.6.${DATE}.tar.gz \
mediawiki-1.5.6
tar cvzf backup/mediawiki-data.${DATE}.tar.gz \
data
# Sauvegarde de la base
mysqldump -u wikiuser -p MOTDEPASSEENCLAIR \
--default-character-set=latin1 \
wikidb > wikidb.dump
bzip2 wikidb.dump
Ce script contient le mot de passe en clair de l’utilisateur de la base. Aussi, vous ferez le nécessaire pour le protéger en lecture contre les indiscrets.
Nous avons vu la restauration de la base. La restauration des fichiers s’effectue en remettant les archives des fichiers à leur place comme cela était auparavant. Vous devrez néanmoins vérifier que le fichier Déplacez votre Mediawiki
L’opération s’effectue comme une sauvegarde suivie d’une restauration sur une machine différente. Vous n’oublierez pas de configurer le serveur web pour qu’il connaisse l’existence des répertoires de Mediawiki. Vous penserez également à vérifier le propriétaire et les permissions de chaque fichier. Cette opération peut présenter un intérêt. En effet, outre le fait de tester la sauvegarde et la restauration de votre Mediawiki, cela vous permet de disposer d’une copie en état de fonctionnement de votre base de connaissance. Ceux qui disposent d’un ordinateur portable comprendront rapidement l’intérêt que cela peut présenter : avoir accès à ses données sans être connecté y compris à celles hébergées par MySQL. Le coût est faible puisque vous n’avez pas à investir dans des mécanismes de synchronisation des données entre deux bases de données. Le prix à payer est par conséquent élevé : vous ne devrez jamais travailler que sur une seule base à la fois, et sauvegarder puis restaurer la base la plus récente sur l’autre. Mais nous n’allons pas entrer dans un débat sur le travail collaboratif sur un même ensemble de données dans cet article...Conclusion
Vous voilà avec un Mediawiki qui, s’il n’est pas encore configuré aux petits oignons, ne demande qu’à l’être. Si vous n’êtes pas le seul utilisateur, pensez à éditer la page de l’aide au plus vite pour y indiquer l’URL de la documentation utilisateur. En effet, il n’est pas trivial qu’un lien hypertexte s’effectue entre [crochets] simples et un lien wiki entre [[crochets]] doubles. N’oubliez pas non plus les mentions légales, comme quoi chacun est responsable de ce qu’il écrit ou, sur un intranet, comme quoi il ne faut pas s’en servir à d’autres fins que le rôle qui lui est attribué (documentation, base de connaissance...). Mediawiki, comme de nombreux outils web, peut être complété d’autres outils. Vous pouvez ainsi paramétrer un Mnogosearch pour qu’il serve de moteur de recherche complémentaire à celui intégré. Ceci n’est pas simple à réaliser car il existe de trop nombreuses combinaisons dans les URL qui permettent d’accéder à l’information qu’un Mediawiki peut contenir. Si vous l’utilisez, n’oubliez pas que le répertoire des données peut, par contre, être facilement indexé. Au niveau de la sécurité, vous pouvez penser au pare-feu applicatif-
- Mediawiki : http://www.mediawiki.org Documentation de l’éditeur : http://meta.wikimedia.org/wiki/Aide:%C3%89diteur Documentation administrateur : http://meta.wikimedia.org/wiki/Aide:Administrateur Écrire une extension : http://meta.wikimedia.org/wiki/Write_your_own_MediaWiki_extension FAQ de Mediawiki : http://meta.wikimedia.org/wiki/MediaWiki_FAQ Extensions existantes : http://meta.wikimedia.org/wiki/Category:Mediawiki_Extensions Extension FileSystemListing : http://meta.wikimedia.org/wiki/FileSystemListing Chargement de fichiers : http://www.mediawiki.org/wiki/Configuring_file_uploads et http://meta.wikimedia.org/wiki/Uploading_files Écrire son propre thème : http://meta.wikimedia.org/wiki/User_styles Spip : http://www.spip.net Mnogosearch : http://www.mnogosearch.org/ Mod_security : http://www.modsecurity.org/
Retrouvez cet article dans : Linux Magazine 82





Excellent article, je l’ai donc cité sur le forum MediaWiki France (http://mediawikifr.org/forum/viewtopic.php?pid=38#p38)