Manual:ウィキファミリー

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

Other languages:
Deutsch • ‎English • ‎español • ‎français • ‎日本語 • ‎한국어 • ‎polski • ‎português do Brasil • ‎русский • ‎සිංහල • ‎தமிழ் • ‎中文

MediaWikiを使って複数のウィキを立ち上げる方法について以下に記します。 同じサーバにある複数のウィキをウィキファミリーまたはウィキファームと呼びます。これまで明らかになったウィキファームの一覧WikiApiary/jaのとおりです。

原則

最も典型的なウィキファームは単一バージョンの MediaWiki を走らせ構築します。一般にこのシナリオだと以下のステップに従います。

  1. まず通常の MediaWiki サイトをインストールし、そこからデータベースのテンプレートを作成します。空白(どのテーブルにも列がない) でも、ファームの追加した新しいウィキに表紙ページやユーザー、ウィキ間リンク他を設定しても構いません。
  2. Set up your web server to route traffic from multiple places to the one MediaWiki installation. This can be for multiple domains, subdomains, or subdirectories, and can be done with symlinks, aliases, URL rewriting, or other mechanisms.
  3. ウィキファームの設定は大きく4つのパーツで構成します。
    1. まず第1に、ウィキごとに識別するためのコード $_SERVER['SERVER_NAME'] あるいは $_SERVER['REQUEST_URI'] (または同様の記述) や MW_DB を不変数 (および環境変数) で設定 (例: 変数名 $wikiId)。1、2番目の変数はウェブリクエスト用、3、4番目はメンテナンス用スクリプトを指す (--wiki パラメタを渡す)。この時点でウィキの識別に失敗した場合は、必ず設定をやり直すとよい。
      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. 第2に設定変数をそれぞれのウィキ識別子に「基づいて」決める。対象はこちら。
      $wgDBname = 'mediawiki_'.$wikiId;
      $wgDBuser = 'mediawiki_'.$wikiId;
      $wgCacheDirectory = "/tmp/mediawiki_".$wikiId."_cache";
      $wgUploadDirectory = "$IP/images_$wikiId";
      $wgUploadPath = "/images_$wikiId";
      
    3. 第3に、ウィキごとに異なる変数を決める。対象はこちら。
      if ($wikiId == 'wiki1') {
          $wgSitename = "Wiki name";
          $wgServer = "https://wiki1.example.org";
          $wgLogo = "ExampleWiki_logo.png";
          $wgDBpassword = "we39485f7ha34";
          $wgSecretKey = "9348vhas589ytas35aurhgao94aywrotuhapw94u";
          $wgLanguageCode = 'pt';
      }
      
      もちろん LocalSettings_$wikiId.php のように、他のファイルから取ってくることも可能。
    4. 第4に、LocalSettings.php の残りの部分で共通の要素を指定。対象は拡張機能や外装など。
  4. 共有するリソースの設定もできます。対象はユーザー、セッション、メディア (アップロード先他) ウィキ間リンクなど。
  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.

このページの後半で上記のパーツをそれぞれ詳しく説明 (もしくは[更新が必要]と表示) します。

ウィキごとに設定を切り替える設定方法

これにより、同じソースコードを使って、一つのサーバに複数のウィキをインストールできるようになります。

  1. MediaWikiファイルをウェブサーバのウェブフォルダにアップロードする。
  2. 通常通りウィキの初期設定を行う。 詳細は Manual:インストール ガイドManual:Installation guide を参照。
  3. うまくインストールできたら、LocalSettings.phpManual:LocalSettings.php をあなたのウィキのルートディレクトリに移動し、何のためのファイルなのか後でわかりやすい名前にファイル名を変更 (例: LocalSettings_myFirstWiki.php)
  4. 作成したいウィキの数だけ、上記の操作を2回3回と繰り返し、各ウィキごとの新たな LocalSettings.php ファイルを作成 (例: LocalSettings_anotherWiki.php など)
  5. 2つ以上の別々にインストールしたウィキを統合、メインウィキのファイルから操作するには、各ウィキの LocalSettings.php ファイルのファイル名を変更してからメインウィキのフォルダに移動、各 LocalSettings.php ファイルを開いて $wgScriptPathManual:$wgScriptPath 変数をメインウィキのフォルダを示す値に変更する。
  6. グローバルな設定用に LocalSettings.php ファイルを作成し、下記2つの方法からどちらかひとつを選んで実行。
  • 複数の (サブ) ドメインがサーバ内の特定のディレクトリにリンクする場合。
<?php
// この行の前に全てのウィキに共通する設定(例:データベース設定)を含めます。

        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 );
        }
