Manuel:Famille de wikis

From MediaWiki.org
Jump to navigation Jump to search
This page is a translated version of the page Manual:Wiki family and the translation is 37% complete.

Outdated translations are marked like this.
Other languages:
Deutsch • ‎English • ‎español • ‎français • ‎polski • ‎português • ‎português do Brasil • ‎русский • ‎हिन्दी • ‎தமிழ் • ‎සිංහල • ‎中文 • ‎日本語 • ‎한국어

Voici les instructions sur la façon de configurer MediaWiki pour accueillir plus d'un wiki. Plusieurs wikis situés sur le même serveur sont appelés « famille de wikis » (wiki-family) ou « ferme de wikis » (wiki farm). Une liste de famille de wikis connues est disponible sur WikiApiary.

Principe

La configuration la plus courante d’une famille de wiki fonctionne avec une unique version de MediaWiki. Les grandes étapes suivantes sont nécessaires dans ce scénario :

  1. Installez un site MediaWiki normal et créez un modèle de base de données à partir de ce site. Il peut être complètement vide (avec aucune ligne dans aucune table) ou avoir des pages, des utilisateurs, des liens interwikis ou n’importe quelle autre donnée dont vous souhaitez qu’elle soit dans chaque nouveau membre de la famille.
  2. Installez votre serveur web pour acheminer le trafic de multiples origines vers l’installation unique de MediaWiki. Cela peut concerner plusieurs domaines, sous-domaines ou sous-répertoires, et peut être réalisé à l’aide de liens symboliques, d’alias, de réécriture d’URL ou d’autres mécanismes.
  3. Configurez la famille dans LocalSettings.php, dans quatre grosses sections :
    1. Tout d’abord, utilisez $_SERVER['SERVER_NAME'] ou $_SERVER['REQUEST_URI'] (ou similaire), et la constante (et variable d’environnement) MW_DB pour identifier différents wikis (par exemple comme une variable nommée $wikiId). Le précédent sert aux requêtes web, le suivi aux scripts de maintenance (auxquels vous passerez le paramètre --wiki). N’oubliez pas d’arrêter proprement l’exécution à ce moment si le wiki ne peut pas être identifié.
      if ( defined( 'MW_DB' ) ) {
          // Set $wikiId from the defined constant 'MW_DB' that is set by maintenance scripts.
          $wikiId = MW_DB;
      } elseif (isset($_SERVER['SERVER_NAME']) && $_SERVER['SERVER_NAME'] == 'wiki1.example.org') {
          // Add a value to the $wikiId variable for e.g. https://wiki1.example.org/
          $wikiId = 'wiki1';
      } elseif (isset($_SERVER['SERVER_NAME']) && $_SERVER['SERVER_NAME'] == 'example.org' && substr($_SERVER['REQUEST_URI'], 0, 6) == '/wiki2') {
          // Add a value to the $wikiId variable for e.g. https://example.org/wiki2
          $wikiId = 'wiki2';
      } else {
          // Fail gracefully if no value was set to the $wikiId variable, i.e. if no wiki was determined
          die( 'It was not possible to determine the wiki ID.' );
      }
      
    2. Ensuite, définissez les variables de configuration qui sont fondées sur l’identifiant du wiki. Parmi celles-ci :
      $wgDBname = 'mediawiki_'.$wikiId;
      $wgDBuser = 'mediawiki_'.$wikiId;
      $wgCacheDirectory = "/tmp/mediawiki_".$wikiId."_cache";
      $wgUploadDirectory = "$IP/images_$wikiId";
      $wgUploadPath = "/images_$wikiId";
      
    3. Ensuite, définissez les variables de configuration qui sont différentes pour tous les wikis. Celles-ci incluent :
      if ($wikiId == 'wiki1') {
          $wgSitename = "Wiki name";
          $wgServer = "https://wiki1.example.org";
          $wgLogo = "ExampleWiki_logo.png";
          $wgDBpassword = "we39485f7ha34";
          $wgSecretKey = "9348vhas589ytas35aurhgao94aywrotuhapw94u";
          $wgLanguageCode = 'pt';
      }
      
      Elles peuvent aussi être incluses depuis un fichier distinct, par exemple LocalSettings_$wikiId.php.
    4. Enfin, le reste de LocalSettings.php configure tous les éléments courants, tels que les extensions, apparences, etc.
  4. Les ressources partagés peuvent être configurées, telles que des utilisateurs, sessions, médias (téléversements), liens interwikis, etc.
  5. Installer un nouveau wiki dans la famille se fait en créant la base de données et en important le modèle de base de données, et ensuite en exécutant php maintenance/update.php --wiki=wikiId. La mise à niveau et les autres tâches de maintenance se font similairement.

