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 30% complete.
Outdated translations are marked like this.
Other languages:
Deutsch • ‎English • ‎Türkçe • ‎español • ‎français • ‎polski • ‎português • ‎português do Brasil • ‎svenska • ‎русский • ‎فارسی • ‎हिन्दी • ‎中文 • ‎日本語 • ‎한국어

Ниже приведены инструкции по настройке MediaWiki для размещения более одного вики-сайта. Множественные вики, находящиеся на одном сервере, называются "Вики-семейство" или "Вики-ферма". Список некоторых вики-ферм доступен на сайте WikiApiary .

Основные принципы

Общепринятой конфигурацией вики-фермы является использование только одного экземпляра MediaWiki. Ниже перечислены некоторые шаги необходимые в этом случае:

  1. Установите MediaWiki сайт и затем создайте из него шаблон базы данных. Этот шаблон может быть как пустым (т.е. без записей в таблицах), так и иметь любые страницы, пользователей, интервики ссылки и т.д., которые вы планируете использовать в последующих экземплярах фермы.
  2. Настройте веб-сервер для маршрутизации трафика из нескольких мест в одну установку MediaWiki. Это может быть для нескольких доменов, поддоменов или подкаталогов, и может быть сделано с помощью символических ссылок, псевдонимов, переписывания URL-адресов или других механизмов.
  3. Настройте семейство в LocalSettings.php в четырех широких разделах:
    1. Firstly, use $_SERVER['SERVER_NAME'] or $_SERVER['REQUEST_URI'] (or similar), and the MW_DB constant (and environment variable) to identify different wikis (e.g. as a variable called $wikiId). The former are for web requests, the latter for maintenance scripts (which you'll pass the --wiki parameter). Don't forget to fail nicely at this point if the wiki can't be identified.
      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. Then, set up configuration variables that are based on the wiki ident. These include:
      $wgDBname = 'mediawiki_'.$wikiId;
      $wgDBuser = 'mediawiki_'.$wikiId;
      $wgCacheDirectory = "/tmp/mediawiki_".$wikiId."_cache";
      $wgUploadDirectory = "$IP/images_$wikiId";
      $wgUploadPath = "/images_$wikiId";
    3. Next, set configuration variables that are different for every wiki. These include:
      if ($wikiId == 'wiki1') {
          $wgSitename = "Wiki name";
          $wgServer = "https://wiki1.example.org";
          $wgLogo = "ExampleWiki_logo.png";
          $wgDBpassword = "we39485f7ha34";
          $wgSecretKey = "9348vhas589ytas35aurhgao94aywrotuhapw94u";
          $wgLanguageCode = 'pt';
      These could also be included from a separate file, e.g. LocalSettings_$wikiId.php.
    4. Lastly, the rest of LocalSettings.php configures all of the common aspects, such as extensions, skins, etc.
  4. Shared resources can be configured, such as users, sessions, media (i.e. uploads), interwiki links, etc.
  5. Installing a new wiki in the family is a matter of creating the database and importing the database template, and then running php maintenance/update.php --wiki=wikiId. Upgrades and other maintenance tasks are similar.

The rest of this page elaborates on (or will do[update required]) the various parts of the above. You may want to also configure a shared database.

Giant switch statement

This will allow you to install more than one wiki on a single server, using the same source code checkout.

  1. Upload MediaWiki files to web folder on the webserver.
  1. Set up initial wiki as usual.

For details, see Manual:Руководство по установке .

  1. After successful installation, move LocalSettings.php into the root directory of your wiki and rename it in such a way to make it easy to track (e.g. LocalSettings_myFirstWiki.php)
  1. Repeat step two and three above for each wiki you wish to create, creating a new LocalSettings.php file for each wiki (e.g., LocalSettings_anotherWiki.php, etc.)
  1. If two or more separately installed wikis are to be merged to operate out of files of the main wiki, then after renaming and moving each of your LocalSettings.php files to the main wiki folder, change the variable $wgScriptPath in each of the LocalSettings.php files to point to the main wiki's folder.
  1. Create a LocalSettings.php file for your global settings, then select one from the two possibilities below:
  • If you have different (sub)domains that link to one directory on your server, use this:
// Include common settings to all wikis before this line (eg. database configuration)

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

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

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

                        header( 'HTTP/1.1 404 Not Found' );
                        echo 'This wiki is not available. Check configuration.';
                        exit( 0 );
To set up multiple domains that point to the same MediaWiki code, you may need to modify your web server and possibly DNS configuration. See the documentation of your web server and or web host for information on how to do that.
  • If your wikis are on the same domain but different paths (e.g. yourdomain.com/wiki1, yourdomain.com/wiki2 etc.), you can use something like this:
// Include common settings to all wikis before this line (eg. database configuration)

$callingurl = strtolower( $_SERVER['REQUEST_URI'] ); // get the calling url
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 );
If you use Short URL with the second case (directory based wikis), you need to check the two directories: strpos( $callingurl, 'wiki1', 0 ) || strpos( $callingurl, 'w1/', 0 ), to symlink the sources (w1 -> w), and adapt $wgScriptPath.

It is recommended to use a different DB for each wiki (By setting a different $wgDBname for each wiki). However if you are limited to a single database, you can use a different prefix ($wgDBprefix ) to separate the different installs.

It may also be useful to simply redirect any unrecognized wiki URL to the "main" url, instead of "This wiki is not available. Check configuration."

Updating wikifarm from the commandline


This method requires the $_SERVER["SERVER_NAME"] to be present to run maintenance/update.php - which of course it isn't, from the commandline. This can be overcome by setting an environment variable:

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

If you were using the subdirectory method, you can use:

export REQUEST_URI="/wiki1"
php update.php

Using conf parameter

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

Drupal-стиль сайтов

Как и ранее, этот сценарий позволяет установить несколько вики на один сервер, используя тот же исходный код (т.е. один набор файлов MediaWiki) и одну базу данных. Преимущества этого метода в том, что он полностью прозрачен для пользователей и достаточно безопасен с точки зрения каталога изображений.

  1. # Создайте корневую папку, в которой будут располагаться все файлы MediaWiki. Например, mkdir /home/web/mediawiki.
  2. # Установите MediaWiki и дополнительные расширения в подпапку с указанием версии движка (Например, /home/web/mediawiki/mediawiki-1.10.0).
  3. # Создайте симлинк на эту директорию. Например, ln -s /home/web/mediawiki/mediawiki-1.10.0 /home/web/mediawiki/code
  4. # Создайте папку sites для хранения конфигураций и рисунков: mkdir /home/web/mediawiki/sites
  5. # Установите вики из папки /code.
  6. # После успешной установки переместите LocalSettings.php в необходимую папку. Например, для сайта http://mysite.com/mywiki, создайте папку mysite.com.mywiki. Например, mkdir /home/web/mediawiki/sites/mysite.com.mywiki. Более подробную информацию смотрите в описании файла settings.php Drupal'а.
  7. # Если вы собираетесь загружать медиафайлы, создайте для них подпапку в папке вашего сайта. Например, mkdir /home/web/mediawiki/sites/mysite.com.wiki/images. Пользователь, под которым работает Apache, должен иметь права на запись в эту папку.
  8. # Поместите файл Drupal-style LocalSettings.php в корневую папку вашей вики: cp DrupalLocalSettings.php /home/web/mediawiki/code/LocalSettings.php
  9. # Модифицируйте LocalSettings.php для каждого сайта так, чтобы он указывал на правильное место:
    1. #* Сначала закомментируйте, касающиеся переменной $IP, (строки 16-20 в 1.15.3), эта переменная будет установлена в файлом index.php и будет содержать путь к папке code.
    2. #* Вставьте следующие строки для возможности загрузки и отображения изображений, например: $wgUploadDirectory = "/home/web/mediawiki/sites/wiki.mysite.com/images"; and $wgUploadPath = "/images";. Их нужно добавить после вызова файла DefaultSettings.php (строка 25 в 1.15.3), иначе эти переменные будут сброшены в значения по умолчанию.
    3. #* Сделать дополнительные изменения по необходимости.
  10. # Подготовка Apache 2. Пример приведен для сайта wiki.mysite.com
    1. #* Создайте линк на папку code, если это необходимо. Например, ln -s /home/web/mediawiki/code /home/web/wiki.mysite.com
    2. #* Создайте конфигурацию для виртуального хоста:
<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>
11. # Если вы настраивали сайт локально, обновите ваш файл hosts вписав имена сайтов. Теперь ваш сайт должен работать.

В моем случае, я сделал еще одну копию кода, из которой я устанавливал и обновлял LocalSettings.php и базы данных. Учтите, что используемая Drupal'ом переменная $_SERVER['HTTP_HOST'] не будет установлена, если скрипты обслуживания запущены из командной строки, поэтому данное решение не позволит вам использовать скрипты обслуживания без некоторых модификаций.

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:

Распределение общих ресурсов между несколькими вики

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

For example:

  • en.yourwiki.org - английский
  • fr.yourwiki.org - французский
  • de.yourwiki.org - немецкий
  • pool.yourwiki.org - media-files for all of these wikis (like Commons).
    • 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]]).


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:

This will not work as of version 1.32.4. LocalSettings.php is loaded by includes/Setup.php.
if ( defined( 'MW_CONFIG_CALLBACK' ) ) {
        call_user_func( MW_CONFIG_CALLBACK );
} else {
        if ( !defined( 'MW_CONFIG_FILE' ) ) {
                define( 'MW_CONFIG_FILE', "$IP/LocalSettings.php" );
        require_once MW_CONFIG_FILE;

The global variable $IP, in turn, is defined in includes/WebStart.php,

# Full path to the installation directory.
$IP = getenv( 'MW_INSTALL_PATH' );
if ( $IP === false ) {
        $IP = dirname( __DIR__ );

which is called by the following code in index.php

require __DIR__ . '/includes/WebStart.php';
The software demands an absolute, not a relative path for LocalSettings.php, regardless of web server settings. This is not a practical way to allow for deduplication of code by using symlinks.


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


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;


Now you have to set Interwikilinks between all wikis, by editing their MySQL-Databases (if you prefer, install and use Extension:Interwiki )

  • Table Interwiki
    • iw_prefix - enter the language-code of the wikis, "de" for German, "en" for English, "fr" for French and "pool" for the mediapoolwiki
    • iw_url - this is the place for the complete URL to the wikis, e.g. "http://de.yourwiki.org/index.php/$1" for the German wiki (don't forget the "$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).

Now you can link an article to the same in another languages. Adding [[de:Hauptseite]] on your English Main_Page will create the link "Deutsch" (under the Navigation bar) which leads to the Main_Page of the German wiki (Hauptseite). For further information visit Help:Interwiki linking

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'.


Make sure that folder "images" of the pool-wiki is writable.

It is useful to change the "Upload file"-Link of the language-wikis to point to poolwiki's upload-site. Open the "LocalSettings.php" of each language-wiki and add:

$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";

Использование общих файлов

To use poolwiki's files in the languagewikis, open "LocalSettings.php" for each languagewiki and add:

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

Now you can integrate pool's files with (e.g. [[Image:MyLogo.png]]) in the languagewikis.

Описание изображения

In each languagewiki, open (as an admin) the message MediaWiki:Sharedupload-desc-here.

Change the text to something like:

This file is stored in our data-pool. 
For information and description, please visit the

[[:pool:Image:{{PAGENAME}}|description there]]. 

(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.)

If you want to output the media-description, stored in the PoolWiki, too, add to the "LocalSettings.php" of the languagewikis:

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

Общие настройки

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:

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.
##### 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.

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.

Symlink method

The symlinks method was formerly a method that eliminated the need to have redundant copies of MediaWiki on your filesystem while providing flexibility and customization for each wiki. WARNING: As of recent MediaWiki versions, this doesn't work anymore. If you try this, your MediaWiki will break. Instead, it's highly recommended to follow its spiritual successor, the method used by the Wikimedia Foundation (and the method that's used to power Wikipedia, this wiki, and many more!).

$ 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

Посмотрим реальный пример mediawiki/LocalSettings.php. В реальной ситуации у вас будут, вероятно, незначительные отличия в именах сайтов и баз данных, которыми Вы управляете.

if ( !defined( 'MEDIAWIKI' ) ) { 
}    #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

Примечательно, что мы и поныне отдельно подготавливаем задачи, связанные с базой данных, например php update.php. (Вышеуказанный код должен определить к каким вики-проектам обращается update.php.) Обновление просто, если Вы используете SVN (download from SVN). (Надеюсь нет больше кода (code), который предполагает, что есть только один Вики-проект на диске...)


Если вы не позволяете загрузку или позволяете только для вашего пула wiki, Вы должны создать отдельные каталоги изображений и указать их псевдонимы в вашей vhost конфигурации:

for i in aaa bbb ccc; do mkdir -p /home/user/images/$i; done, а также в aaa.example.org's vhost: Alias /w/images /home/user/images/aaa. Таким же образом для bbb и ccc.

Однако вместо этого можно предпочесть альтернативную простую установку Manual:Image Administration#Alternative simple setup, где *.example.org/images/ только указывает на ту же самую директорию. В качестве примера: *.example.org/$wgDBname/images/.

Добавление новых вики

Добавление новых wiki к существующему семейству wiki

  1. добавьте конфигурацию в свой web сервер
  2. временно закомментируйте file_exists("../LocalSettings.php") проверьте наличие config/index.php и затем выполните его
  3. merge the config/LocalSettings.php produced into LocalSettings.php
  1. add some pages

Удаление старых вики

Удаление wiki из семейства wiki-проектов

  1. удалите его конфигурацию из
    1. Веб-сервера
    2. LocalSettings.php

Метод, используемый фондом Wikimedia

Еще возможно использовать метод, который использует фонд Wikimedia. This uses only one single MediaWiki directory to provide the backbone for all sites, with the specific wiki being served dynamically determined at page load depending on the value of $_SERVER['SERVER_NAME'] being sent from the webserver (in WMF's case, Apache) to PHP. Ниже упоминаются приблизительные шаги. Этот метод не для слабонервных, но он дает довольно хорошие результаты. Фонд Wikimedia добился успеха при использовании этого метода :-)

  1. Сконфигурируйте шаблонную копию MediaWiki через онлайн мастер конфигурации. Отредактируйте Заглавную страницу если Вы хотите Заглавную страницу, которая будет использоваться по умолчанию, создать на своей ферме.
  2. После этого, экспортируйте свою базу данных с mysqldump, phpMyAdmin, и т.д. 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. Сохраните это на своем сервере в maintenance/ directory примерно как наподобие template.sql.
  3. Теперь, напишите несколько быстрых сценариев, чтобы создать новую wiki.

    В сущности, Вы должны добавить это в список wiki-проектов, который может быть на основе простого неструктурированного файла или на базе MySQL/SQLite, затем импортировать дамп базы данных об эталонах назад в базу данных под именем новой wiki.

    Используйте стандартную приставку после нового имени базы данных (то есть, если wiki-проект называется например meta.yourdomain.net, то Вы могли бы выбрать metawiki в качестве имени базы данных).

  4. В Вашем файле конфигурации, добавьте что-то вроде нижеследующего, устанавливая префикс базы данных и Ваш домен в случае необходимости:
    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. Сконфигурируйте свой DNS с подстановочным знаком А запись, и apache с псевдонимом сервера (like ServerAlias *.example-farm.org), и можете вести бизнес.

The script maintenance/update.php, as well as every other maintenace script, takes a --wiki parameter that is exported as MW_DB constant. Your LocalSettings.php file needs to set it as the correct $wgDBname. (This is because on the command-line, there is no HTTP request, and therefore "SERVER_NAME" isn't set.) For instance:

php maintenance/update.php --wiki catwiki

Ваш уникальный LocalSettings.php (который обычно состоит из нескольких строк, включающий в себя CommonSettings.php, не непосредственно доступный с сервера) декодирует переменную meta и установит $wgDBname в соответствии с этим.

Вы должны также указать местоположение каталогов загрузки, если вы хотите (не хотите), чтобы каждая wiki использовала те же самые файлы. If you require the upload directories to be different, consider a more sophisticated setup by modifying $wgLocalFileRepo and/or $wgForeignFileRepos. You may also want to consider a remote server solution. The Wikimedia Foundation uses OpenStack Swift. Furthermore, extensions exist to enable your wiki to use AWS S3 and Azure Storage for remote file storage as well. Как сказано выше, это - вероятно, один из самых трудных методов в выполнении и он требует большего технического опыта, но он может дать действительно хорошие, чистые результаты. For more details on how the Wikimedia Foundation configures their wikis, visit the Wikitech wiki's explanation of the Wikimedia Foundation's MediaWiki architecture.

Final and very important step to modify $wgServer

Mediawiki installation rewrite the servername at address bar upon every page loading, so please be make sure that $wgServer at LocalSettings.php is set to your actual base URL:PORT and not to http://localhost:80 (unless you actually want to only access MediaWiki through your localhost). Otherwise links will not work, especially in case of local wiki-farm setup with virtual hostings. It requires each servername with allocated port address in URL:PORT format on its respective LocalSettings.php files.

Wiki Farm Extensions

There are several MediaWiki extensions that attempt to simplify hosting of several wikis by using just one code base, however only one is currently noteworthy:

См. также

  • Central ID — the mechanism by which user accounts can have an extra 'central' identifier.


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