複数のドメインが同じ MediaWiki コードを指す場合には、あなたのウェブサーバ、そしておそらくDNSの設定変更も必要になるはずです。 その処理については、ご利用のウェブサーバまたはウェブホストの説明文書やマニュアルを参照してください。
  • ウィキのドメインが共通で、パスが異なる場合の設定 (例: yourdomain.com/wiki1yourdomain.com/wiki2)。
<?php
// この行の前に全てのウィキに共通する設定(例:データベース設定)を含めます。

$callingurl = strtolower( $_SERVER['REQUEST_URI'] ); // 呼び出し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 );
}
上記の2番目のウィキのパスが異なる例 (ディレクトリベース) で短縮URLを使う場合、次の2つのディレクトリを設定し直します。strpos( $callingurl, 'wiki1', 0 ) || strpos( $callingurl, 'w1/', 0 ) のソースにシンボリックリンク (w1 -> w) を作成。$wgScriptPath を適用。

ウィキごとに異なるデータベースを使うことをお勧めします (そのために $wgDBnameManual:$wgDBname でウィキごとに異なる値を設定)。 もし使えるデータベースがひとつしかない場合には、ウィキごとに接頭辞 ($wgDBprefixManual:$wgDBprefix) を変えると、インストールを分離できます。

さらに便利な設定として、認識できない URL を呼び出したときに「このウィキは利用できません。設定を確認してください。」とエラーメッセージを表示する代わりに、単に「メイン」のURLにリダイレクトする方法があります。

コマンドラインからホスティングサービスのウィキを更新する

EXPORTを使う

この方法を用いる際、maintenance/update.php を実行するのに $_SERVER["SERVER_NAME"] の値設定が必要となります。ただし、それが設定されていなくてもコマンドラインから設定することができます。 環境変数を設定することにより問題は回避できます。

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

サブディレクトリを使って複数ウィキを設定していた場合、以下のようなコマンドを実行すればいいでしょう。

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

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. 例:

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

Drupalスタイルのサイト

上記において、同じソースコードを使用して単独のサーバ上で複数のwikiをインストールしました。 この設定はユーザに対して完全に透明で、画像ディレクトリの観点からはかなり安全であるという点が有利です。

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. wikiを通常の「/code」ディレクトリからセットアップ。
6. インストール成功後に、LocalSettings.php をサイトチェック時に適合する /site ディレクトリに移動。 例: http://mysite.com/mywikiに対応するため、mysite.com.mywiki ディレクトリを作成。 mkdir /home/web/mediawiki/sites/mysite.com.mywiki 詳細は Drupal の settings.php ファイルを参照。
7. メディアファイルを使用するなら、サイトのディレクトリに images ディレクトリを作成。 mkdir /home/web/mediawiki/sites/mysite.com.wiki/images 必要なら書き込み可能に設定。
8. Drupal-style LocalSettings.phpファイルをメインディレクトリに設置: cp DrupalLocalSettings.php /home/web/mediawiki/code/LocalSettings.php
9. サブサイトごとに LocalSettings.php の位置を修正。次の修正には特に注意:
  • まず $IP 関連のコードをコメントアウト (1.15.3 では16-20行) 、index.php で「code」ディレクトリに指定されるのを回避。
  • 続いて以下の2行を挿入、画像ファイルへのアクセスを設定。 : $wgUploadDirectory = "/home/web/mediawiki/sites/wiki.mysite.com/images"; ならびに $wgUploadPath = "/images"; 変数のリセットを防ぐため、2行の挿入位置は DefaultSettings.php (1.15.3 では25行) 呼び出しより以降にする。
  • 必要に応じて他の調整をする。
10. Apache 2 のインストールを準備。例: wiki.mysite.com
  • 必要なら「code」ディレクトリにリンクを作成。 ln -s /home/web/mediawiki/code /home/web/wiki.mysite.com
  • 適切なVHost 構成を作成:
<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. サイトをローカルに開設した場合、hosts ファイル名をサイト名に変更。

これでサイトは動作します。 私の場合、LocalSettings.phpとデータベースをインストールとアップデートするところから他のコードのコピーをしました。

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.

Ubuntu 用に修正した Drupal スタイル方式

Ubuntu/Kubuntu で複数のウィキとサブウィキ (ネスト式を含む) を作成するには、上記の Drupal スタイルと基本的には同じ考え方で修正した、簡略版の方式が利用できます。


複数のwiki でリソースを共有

異なる言語のウィキを複数持ち、さらにメディアファイルについては別の単一ウィキを使って同じファイルを共有したいとします。