The rest of this page elaborates on (or will do[update required]) the various parts of the above.

Déclaration d'un aiguillage géant

Cela vous permettra d'installer plus d'un wiki sur un seul serveur, en utilisant le même code source de commande.

  1. Télécharger les fichiers MediaWiki dans votre dossier Web sur le serveur.
  2. Mettre en place le wiki initial comme d’habitude. Pour plus de détails, voir Manuel:Guide d'installation .
  3. Après une installation réussie, déplacez le fichier LocalSettings.php dans le répertoire racine de votre wiki et renommez-le de manière à le retrouver facilement (par exemple LocalSettings_myFirstWiki.php)
  4. Répétez l’étape deux et trois ci-dessus pour chaque wiki que vous souhaitez créer, générant un nouveau fichier LocalSettings.php pour chacun d’eux (par exemple, LocalSettings_anotherWiki.php, etc.)
  5. Les wikis installés séparément doivent être fusionnés pour fonctionner sur un site unique. Après avoir renommé et déplacé chacun de vos fichiers LocalSettings.php dans le dossier principal, modifiez la variable $wgScriptPath dans chacun d’eux pour pointer vers le wiki maître.
  6. Créez un fichier LocalSettings.php pour vos paramètres globaux, puis sélectionnez l’une des deux possibilités suivantes :
  • Si vous possédez différents (sous-) domaines qui pointent vers un répertoire sur votre serveur, utilisez ceci :
<?php
// Inclure les paramètres communs à tous les wikis avant cette ligne (configuration par exemple d’une base de données)

        switch ( $_SERVER['SERVER_NAME'] ) {
                case 'shoopz.com':
                        require_once 'LocalSettings_shoopz_com.php';
                        break;

                case 'help.shoopz.com':
                        require_once 'LocalSettings_help_shoopz_com.php';
                        break;

                case 'wiki.shoopz.net':
                        require_once 'LocalSettings_wiki_shoopz_net.php';
                        break;

                default:
                        header( 'HTTP/1.1 404 Not Found' );
                        echo 'This wiki is not available. Check configuration.';
                        exit( 0 );
        }
Pour paramétrer plusieurs domaines qui pointent vers le même code MediaWiki, vous devrez peut-être modifier votre serveur web et éventuellement la configuration DNS. Consultez la documentation de votre serveur Web ou de votre hébergeur pour obtenir des informations sur la façon de pratiquer.
  • Si vos wikis sont sur le même domaine, mais avec des chemins différents (par exemple yourdomain.com/wiki1, yourdomain.com/wiki2, etc.), vous pouvez utiliser ce modèle :
<?php
// Inclure les paramètres communs à tous les wikis avant cette ligne (configuration par exemple d’une base de données)

$callingurl = strtolower( $_SERVER['REQUEST_URI'] ); // obtenir l'url appelant
if ( strpos( $callingurl, '/wiki1' )  === 0 ) {
        require_once 'LocalSettings_wiki1.php';
} elseif ( strpos( $callingurl, '/wiki2' ) === 0 ) {
        require_once 'LocalSettings_wiki2.php';
} elseif ( strpos( $callingurl, '/wikiN' ) === 0 ) {
        require_once 'LocalSettings_wikiN.php';
} else {
        header( 'HTTP/1.1 404 Not Found' );
        echo "This wiki (\"" . htmlspecialchars( $callingurl ) . "\") is not available. Check configuration.";
        exit( 0 );
}
Si vous utilisez une URL courte avec le second cas (des wikis à base de répertoire), vous devez vérifier les deux répertoires : strpos( $callingurl, 'wiki1', 0 ) || strpos( $callingurl, 'w1/', 0 ), créer un lien symbolique des sources (w1 -> w), et adapter $wgScriptPath.

Nous recommandons d’utiliser une base de données différente pour chaque wiki (en définissant un nom unique $wgDBname pour chacun d’eux). Toutefois, si vous êtes limité à une seule base de données, vous pouvez utiliser un préfixe différent ($wgDBprefix ) pour séparer les différentes installations.

Il peut également être utile de simplement rediriger l’URL du wiki non reconnu vers l’URL "principale", a la place de "Ce wiki n’est pas disponibles. Vérifiez la configuration."

Mise à jour de la ferme Wiki en ligne de commande

