Manuel:Famille de wikis
Une famille de wikis est un groupe de plusieurs wikis qui s'exécutent sur le même serveur et qui se partagent un ensemble commun de ressources fournies par l'installation du parent; chaque wiki reste sinon indépendant. Cette configuration est une alternative à l'exécution d'installations de MediaWiki entièrement séparées. Cela peut être une préférence si l'administrateur du site veut réduire la quantité de travail impliquée dans la gestion de plusieurs wikis, ou réduire l'utilisation d'inodes. Pour cette raison, certains services d'hébergement wiki optent pour le modèle d'une famille de wikis.
La meilleure implémentation connue de famille de wiki est la ferme de wikis, bien que d'autres approches sont possibles. La liste des fermes de wikis connues est disponible sur WikiApiary .
Voici les instructions sur la façon de configurer MediaWiki pour héberger plus d'un wiki.
Méthodes
Ferme de wikis
Les étapes suivantes sont nécessaires lorsque plusieurs wikis sont utilisés sous la même version de MediaWiki :
- Installez le premier un wiki de manière classique. Pour plus de détails, voir Guide d'installation .
- Activez votre serveur web pour partager votre installation MediaWiki unique avec tous les wikis. S'il existe plusieurs (sous)domaines, votre serveur web doit accepter les connexions issues de ces domaines. Pour plusieurs sous-répertoires, vous pouvez utiliser les règles de réécriture, les alias, ou les liens symboliques.
- Ajoutez le code au-dessus de
LocalSettings.php
pour détecter le wiki actuel. Notez que si l'argument à--wiki
contient un tiret, il sera divisé en deux valeurs résultantes attribuées àMW_DB
etMW_PREFIX
, respectivement. Pour les wikis accédés par nom de domaine :$wikis = [ 'example.org' => 'examplewiki', 'one.example.org' => 'onewiki', ]; if ( defined( 'MW_DB' ) ) { // Initialisé automatiquement à partir de l’option --wiki pour les scripts de maintenance $wikiID = MW_DB; } else { // Utilisez la variable d’environnement MW_DB ou adaptez le nom du domaine $wikiID = $_SERVER['MW_DB'] ?? $wikis[ $_SERVER['SERVER_NAME'] ?? '' ] ?? null; if ( !$wikiID ) { die( 'Unknown wiki.' ); } } $wgLocalDatabases = $wgConf->wikis = array_values( $wikis ); $wgDBname = $wikiID; $wgDBuser = 'mediawiki';
- Configurez les paramètres qui doivent être différents pour chaque wiki. Par exemple :
$wgCacheDirectory = "/tmp/mediawiki_cache/$wgDBname"; $wgUploadDirectory = "$IP/images/$wgDBname"; $wgUploadPath = "/w/images/$wgDBname";
- Configurez les réécritures par wiki. Cela doit comprendre au moins
$wgServer
et$wgArticlePath
.Ceci peut se faire à partir d'un fichier séparé, par exemple :$wgConf->settings = [ 'wgServer' => [ 'examplewiki' => 'https://example.org', 'onewiki' => 'https://one.example.org', ], 'wgArticlePath' => [ 'default' => '/wiki', ], 'wgSitename' => [ 'default' => 'Example', 'onewiki' => 'One', ], 'wgLogo' => [ 'default' => '/images/examplewiki/Example_logo.png', ], 'wgLanguageCode' => [ 'default' => 'en', 'onewiki' => 'pt', ], ]; extract( $wgConf->getAll( $wgDBname ) );
# LocalSettings.php $wgConf->settings = require __DIR__ . '/LocalSettings_overrides.php'; # LocalSettings_overrides.php <?php return [ 'wgServer' => .., .., ];
Pour ajouter un nouveau wiki à la famille :
- Créez sa base de données et ajoutez d'abord ses paramètres avec
--wiki=mywiki
si vous exécutezinstall.php
à partir de la ligne de commande. - Exécuter
php maintenance/update.php --wiki=mywiki
..
Fichiers de configuration séparés
Cela vous permettra d'installer plus d'un wiki sur un seul serveur, en utilisant la même copie du code source.
- Installez le premier wiki de manière classique, via le web ou l’installateur CLI qui configure votre base de données et génère un fichier LocalSettings.php .
- Après l’installation, renommez le fichier
LocalSettings.php
généré pour y inclure l’ID du wiki (c’est à dire le nom de la base de données), tel queLocalSettings_mywiki.php
. - Répétez les étapes un et deux ci-dessus pour chaque wiki que vous souhaitez créer.
- Créez un nouveau fichier
LocalSettings.php
qui va charger le correspondant. Comme dans l'exemple de la ferme de wikis ci-dessus, un argument--wiki
contenant un tiret sera divisé en deux valeurs attribuées respectivement àMW_DB
etMW_PREFIX
.Si vos wikis sont sur le même domaine, mais avec des chemins différents (par exemple<?php $wikis = [ 'example.org' => 'examplewiki', 'one.example.org' => 'onewiki', ]; if ( defined( 'MW_DB' ) ) { // Initialisé automatiquement à partir de l’option --wiki pour les scripts de maintenance $wikiID = MW_DB; } else { // Utilisez la variable d’environnement MW_DB ou adaptez le nom du domaine $wikiID = $_SERVER['MW_DB'] ?? $wikis[ $_SERVER['SERVER_NAME'] ?? '' ] ?? null; } if ( $wikiID ) { require_once "LocalSettings_$wikiID.php"; } else { die( 'Unknown wiki.' ); } // Ajoutez sous cette ligne, tout paramètre qui doit être appliqué à chaque wiki // -------
example.org/wiki1
,example.org/wiki2
, etc.), vous pouvez utiliser un équivalent de ceci :<?php $wikis = [ '/example' => 'examplewiki', '/w_example' => 'examplewiki', '/one' => 'onewiki', '/w_one' => 'onewiki', ]; if ( defined( 'MW_DB' ) ) { // Initialisé automatiquement à partir de l’option --wiki pour les scripts de maintenance $wikiID = MW_DB; } else { $path = explode( '/', $_SERVER['REQUEST_URI'] ?? '', 3 )[1] ?? ''; $wikiID = $_SERVER['MW_DB'] ?? $wikis[ $path ] ?? null; } if ( $wikiID ) { require_once "LocalSettings_$wikiID.php"; } else { die( 'Unknown wiki.' ); }
Sites de style Drupal
Cette configuration présente l’avantage de demeurer totalement transparente pour les utilisateurs et d’être raisonnablement sécurisée en ce qui concerne les images de répertoire.
- Créez un répertoire de base pour contenir tous vos fichiers MediaWiki par exemple
mkdir /home/web/mediawiki
. - Installez MediaWiki et les outils supplémentaires comme d’habitude, dans un sous-répertoire indiquant la version (par exemple
/home/web/mediawiki/mediawiki-1.10.0
). - Liez le dossier indiquant la version, à un répertoire de code. Par exemple,
ln -s /home/web/mediawiki/mediawiki-1.10.0 /home/web/mediawiki/code
- Créez un répertoire sites pour contenir nos images et nos paramètres :
mkdir /home/web/mediawiki/sites
- Configurer le wiki comme d’habitude à partir du répertoire /code.
- Après une installation réussie, déplacez le fichier
LocalSettings.php
vers un répertoire sites qui sera la cible lorsque le site sera vérifié. Par exemple, pour capturer http://example.com/mywiki, on pourrait créer le répertoire example.com.mywiki. par exemple,mkdir /home/web/mediawiki/sites/example.com.mywiki
. Voir le fichiersettings.php
de Drupal pour plus d'informations à ce sujet. - Si vous avez l’intention d’utiliser des fichiers multimédias, créez un répertoire images dans le dossier de votre site. Par exemple,
mkdir /home/web/mediawiki/sites/example.com.wiki/images
. Rendez-le accessible en écriture si nécessaire. - Placez le fichier Drupal-style
LocalSettings.php
dans votre répertoire principal :cp DrupalLocalSettings.php /home/web/mediawiki/code/LocalSettings.php
- Modifiez le fichier
LocalSettings.php
de chaque sous-site pour pointer vers les bons endroits :- D'abord commentez le code contenant
$IP
, (lignes 16-20 en 1.15.3) car cela définit le répertoire code parindex.php
. - Insérez ensuite les deux lignes suivantes pour vous assurer que les fichiers d’images sont accessibles, par exemple :
$wgUploadDirectory = "/home/web/mediawiki/sites/wiki.example.com/images";
et$wgUploadPath = "/images";
. Ceux-ci doivent être rangés quelque part après l'appel àDefaultSettings.php
(ligne 25 dans 1.15.3), parce que sinon les variables seront réinitialisées. - Faites les autres modifications comme nécessaire.
- D'abord commentez le code contenant
- Préparez votre installation Apache 2. Site d'exemple : wiki.example.com
- Créez un lien vers le répertoire code si nécessaire, par exemple
ln -s /home/web/mediawiki/code /home/web/wiki.example.com
- Créez une configutation VHost appropriée :
<VirtualHost *:80> ServerAdmin me@example.com DocumentRoot /home/web/wiki.example.com ServerName wiki.example.com CustomLog /var/log/apache2/wiki.mysite.log common # Alias pour accéder au site Alias /mediawiki/code /home/web/mediawiki/code # Alias pour que le wiki puisse accéder aux images Alias /images /home/web/mediawiki/sites/wiki.example.com/images # Si vous souhaitez protéger votre site avec un mot de passe # <Directory /home/web/wiki.example.com> # AuthType Basic # AuthName "Mon wiki protégé" # AuthUserFile /etc/apache2/htpasswd/users-mywiki # require valid-user # </Directory> </VirtualHost>
- Créez un lien vers le répertoire code si nécessaire, par exemple
- 11. Si vous configurez les sites localement, mettez à jour votre fichier
hosts
avec le nom des sites. Le site devrait maintenant fonctionner.
Dans mon cas, j'ai fait une autre copie du code à partir duquel j'ai installé et fait la mise à jour de mon LocalSettings.php
et des bases de données.
Notez que $_SERVER['HTTP_HOST']
dans le code du compagnon Drupal n'est pas défini lorsque l'on exécute les scripts de maintenance à partir de la ligne de commande, donc cette solution ne permet pas d'utiliser les scripts de maintenance sans quelques modifications.
Méthode modifiée de style Drupal pour Ubuntu
Une méthode simplifiée pour des wikis et des sous-wikis multiples (ou imbriqués) sous Ubuntu/Kubuntu qui est largement basée sur la méthode ci-dessus se trouve sur :
Comment les fermes de wikis sont gérées dans les scripts de maintenance
Les scripts MediaWiki de maintenance (tels que update.php) acceptent un argument --wiki
passé à votre fichier LocalSettings.php pour les constantes MW_DB
, MW_PREFIX
, et MW_WIKI_NAME
.
La valeur entière de l'argument --wiki
est la valeur de MW_WIKI_NAME
.
--wiki
, alors la partie avant le tiret est assignée à MW_DB
et la partie après le tiret est assignée à MW_PREFIX
.Ce tableau en explique le fonctionnement :
--wiki |
MW_WIKI_NAME |
MW_DB |
MW_PREFIX
|
---|---|---|---|
enwiki | enwiki | enwiki | empty |
enwiki-one | enwiki-one | enwiki | one |
enwiki-one-two | enwiki-one-two | enwiki | one-two |
Comme il n'y a pas d'argument --wiki
pour les requêtes web, elles doivent être traitées différemment.
Typiquement, le nom de domaine et / ou le chemin dans l'URL, sont utilisés pour sélectionner un wiki.
Conseils pour partager des ressources communes
Vous voulez sauvegarder certains wikis en différentes langues, en partageant les mêmes fichiers média dans un autre wiki séparé.
Par exemple :
- en.example.org - anglais
- fr.example.org - français
- de.example.org - allemand
- pool.example.org - Fichiers de média partagés par tous les wikis.
commons
pour Wikimedia Commons.
Evitez également d'utiliser le nom « media » (comme media.example.org) car cela peut rentrer en conflit avec vos liens interwiki et l'espace de noms interne Media:
lors de l'accès aux fichiers locaux de médias, comme [[media:File.png]].
Tables partagées de la base de données
Préférez l'utilisation d'une base de données partagées pour les comptes utilisateurs. Voir le Manuel:Base de données partagée pour la manière de configurer les tables partagées de la base de données.
Interwiki
Vous pouvez créer des liens interwiki entre tous les wiki, en utilisant Extension:Interwiki . Si les wikis possèdent des éditions traduites en différentes langues, il est recommandé d'appeler le préfixe interwiki exactement comme le code de la langue. Par exemple « de » pour le wiki en allemand de votre famille. De cette manière vous pouvez connecter des pages sur le même sujet en utilisant les liens de langue.
Ajoutez [[de:Hauptseite]]
sur votre page d’accueil en anglais pour créer un lien "Deutsch" dans la barre latérale des langues.
Pour plus d'informations, voir Help:Interwiki linking
Si vous disposez d'un wiki central pour les fichiers, créez également un préfixe pour cela.
Par exemple pool
pour https://pool.example.org/wiki/$1 et cochez la case « Forward » pour qu'il soit reconnu comme un wiki local appartenant à la même famille.
Téléversements
Soyez sûr que le répertoire images du wiki pool est accessible en écriture.
Il est pratique de changer le lien "Téléverser un fichier" des wikis de langue pour pointer vers le site de téléversement du wiki pool.
Ouvrez le fichier LocalSettings.php
de chaque wiki de langue et ajoutez :
$wgUploadNavigationUrl = "https://pool.example.org/index.php/Special:Upload";
En 1.17, vous devez également initialiser $wgUploadMissingFileUrl
pour être redirigé vers le wiki 'pool' pour les liens en rouge.
$wgUploadMissingFileUrl= "https://pool.example.org/index.php/Special:Upload";
Si vous souhaitez autoriser les téléversements uniquement sur le wiki pool, vous pouvez utiliser ceci :
if ( $wgDBname === 'pool' ) {
$wgEnableUploads = true;
} else {
$wgEnableUploads = false;
}
Utiliser des fichiers partagés
Pour utiliser les fichiers du poolwiki dans les wikis de langue, ouvrez le fichier LocalSettings.php de chaque wiki de langue et ajoutez :
$wgUseSharedUploads = true;
$wgSharedUploadPath = 'https://pool.example.org/images';
$wgSharedUploadDirectory = '/(LOCALPATH)/POOL-FOLDER/images/';
$wgHashedSharedUploadDirectory = true;
Vous pouvez maintenant intégrer les fichiers du poolwiki avec par exemple [[File:MyLogo.png]] dans les wikis de langue.
Description des images
Dans chaque wiki de langue, ouvrez (en tant qu'admin) le message MediaWiki:Sharedupload-desc-here.
Changez le texte en quelque chose comme :
Ce fichier est enregistré sur notre poolwiki. Pour des informations sur l'image et la description, voir la [[:pool:File:{{PAGENAME}}|description ici]].
(Et notez le ':' au début de la ligne, qui empêche 'pool' d'être inclus dans la liste interwiki sur la gauche de la page ).
Si vous voulez afficher la description du média, enregistrée sur le poolwiki également, ajoutez au LocalSettings.php de chaque wiki de langue :
$wgFetchCommonsDescriptions = true;
$wgSharedUploadDBname = 'pool'; # DB-Name of PoolWiki
$wgSharedUploadDBprefix = 'wiki_'; # Table name prefix for PoolWiki
$wgRepositoryBaseUrl = "https://pool.example.org/index.php/Image:";
Extensions des familles de wikis
Plusieurs extensions MediaWiki essaient de simplifier l’hébergement de plusieurs wikis en utilisant une base unique de code, néanmoins une seule est actuellement remarquable :
- Extension:MediaWikiFarm - beta.
- Extension:SkinCustomiser : pour les problèmes concernant la localisation de la Sidebar (barre latérale) et le personnalisation des habillages relatifs aux fichiers
MediaWiki:Cologneblue.css
,MediaWiki:Modern.css
,MediaWiki:Monobook.css
,MediaWiki:Vector.css
,MediaWiki:Mobile.css
,MediaWiki:Common.css
respectivement.
Voir aussi
- Extension:CentralAuth
- Manuel:InitialiseSettings.php
- Manuel:Commonsettings.php
- Manuel:$wgConf
- Manuel:ID centralisé — mécanisme par lequel les comptes utilisateur peuvent avoir un identificateur supplémentaire 'central'.