例:

  • en.yourwiki.org - 英語
  • fr.yourwiki.org - フランス語
  • de.yourwiki.org - ドイツ語
  • pool.yourwiki.org - これらウィキ全てにメディアファイルを提供(コモンズのように)
    • ウィキメディアのメディア共用のためのウィキとしてcommonsと命名されたインターウィキが既に存在するので、ここではメディアファイルwikiは「pool」と命名。
    • ウィキ名を決めるときは慎重に。メディアファイルウィキを「media」と命名しようとすると (例えば media.example.com)、命名法が埋め込みメディア画像の内部名前空間 ([[media:file.ext]]) と衝突する可能性があるからです。

インストールInstallation

ファイルシステム上において、それぞれのwikiのためにフォルダを作成してください。 その後、それぞれのディレクトリでインストール・スクリプトを実行して Mediawiki をインストールしてください。

この方法では複数のディレクトリに Mediawiki をインストールするためソース・コードが重複します。 この重複を取り除いてキャッシュパフォーマンスを改善するには、共通メディア用を除くそれぞれのウィキについて、以下の非 pool インストール用ディレクトリを pool ディレクトリのシンボリックリンクに置き換えます。bin(≤ MW 1.20.x)、docsextensionsincludeslanguagesmaintenancemath(≤ MW 1.17.x)、resourcesserialized[1]skinstestsvendor(≥ MW 1.22.x[2])。

例をあげるなら

rm -R extensions/

の後に入力するのは次の通りです。

ln -s pathtopool/extensions/ extensions
忘れずにhttpd.confFollowSymLinksオプションを追加し、Apacheがシンボリックリンクをたどることができるようにしてください。
但し、cachemw-configconfig ≤ MW 1.16.x)、images の各ディレクトリを置きかえてはいけません

Windows では以下のようなコマンドになります。

mklink /D pathtolink pathtotarget

設定

ウィキの設定

ここで重要なポイントがあります。異なるWikiインストールのLocalSettings.phpを最初から (シンボリックリンク作成より先に) 修正することは不可欠です。さもないと、サーバのメモリに/wiki/../maintenance/runJobs.php --maxjobs 1の表示が増えていきます。 必ず LocalSettings.php 1件ごとに以下の行を書き込みます。
$wgJobRunRate = 0;

ウィキ間リンク

MySQLデータベースを編集してすべてのwiki間のウィキ間リンクを設定しなければなりません。

  • Interwiki (ウィキ間) テーブル
    • iw_prefix - wikiの言語コードを入力。ドイツ語は「de」、英語は「en」、「fr」はフランス語、mediapoolwikiは「pool」。
    • iw_url - wikiへの完全なURLを記入。例えばドイツ語ウィキは「http://de.yourwiki.org/index.php/$1」(「$1」を忘れずに!!!)

インターウィキのテーブルには、作成する複数のウィキに対応するレコードをすべて入力します。(例=日本語版用、英語版用、メディア用等)

こうして特定の記事を異なる言語版にある対応する記事にリンクすることができました。 例えば英語版のMain_Pageに[[de:Hauptseite]] 追加することで、「ドイツ語版」のメインページにリンクが作成されます。 詳細な情報はヘルプをご覧ください。

Special:Interwiki も参照: (長大なテーブルが開きます。)
例えばドイツ語版ウィキでは接頭子「en」と url http://en.yourwiki.org/index.php/$1 を追加、チェックボックス「Als lokales Wiki definiert」(訳注: ローカルWikiとして定義) をオンにします。
英語版ウィキではドイツ語版に対し、反対の設定をします。 それから両方のウィキでは共有フォルダを2番目の接頭辞「pool」http://pool.yourwiki.org/index.php/$1 として追加、チェックボックス「Forward」をオンにします。

アップロード

pool-wiki の「images」フォルダが書き込み可能であることを確認してください。

「Upload file-言語版ウィキ」リンクが poolwiki のアップロードサイトを指すよう、言語版ごとに設定を変更しておくと便利です。 それぞれの言語版ウィキの LocalSettings.php を開き、以下のコードを追加。

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

1.17 の場合は $wgUploadMissingFileUrl を赤字リンクの時に pool-wiki にリダイレクトするように設定が必要。

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

共有ファイルを使用する

言語版ウィキで poolwiki のファイルを使用するには、それぞれの言語版ウィキの「LocalSettings.php」を開き、以下の行を追加します。

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

これで多言語ウィキにおいて pool ディレクトリから複数のファイルを呼び出そうとした時、例えば Image:MyLogo.png というメディアに統一できます。

