Manual:ウィキファミリー
MediaWikiを使って複数のウィキを立ち上げる方法について以下に記します。 同じサーバーにある複数のウィキをウィキファミリーまたはウィキファームと呼びます。既知のウィキファームの一覧は WikiApiary にあります。
原則
ウィキファミリーの最も一般的な設定では、単一バージョンのMediaWikiを実行します。このシナリオでは、以下に記す一般的な手順が必要です。
- まず通常の MediaWiki サイトをインストールし、そこからデータベースのテンプレートを作成します。中身は完全に空である(どのテーブルにもデータがない)状態でも、ウィキファミリー内のいずれかのウィキについて初期ページ、ユーザ、ウィキ間リンクなど何か情報が追加されていても構いません。
- 複数の場所に対する通信が一つのMediaWikiに向かうようサーバを設定します。これは複数のドメイン、サブドメイン、サブディレクトリにまたがっていても構いません。この設定はシンボリックリンク、エイリアス、URLのrewriteなどのしくみを使って行うことができます。
- LocalSettings.phpでウィキファミリーの設定を行います。設定は大きく分けて4つの部分で構成されています。
- まず第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に設定変数をそれぞれのウィキ識別子に「基づいて」決める。対象はこちら。
$wgDBname = 'mediawiki_'.$wikiId; $wgDBuser = 'mediawiki_'.$wikiId; $wgCacheDirectory = "/tmp/mediawiki_".$wikiId."_cache"; $wgUploadDirectory = "$IP/images_$wikiId"; $wgUploadPath = "/images_$wikiId";
- 第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に、LocalSettings.php の残りの部分で共通の要素を指定。対象は拡張機能や外装など。
- まず第1に、ウィキごとに識別するためのコード $_SERVER['SERVER_NAME'] あるいは $_SERVER['REQUEST_URI'] (または同様の記述) や
- 共有するリソースの設定もできます。対象はユーザー、セッション、メディア (アップロード先他) ウィキ間リンクなど。
- ウィキファミリーに新しいウィキをインストールするには、データベースの構築と、それをデータベース・テンプレートに読み込み、これら準備が整ったら
php maintenance/update.php --wiki=wikiId
を走らせます。アップグレードその他のメンテナンスも作業は同様です。
このページの後半で上記のパーツをそれぞれ詳しく説明 (もしくは[更新が必要]と表示) します。
ウィキごとに設定を切り替える設定方法
これにより、同じソースコードを使って、一つのサーバに複数のウィキをインストールできるようになります。
- MediaWikiファイルをウェブサーバのウェブフォルダにアップロードする。
- 通常通りウィキの初期設定を行う。 詳細は Manual:インストール ガイド を参照。
- うまくインストールできたら、LocalSettings.php をあなたのウィキのルートディレクトリに移動し、何のためのファイルなのか後でわかりやすい名前にファイル名を変更 (例: LocalSettings_myFirstWiki.php)
- 作成したいウィキの数だけ、上記の操作を2回、3回と繰り返し、各ウィキごとの新たな LocalSettings.php ファイルを作成 (例: LocalSettings_anotherWiki.php など)
- 2つ以上の別々にインストールしたウィキを統合、メインウィキのファイルから操作するには、各ウィキの LocalSettings.php ファイルのファイル名を変更してからメインウィキのフォルダに移動、各 LocalSettings.php ファイルを開いて $wgScriptPath 変数をメインウィキのフォルダを示す値に変更する。
- グローバルな設定用に 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 );
}
- ウィキのドメインが共通で、パスが異なる場合の設定 (例:
yourdomain.com/wiki1
、yourdomain.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 );
}
strpos( $callingurl, 'wiki1', 0 ) || strpos( $callingurl, 'w1/', 0 )
のソースにシンボリックリンク (w1 -> w
) を作成。$wgScriptPath
を適用。ウィキごとに異なるデータベースを使うことをお勧めします (そのために $wgDBname でウィキごとに異なる値を設定)。 もし使えるデータベースがひとつしかない場合には、ウィキごとに接頭辞 ($wgDBprefix ) を変えると、インストールを分離できます。
さらに便利な設定として、認識できない URL を呼び出したときに「このウィキは利用できません。設定を確認してください。」とエラーメッセージを表示する代わりに、単に「メイン」のURLにリダイレクトする方法があります。
コマンドラインからホスティングサービスのウィキを更新する
EXPORTを使う
この方法を用いる際、maintenance/update.php を実行するのに $_SERVER["SERVER_NAME"]
の値設定が必要となります。ただし、それが設定されていなくてもコマンドラインから設定することができます。
環境変数を設定することにより問題は回避できます。
export SERVER_NAME=foo.subdomain.org
php update.php
サブディレクトリを使って複数ウィキを設定していた場合、以下のようなコマンドを実行すればいいでしょう。
export REQUEST_URI="/wiki1"
php update.php
confパラメータを使う
もし同一ファミリー内の各ウィキに別個のLocalSettings.php
ファイルを使用しているなら、#Giant switch statementに述べたように、--conf
パラメータを当ててupdate.php
にどの設定ファイルを使用するか命じます。
例:
php update.php --conf ../LocalSettings_shoopz_com.php
Drupalスタイルのサイト
上記において、同じソースコードを使用して単独のサーバ上で複数のwikiをインストールしました。 この設定はユーザに対して完全に透明で、画像ディレクトリの観点からはかなり安全であるという点が有利です。
- すべてのMediaWikiを含むベースディレクトリを作成します。例えば
mkdir /home/web/mediawiki
です。
- バージョンを宣言するディレクトリにMediaWikiと追加ツールを通常通りにインストールする (例えば
/home/web/mediawiki/mediawiki-1.10.0
) - バージョン宣言のディレクトリをコードディレクトリにリンク。 例
ln -s /home/web/mediawiki/mediawiki-1.10.0 /home/web/mediawiki/code
- 画像と設定を含む「sites 」ディレクトリを作成:
mkdir /home/web/mediawiki/sites
- ウィキを通常の「/code」ディレクトリからセットアップ。
- インストール成功後に、LocalSettings.php をサイトチェック時に適合する /site ディレクトリに移動。 例: http://mysite.com/mywikiに対応するため、mysite.com.mywiki ディレクトリを作成。 例
mkdir /home/web/mediawiki/sites/mysite.com.mywiki
詳細は Drupal の settings.php ファイルを参照。 - メディアファイルを使用するなら、サイトのディレクトリに images ディレクトリを作成。 例
mkdir /home/web/mediawiki/sites/mysite.com.wiki/images
必要なら書き込み可能に設定。 - Drupal-style LocalSettings.phpファイルをメインディレクトリに設置:
cp DrupalLocalSettings.php /home/web/mediawiki/code/LocalSettings.php
- サブサイトごとに 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行) 呼び出しより以降にする。 - 必要に応じて他の調整をする。
- まず
- Apache 2 のインストールを準備。例: wiki.mysite.com
- 必要なら「code」ディレクトリにリンクを作成。例
ln -s /home/web/mediawiki/code /home/web/wiki.mysite.com
- 適切なVHost 構成を作成:
- 必要なら「code」ディレクトリにリンクを作成。例
<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とデータベースをインストールとアップデートするところから他のコードのコピーをしました。
注意点は、付随するDrupalコードに記入した$_SERVER['HTTP_HOST']
は、コマンドラインからメンテナンスのスクリプトを走らせた場合に定義されないため、この方式を採用すると、加工しない限り、標準のメンテナンスのスクリプトは使えません。
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]]) と衝突する可能性があるからです。
- ウィキメディアのメディア共用のためのウィキとして
インストール
ファイルシステム上において、それぞれのwikiのためにフォルダを作成してください。 各ウィキでインストール スクリプトを実行します。
この方法ではソース・コードが重複します。
この重複を取り除いてキャッシュパフォーマンスを改善するには、共通メディア用を除くそれぞれのウィキについて、以下の非 pool インストール用ディレクトリを pool ディレクトリのシンボリックリンクに置き換えます。bin
(≤ MW 1.20.x)、docs
、extensions
、includes
、languages
、maintenance
、math
(≤ MW 1.17.x)、resources
、serialized
[1]、skins
、tests
、vendor
(≥ MW 1.22.x[2])。
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';
LocalSettings.php
, regardless of web server settings. This is not a practical way to allow for deduplication of code by using symlinks.THIS WILL NOT WORK.
例をあげるなら
rm -R extensions/
の後に入力するのは次の通りです。
ln -s pathtopool/extensions/ extensions
httpd.conf
にFollowSymLinks
オプションを追加し、Apacheがシンボリックリンクをたどることができるようにしてください。cache
、mw-config
(config
≤ MW 1.16.x)、images
の各ディレクトリを置きかえてはいけません。Windows では以下のようなコマンドになります。
mklink /D pathtolink pathtotarget
設定
ウィキの設定
/wiki/../maintenance/runJobs.php --maxjobs 1
の表示が増えていきます。 必ず LocalSettings.php 1件ごとに以下の行を書き込みます。$wgJobRunRate = 0;
ウィキ間リンク
MySQL データベースを編集してすべてのウィキ間のウィキ間リンクを設定しなければなりません (お好みで Extension:Interwiki をインストールしてご使用ください)。
- 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]] 追加することで、「ドイツ語版」のメインページにリンクが作成されます。 詳細情報は Help:Interwiki linking を参照してください。
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 というメディアに統一できます。
画像の説明
それぞれの言語ウィキにおいて、(管理者として) MediaWiki:Sharedupload-desc-here メッセージを開きます。
次のようにテキストを変更します。
このファイルはここでのデータプールに保存されます。 ファイルの詳細と解説は次のページに記載されています。 [[: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を同時にリードオンリーモードに設定できるようにしたいとします。 またユーザ名/パスワードがデータベース (単体または複数) ですべて共通の場合なら、保存したいとします。 さらにまた、このファイルひとつを使って、複数のウィキのユーザパーミッションを一括コントロールできます。
データベース テーブルの共有
共有データベースの設定の手順は 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.
。)
アップグレードはdownload from Git(Gitからダウンロード)すると簡単です。
(ディスク上のウィキは1件だとご認識するcodeが残っていないとよいのですが...。)
画像
アップロードを許可していないか、または共用メディア用ウィキのみにアップロードを許可している場合、それぞれのウィキで画像ディレクトリを作成し、仮想ホスト設定でそのディレクトリを参照するようエイリアスの設定を行う必要があります。
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についても行います。
ただし、上記の代替策としてManual:画像の管理 を用いることもでき、その場合、*.example.org/images/ は単にディレクトリ1件しか対象にしません。 あるいはまた、例えば *.example.org/$wgDBname/images/ を採用できます。
新たなウィキの追加
作成したWiki family/jaにウィキを追加する方法。
- そのウィキの設定をユーザーのウェブサーバに追加。
- 一時的に
file_exists("../LocalSettings.php")
config/index.phpのチェックをコメントアウトしておき、走らせる - 生成したconfig/LocalSettings.phpをLocalSettings.phpに統合。
- 複数ページを追加
古いウィキの削除
ウィキをWiki family/ja生成から削除する
- 設定を削除する場所
- ウェブ サーバー
- LocalSettings.php
- データベースを削除する
ウィキメディアが使っている方法
もう一つの方法はウィキメディア財団が使っている方法です。 方法の概略は以下の通りです。 この方法は安定した方法ではありませんが、ウィキメディア財団が使って成功したことでも分かるようにかなりいい結果が得られます:-)
- オンライン設定ウィザードを使ってMediaWikiテンプレートのコピーを設定します。 ウィキファーム内のウィキごとに初期ページを設定したいなら、メインページを編集してください。
- 次に、mysqldump や phpMyAdmin を使ってウィキのデータベースをエクスポートします。 データベースの書き出しの方法は構成のみ(例:
mysqldump -uroot -p --no-data dbname > template.sql
)でも実行でき、その場合はcreateAndPromote.phpで第一の利用者を作成してください。 これをtemplate.sql
のような名前でサーバの maintenance/ ディレクトリの下に保存します。 - 次に、新しいウィキ作成用に短いスクリプトを何件か書きます。 かいつまんで言うなら、ウィキの一覧を作るためにデータベースを複製します。(一覧の基準はフラットファイルでもMySQL/SQLiteでも有効。)まず最初にテンプレートウィキを書き出し、次にテンプレートのデータベースのダンプを、それぞれのウィキの名前を付けたデータベースに読み込みます。 新しいデータベースの名称には標準の接尾辞(ウィキの名称がcat.example-farm.orgならデータベースはcatwikiと命名)。
- 設定ファイルにこれに似た処理を加え、必要に応じてデータベースの接尾辞とドメイン名を調整します。
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"; }
- DNS をワイルドカード A のデータで設定、apache にはサーバーの別名を設定 (例:
ServerAlias *.example-farm.org
)、これで動くはずです。
スクリプトのメンテナンスあるいはupdate.phpが取るパラメータ--wiki
は書き出すとMW_DB
定数になります。あなたのLocalSettings.phpファイルはそれを正しく$wgDBnameに設定する必要があります。(コマンドラインにHTTPリクエストはなく、「SERVER_NAME」もありません:
php maintenance/update.php --wiki catwiki
あなたの一意のLocalSettings.php(通常はサーバから直接アクセスできないCommonSettings.phpを含む数行)はウィキ固有の設定を初期化する$wgDBname変数です。使用法は Manual:$wgConf を参照してください。
合わせて、もしウィキごとに別ファイルにアップロードしたいなら、アップロードのディレクトリも調整が必要です。 上記のとおり、この方法は最も難しいかもしれませんし、技術的な経験値を求められますが、非常に見やすくクリーンなグラフを作ることができます。
ウィキファームの拡張機能
MediaWiki の拡張機能には複数のウィキを単一のコードベースで簡便にホストするものがいくつかあります。
- Extension:MediaWikiFarm - beta
関連項目
- システム構成データベース: コメント受付
- Extension:CentralAuth
- Manual:InitialiseSettings.php
- Manual:CommonSettings.php
- MediaWiki Farmers user group ならびに mail:Wikifarm (ウィキファミリー利用者グループとメーリングリスト)
- Manual:$wgConf
- Manual:中央管理 ID — ユーザーのアカウントに「中央管理」用の識別子を与えるメカニズム。
脚注
- ↑ 「連番が割り振られた」フォルダに関係するこのスレッドを参照。
- ↑ Composerが使える状況でこれを使い一部または全ての拡張機能をインストールしている場合。