Avec EXPORT

Cette méthode nécessite que $_SERVER["SERVER_NAME"] demeure en fonction pour exécuter maintenance/update.php, ce qui, bien sûr, ne se pratique pas à partir de la ligne de commande. Vous pouvez effectuer cette mise à jour en définissant une variable d’environnement :

SERVER_NAME=foo.subdomain.org
export SERVER_NAME
php update.php

Si vous employez la méthode de sous-répertoire, vous pouvez utiliser :

REQUEST_URI="/wiki1"
export REQUEST_URI
php update.php

Avec le paramètre conf =

If you are using a separate LocalSettings.php file for each wiki in the family, as suggested in Giant switch statement, then you can use the --conf parameter to tell update.php which settings file to use. For instance:

php update.php --conf ../LocalSettings_shoopz_com.php

Les sites sous Drupal

Comme ci-dessus, cette configuration vous permet d’installer plus d’un wiki en utilisant différentes bases de données et le même code source sur un seul serveur. 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.
  1. * 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).
  2. * Liez le dossier indiquant la version au répertoire code. Par exemple, ln -s /home/web/mediawiki/mediawiki-1.10.0 /home/web/mediawiki/code
  3. * Créez un répertoire sites pour contenir nos images et paramètres : mkdir /home/web/mediawiki/sites
  4. * Configurer le wiki comme d’habitude à partir du répertoire /code.
  5. * Après une installation réussie, déplacez le fichier LocalSettings.php dans le répertoire sites qui sera la cible lorsque le site est vérifié. Par exemple, pour capturer http://mysite.com/mywiki, on pourrait créer le répertoire mysite.com.mywiki. par exemple, mkdir /home/web/mediawiki/sites/mysite.com.mywiki. Voir le fichier settings.php de Drupal pour plus d'informations à ce sujet.
  6. * Si vous avez l’intention d’utiliser des fichiers multimédias, créez un répertoire d’images dans votre dossier de site. Par exemple, mkdir /home/web/mediawiki/sites/mysite.com.wiki/images. Rendez-le accessible en écriture si nécessaire.
  7. * Placez le fichier LocalSettings.php de Drupal dans votre répertoire principal : cp DrupalLocalSettings.php /home/web/mediawiki/code/LocalSettings.php
  8. * Modifiez le fichier LocalSettings.php de chaque sous-site pour pointer vers les bons endroits :
    1. **Pour commencer, commentez le code contenant $IP (lignes 16-20 en 1.15.3) tel que cela est défini dans le répertoire de "code" par index.php.
    2. Next insert the following two lines to ensure that image files are accessible, e.g.: $wgUploadDirectory = "/home/web/mediawiki/sites/wiki.mysite.com/images"; and $wgUploadPath = "/images";. These need to be put somewhere after the call to DefaultSettings.php (line 25 in 1.15.3), as the variables will otherwise be reset.
    3. Make further modifications as required.
  9. Prepare your Apache 2 installation. Example site: wiki.mysite.com
    1. Create a link to the code directory, if required e.g. ln -s /home/web/mediawiki/code /home/web/wiki.mysite.com
    2. Create an appropriate VHost configuration:
<VirtualHost *:80>
    ServerAdmin me@myserver.com
    DocumentRoot /home/web/wiki.mysite.com
    ServerName wiki.mysite.com
    CustomLog /var/log/apache2/wiki.mysite.log common
    # Alias for the site to be accessible
      Alias /mediawiki/code /home/web/mediawiki/code
    # Alias for Wiki so images work
      Alias /images /home/web/mediawiki/sites/wiki.mysite.com/images
    # If you want to password protect your site
    #  <Directory /home/web/wiki.mysite.com>
    #    AuthType Basic
    #    AuthName "My protected Wiki"
    #    AuthUserFile /etc/apache2/htpasswd/users-mywiki
    #   require valid-user
    #  </Directory>
</VirtualHost>
11. If you are setting the sites up locally, update your hosts file with the site names. The site should now work.

In my case, I made another copy of the code from which to install and update my LocalSettings.php and databases.Note that $_SERVER['HTTP_HOST'] in the companion Drupal code is undefined when running maintenance scripts from the command line, so this solution does not permit the use of maintenance scripts without some modification.

Modified Drupal-style method for Ubuntu

A simplified method for multiple wikis and multiple (or nested) subwikis on Ubuntu/Kubuntu that is loosely based on the above method can be found at:

Multiple wikis sharing common resources

You want to have some wikis in different languages, sharing the same media-files in another, single wiki.