画像の説明

それぞれの言語wikiにおいて、(管理者として)MediaWiki:Shareduploadメッセージを開きます。

次のようにテキストを変更します。

このファイルはここでのデータプールに保存されます。 
ファイルの詳細と解説は次のページに記載されています。

[[:pool:Image:{{PAGENAME}}|解説を表示]]。 

(ここで英文の先頭の「[[」に続く「:」に注目。これを書くとページ左側のウィキ間リンクの一覧で「pool」を読み込まなくなります。)

共有ディレクトリの poolwiki に保存したメディアの説明文を出力したい場合、それぞれの言語版ウィキの「LocalSettings.php」に次のコードを追加します。

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

共有設定

複数のウィキを作った場合、似た設定をどのウィキでも共有したらよい場合があります。 それは次のようにします。 下記で説明するように、拡張機能の設定はその他の設定とは保存先のファイルを分けるよう推奨します。 大きなファイルに一括して書くことは可能ですが、使い方のニーズによっては必ずしも柔軟性がありません。

ディレクトリ構造に従うなら、下記がサンプルになります。

en/
es/
pl/
ja/
pool/
ExtensionSettings.php
WikiFamilySettings.php
SharedMediaSettings.php
拡張機能の設定
  • ステップ 1
    次の内容を持つ ExtensionSettings.php と命名したファイルを作成し上記の例と同じように設置。
<?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
  • ステップ 2
    共有設定を使用したいそれぞれのウィキの LocalSettings.php ファイルを編集し次の内容を追加
require_once "/absolute/path/to/ExtensionSettings.php";
  • ステップ 3
    そしてすべての拡張機能への参照をもれなく追加。
Wikiファームの設定

ウィキファーム全体に適用したい設定があるとします。 例えば、すべてのwikiを同時にリードオンリーモードに設定できるようにしたいとします。 またユーザ名/パスワードがデータベース (単体または複数) ですべて共通の場合なら、保存したいとします。 さらにまた、このファイルひとつを使って、複数のウィキのユーザパーミッションを一括コントロールできます。

注記: Images/Media commons (このページで pool と命名したディレクトリ) を使用する場合、WikiFamilySettings.php ファイルでこれらの設定適用しないことを推奨します。 その情報はリポジトリではなく、ウィキファームに設定したウィキだけに限定して適用したいからです。 それを個別のファイルに設定することを推奨します。

データベース テーブルの共有

共有データベースの設定の手順は Manual:Shared database を参照してください。

究極の最小解決方法

「究極の最小解決法」はシンボリックリンクで構成するという方法です;

$ 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' ) ) { 
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
}

それでも管理者はデータベースに個別の設定が必要です(例: どのウィキの設定を参照しているか検出するコードは php update.php.。) Upgrading is simple if you download from Git. (Hopefully there is no more code that assumes there is only one wiki on the disk...)

画像

アップロードを許可していないか、または共用メディア用ウィキのみにアップロードを許可している場合、それぞれのウィキで画像ディレクトリを作成し、仮想ホスト設定でそのディレクトリを参照するようエイリアスの設定を行う必要があります。 for i in aaa bbb ccc; do mkdir -p /home/user/images/$i; done を実行し、aaa.example.org の仮想ホスト設定に Alias /w/images /home/user/images/aaa を追記します。同じ設定をbbbとcccについても行います。

However you may instead just prefer Manual:Image administration#Alternative simple setupManual:Image administration#Alternative simple setup, where *.example.org/images/ just point to the same single directory. Or one could use e.g., *.example.org/$wgDBname/images/.

新たなウィキの追加

To add a wiki to a production Wiki family/ja

  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

古いウィキの削除

To remove a wiki from a production Wiki family/ja

  1. remove its configuration from
    1. ウェブ サーバー
    2. LocalSettings.php
  2. データベースを削除する

ウィキメディアが使っている方法

もう一つの方法はウィキメディア財団が使っている方法です。 方法の概略は以下の通りです。 この方法は気弱な方向けのものではありませんが、ウィキメディア財団が使って成功したことでも分かるようにかなりいい結果が得られます。

  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. これを template.sql のような名前でサーバの maintenance/ ディレクトリの下に保存します。
  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.

ウィキファームの拡張機能

MediaWiki の拡張機能には複数のウィキを単一のコードベースで簡便にホストするものがいくつかあります。


関連項目

脚注

  1. 「連番が割り振られた」フォルダに関係するこのスレッドを参照。
  2. Composerが使える状況でこれを使い一部または全ての拡張機能をインストールしている場合。