Manuel:Famille de wikis

From mediawiki.org
This page is a translated version of the page Manual:Wiki family and the translation is 95% complete.

A wiki family is a collection of two or more wikis that run on the same server and share a common set of resources from the parent installation, while each wiki remains otherwise independent. This setup is an alternative to running fully separate installations of MediaWiki. It may be the preferred choice if the site admin wants to reduce the amount of work involved in managing multiple wikis, or cut down on inode usage. For this reason, some wiki hosting services opt for the wiki family model.

The best known implementation of a wiki family is the wiki farm, although other approaches are possible. A list of known wiki farms is available on 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 :

  1. Installez le premier un wiki de manière classique. Pour plus de détails, voir Guide d'installation .
  2. 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.
  3. 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 et MW_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';
    
  4. 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";
    
  5. Configurez les réécritures par wiki. Cela doit comprendre au moins $wgServer et $wgArticlePath.
    $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  ) );
    
    Ceci peut se faire à partir d'un fichier séparé, par exemple :
    # LocalSettings.php
    $wgConf->settings = require __DIR__ . '/LocalSettings_overrides.php';
    
    # LocalSettings_overrides.php
    <?php
    return [
        'wgServer' => ..,
        ..,
    ];
    

Pour créer un nouveau wiki, créez d’abord sa base de données et ajoutez ses paramètres puis exécutez 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.

  1. 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 .
  2. 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 que LocalSettings_mywiki.php.
  3. Répétez les étapes un et deux ci-dessus pour chaque wiki que vous souhaitez créer.
  4. 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 et MW_PREFIX.
    <?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
    // -------
    
    Si vos wikis sont sur le même domaine, mais avec des chemins différents (par exemple 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.' );
    }
    
Si vous utilisez une URL courte, vous devez l’ajouter à la fois à $wgArticlePath et $wgScriptPath.

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.

  1. Créez un répertoire de base pour contenir tous vos fichiers MediaWiki par exemple mkdir /home/web/mediawiki.
  2. 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).
  3. 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
  4. Créez un répertoire sites pour contenir nos images et nos paramètres : mkdir /home/web/mediawiki/sites
  5. Configurer le wiki comme d’habitude à partir du répertoire /code.
  6. 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 fichier settings.php de Drupal pour plus d'informations à ce sujet.
  7. 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.
  8. Placez le fichier Drupal-style LocalSettings.php dans votre répertoire principal : cp DrupalLocalSettings.php /home/web/mediawiki/code/LocalSettings.php
  9. Modifiez le fichier LocalSettings.php de chaque sous-site pour pointer vers les bons endroits :
    1. D'abord commentez le code contenant $IP, (lignes 16-20 en 1.15.3) car cela définit le répertoire code par index.php.
    2. 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.
    3. Faites les autres modifications comme nécessaire.
  10. Préparez votre installation Apache 2. Site d'exemple : wiki.example.com
    1. 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
    2. 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>
      
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.

S'il y a un tiret dans l'argument --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 :

Analyse de l'argument --wiki.
--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.
L’exemple ci-dessus utilise le nom « pool ». Evitez d'utiliser le nom « commons » car cela peut provoquer des conflits avec le lien interwiki qui s'appelle aussi 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 :

Voir aussi