For example:

  • en.yourwiki.org - anglais
  • fr.yourwiki.org - français
  • de.yourwiki.org - allemand
  • pool.yourwiki.org - media-files for all of these wikis (like Commons).
    • As there is already an Interwikilink named commons for Wikimedia Commons, we name our media-files-wiki "pool".
    • Think before being creative; if you call your media-files-wiki something like "media" (e.g. media.example.com), it might collide with internal namespaces and nomenclature for embedded media files ([[media:file.ext]]).

Install

On your file system, create a folder for each wiki. Run the install script for each wiki.

This solution duplicates source code. To reduce this duplication and improve cache performance, you may wish to replace the bin (≤ MW 1.20.x), docs, extensions, includes, languages, maintenance, math (≤ MW 1.17.x), resources, serialized[1], skins, tests and vendor (≥ MW 1.22.x[2]) directories for non-pool installations with symbolic links to the pool's directories:

For example, enter

rm -R extensions/

and then enter

ln -s pathtopool/extensions/ extensions
Don't forget to allow your Apache to Follow Symbolic Link editing your httpd.conf adding FollowSymLinks options
However, you should not replace the cache, mw-config(config ≤ MW 1.16.x) and images directories.

To do the same in Windows, use

mklink /D pathtolink pathtotarget

Configure

Wiki Configurations

It is imperative, that you modify LocalSettings.php of your different wiki installations right from the start (even before creating the symbolic links) , or you will have /wiki/../maintenance/runJobs.php --maxjobs 1 piling up in your server's memory. Include the line below into each LocalSettings.php.
$wgJobRunRate = 0;

Interwiki

Maintenant vous devez paramétrer les liens interwiki entre tous les wiki, en éditant leurs bases de données MySQL :

  • Table interwiki
    • iw_prefix - entrez le code de la langue des wikis, "de" pour l'allemand, "en" pour l'anglais, "fr" pour le français et "pool" pour le mediapoolwiki
    • iw_url - ceci est l'endroit où doit apparaître l'URL complète des wiki, par exemple http://de.votrewiki.org/index.php/$1 pour l'allemand (n'oubliez pas le "$1").

Enter as many records into table Interwiki than you have different wiki (so one record for German, one for English, one for media for example).

Maintenant vous pouvez lier un article à son équivalent dans d'autres langues. Ajouter [[de:Hauptseite]] sur une page crée un lien interwiki "Deutsch" (sous la boîte à outils) vers la page Hauptseite du wiki en allemand. Pour plus d'informations, regardez Help:Interwiki linking/fr.

Note to page Special:Interwiki: (you will see a long table)
Add in the German wiki the prefix 'en' and the url http://en.yourwiki.org/index.php/$1 and set the checkbox 'Als lokales Wiki definiert'.
Do it in the English wiki vice versa with checkbox 'Forward'. And in both wikis enter a second prefix 'pool' and http://pool.yourwiki.org/index.php/$1 and check the checkbox 'Forward'.

Téléchargements

Soyez sûr que le répertoire "images" du poolwiki est autorisé à l'écriture.

Il est pratique de changer le lien "Copier sur le serveur" des wikis pour pointer vers le wiki pool. Ouvrez le fichier LocalSettings.php de chaque wiki et ajoutez :

$wgUploadNavigationUrl = "http://pool.yourwiki.org/index.php/Special:Upload";

In 1.17, you'll also have to set $wgUploadMissingFileUrl to be redirected to the pool-wiki on red links.

$wgUploadMissingFileUrl= "http://pool.yourwiki.org/index.php/Special:Upload";

Utiliser des fichiers partagés

Pour utiliser les fichiers du poolwiki dans les autres wikis-langue, ouvrez le fichier LocalSettings.php de chaque wiki-langue et ajoutez :

$wgUseSharedUploads = true;
$wgSharedUploadPath = 'http://pool.yourwiki.org/images';
$wgSharedUploadDirectory = '/(LOCALPATH)/POOL-FOLDER/images/';
$wgHashedSharedUploadDirectory = true;

Vous pouvez maintenant intégrer les fichiers du poolwiki avec par exemple [[Image:MyLogo.png]] dans les wikis-langue.

Description des images

Dans chaque wiki-langue, ouvrez (en tant qu'admin) le message MediaWiki:Sharedupload.

Changez le texte avec la forme :

Ce fichier est enregistré sur notre poolwiki. 
Pour des informations sur l'image et la description, visitez sa

[[:pool:Image:{{PAGENAME}}|description là-bas]]. 

(And note the ':' at the beginning of the line, which stops 'pool' from being included in the interwiki list at the left of the page.)

Si vous voulez afficher la description du média, enregistrée sur le poolwiki également, ajoutez au LocalSettings.php de chaque wiki-langue :

$wgFetchCommonsDescriptions = true;
$wgSharedUploadDBname = 'pool';  # DB-Name of PoolWiki
$wgSharedUploadDBprefix = 'wiki_'; # Table name prefix for PoolWiki
$wgRepositoryBaseUrl = "http://pool.yourwiki.org/index.php/Image:";

Shared Settings

If you have multiple wikis, you'll probably want to share similar settings across them all. Here is how to do that. We recommend that you separate your Extension settings into a different file than your other settings, as detailed below. They can be all put into one large file, but it's not as flexible depending upon your specific needs.

Here is an example directory structure if you do all of the following:

en/
es/
pl/
ja/
pool/
ExtensionSettings.php
WikiFamilySettings.php
SharedMediaSettings.php
Extension Settings
  • Step 1
    Create a file called ExtensionSettings.php with the following contents, and place it in a location similar to the example above.
<?php
#####
##### Extension Directory Variables
#####
##
## These variables allow you to specify a single, shared directory for each grouping of extensions.
## If the directory ever needs to be changed, it can be changed here rather than on every
## item below. DO NOT include a trailing "/".
##
## Extensions from gerrit.wikimedia.org
# $wgWikimediaExtensions = "/var/www/wikimediaextensions";
##
## Any third-party extensions
# $wgOtherExtensions = "/var/www/extensions";
#####
#####

### Add globalized extension settings below
#require_once "$wgWikimediaExtensions/ReallyCoolExtension/ReallyCoolExtension.php"; #An example Wikimedia Subversion extension entry

#require_once "$wgOtherExtensions/ReallyCoolExtension/ReallyCoolExtension.php"; #An example third-party extension entry
  • Step 2
    Edit the LocalSettings.php file of each wiki that you want to use the shared settings, and add the following.
require_once "/absolute/path/to/ExtensionSettings.php";
  • Step 3
    Now just add all the references to your various extensions
Wiki Family Settings

These are settings that you want to apply to the entire wiki family. For example, maybe you want to be able to easily put all the wikis into read-only mode at the same time. You can also store the username/password for the database(s), if they are all the same. Additionally, you could control user permissions across your entire wiki from this one file.

Note: If you use a Images/Media commons or pool, we recommend that you do not put these settings in the WikiFamilySettings.php file. That information only applies to every wiki in your wiki family other than your repository. We recommend putting it in a separate file.

Shared database tables

See Manual:Shared database for instructions on setting up shared database tables.

Ultimate minimalist solution

The "ultimate minimalist solution" consists of symlinks;

$ ls -og
lrwxrwxrwx 1 16 2008-11-03 06:29 aaa.example.org -> mediawiki
lrwxrwxrwx 1 16 2008-11-03 06:29 bbb.example.org -> mediawiki
lrwxrwxrwx 1 16 2008-11-03 06:29 ccc.example.org -> mediawiki

Let's see a real example of mediawiki/LocalSettings.php. In real life we must deal with the slight differences in the names and databases of the sites we manage.

if ( !defined( 'MEDIAWIKI' ) ) { 
exit; 
}    #Protect against web entry
$mysites = array(
    array( '台掃', 'radioscanningtw.jidanni.org', 'radioscanningtw' ),
    array( '蝶園', 'transgender-taiwan.org',      'transgender' ),
    array( 'ABJ',    'abj.jidanni.org',             'mwabj' )
);
$mystrings = array( $_SERVER['SCRIPT_FILENAME'] );
if ($wgCommandLineMode) { $mystrings[] = $_SERVER['PWD']; }
$mystrings[] = $IP;
foreach ( $mysites as $site ) {
    foreach ( $mystrings as $string ) {
        if ( strpos( $string, $site[1] ) !== false ) {
            $wgSitename = $site[0];
            putenv( "MW_INSTALL_PATH=/home/jidanni/" . $site[1] );
            $wgDBname = $site[2];
            break 2;
        }
    }
}
if ( $wgSitename == 'MediaWiki' ){
  trigger_error('Oh no, I still have not set $wgSitename. Somebody tell me. TEL +886-963-114343',E_USER_ERROR);}

## For maintenance scripts, https://bugzilla.wikimedia.org/show_bug.cgi?id=19593 :
if ( $wgServer == 'http://localhost' ) {
    $wgServer = $wgInternalServer = 'http://' . $site[1];
}
$wgUsePathInfo = false; 
$wgScriptPath = ''; 
$wgDBserver = 'mysql.transgender-taiwan.org';
$wgLogo = "/images/$wgDBname/$wgDBname.png";
switch ( $wgSitename ) {
  #any per-wiki customizations
}

Note we still individually do database related tasks, e.g., php update.php. (The above code should detect which wiki's update.php you are referring to.) Upgrading is simple if you download from Git. (Hopefully there is no more code that assumes there is only one wiki on the disk...)

Images

Unless you do not allow uploads or allow them only for your pool wiki, you will need to create separate image directories and alias them in your vhost configuration: for i in aaa bbb ccc; do mkdir -p /home/user/images/$i; done, and in aaa.example.org's vhost: Alias /w/images /home/user/images/aaa. Same for bbb and ccc.

However you may instead just prefer Manuel:Gestion des images , where *.example.org/images/ just point to the same single directory. Or one could use e.g., *.example.org/$wgDBname/images/.

Adding new wikis

To add a wiki to a production Wiki family/fr

  1. add its configuration to your web server
  2. temporarily comment out the file_exists("../LocalSettings.php") check of config/index.php and then run it
  3. merge the config/LocalSettings.php produced into LocalSettings.php
  4. add some pages

Removing old wikis

To remove a wiki from a production Wiki family/fr

  1. remove its configuration from
    1. web server
    2. LocalSettings.php
  2. DROP DATABASE

Wikimedia Method

Another option is using the method that the Wikimedia Foundation uses. The rough steps are listed below. This method isn't for the faint of heart, but it has fairly good results, as can be seen by the success the Wikimedia Foundation has had by using this :-)

  1. Configure a template copy of MediaWiki through the online configuration wizard. Edit the Main Page if you want a default main page for every wiki you create on your farm.
  2. After that, export your database with mysqldump, phpMyAdmin, etc. This database export can also be structure-only (e.g. mysqldump -uroot -p --no-data dbname > template.sql), in which case you'll have to create the first user with createAndPromote.php. Save this on your server in the maintenance/ directory as something like template.sql.
  3. Now, write up a few quick scripts to create a new wiki. In summary, you'll need to duplicate the database for a list of wikis (the list can be flat-file based or MySQL/SQLite based). First export the template wiki, then import the template database dump back into the database under the name of each new wiki. Use a standard suffix after the new database name (i.e. if the wiki is cat.example-farm.org, then you might choose catwiki as the database name).
  4. In your configuration file, add something like this, fixing the database prefix and your domain as necessary:
    if ( defined( 'MW_DB' ) ) {
        // Command-line mode and maintenance scripts (e.g. update.php) 
        $wgDBname = MW_DB;
    } else {
        // Web server
        $server = $_SERVER['SERVER_NAME'];
        if ( preg_match( '/^(.*)\.example-farm.org$/', $server, $matches ) ) {
            $wikiname = $matches[1];
        } else {
            die( "Invalid host name, can't determine wiki name" );
            // Optional: Redirect to a "No such wiki" page.
        }
        if ( $wikiname === "www" ) {
            // Optional: Override database name of your "main" wiki (otherwise "wwwwiki")
            $wikiname = "meta";
        }
        $wgDBname = $wikiname . "wiki";
    }
    
  5. Configure your DNS with a wildcard A record, and apache with a server alias (like ServerAlias *.example-farm.org) and you should be in business.

The script maintenance/update.php takes a --wiki parameter that is exported as MW_DB constant. Your LocalSettings.php file needs to set it as the correct $wgDBname. (On the command-line there is no HTTP request, and no "SERVER_NAME":

php maintenance/update.php --wiki catwiki

Your unique LocalSettings.php (which usually consists in a few lines including a CommonSettings.php not directly accessible from the server) uses the $wgDBname variable to initialise the wiki-specific settings. See Manual:$wgConf#Example for how.

You'll also need to fix the upload directories unless you want every wiki to use the same files. As said above, this is probably one of the hardest methods to do, and it requires more technical experience, but it can give really good, clean results.

Extensions autour des familles de wiki

Plusieurs extensions pour MediaWiki essaient de simplifier l’hébergement de plusieurs wikis en utilisant une base unique base commune :


Voir aussi

References

  1. See this thread concerning the "serialised" folder
  2. In case you are using Composer to install some or all extensions, if supported