Manual:ウィキファミリー
以下は、複数のウィキを立ち上げるためにMediaWikiをセットアップする方法の説明です。
同じサーバーにある複数のウィキをウィキファミリーまたはウィキファームと呼びます。既知のウィキファームの一覧はWikiApiary にあります。
How wiki farms are handled in maintenance scripts
MediaWiki maintenance scripts (e.g. update.php) accept a --wiki
argument that is passed to your LocalSettings.php file as the constants MW_DB
, MW_PREFIX
, and MW_WIKI_NAME
.
The entire value of the --wiki
argument is the value of MW_WIKI_NAME
.
--wiki
argument, then the part before the dash is assigned to MW_DB
and the part after the dash is assigned to MW_PREFIX
.This table demonstrates how this works:
--wiki |
MW_WIKI_NAME |
MW_DB |
MW_PREFIX
|
---|---|---|---|
enwiki | enwiki | enwiki | empty |
enwiki-one | enwiki-one | enwiki | one |
enwiki-one-two | enwiki-one-two | enwiki | one-two |
Since there is no --wiki
argument for web requests, they must be handled differently.
Typically, the domain name and/or URL path is used to select a wiki.
手法
ウィキファーム
以下の手順は、同じバージョンのMediaWikiで複数のウィキを動作させるためのものです。
- 最初のウィキを通常通りインストールします。 詳細はManual:インストール ガイド を参照してください。
- MediaWikiのインストールをすべてのwikiと共有するために、ウェブサーバを有効にします。複数の(サブ)ドメインの場合、複数のサーバ名でlistenを使用することができます。複数のサブディレクトリの場合、書き換えルール、エイリアス、またはシンボリックリンクを使用することができます。
- 現在のウィキを検出するためのコードを
LocalSettings.php
の先頭に追加する。 Note that if the argument to--wiki
contains a hyphen, the argument will be split on the hyphen and the resulting two values assigned toMW_DB
andMW_PREFIX
, respectively. ドメイン名によるウィキの場合:$wikis = [ 'example.org' => 'examplewiki', 'one.example.org' => 'onewiki', ]; if ( defined( 'MW_DB' ) ) { // メンテナンススクリプトに--wikiオプションから自動的に設定されます。 $wikiID = MW_DB; } else { // 環境変数MW_DBを使うか、ドメイン名をマッピングする $wikiID = $_SERVER['MW_DB'] ?? $wikis[ $_SERVER['SERVER_NAME'] ?? '' ] ?? null; if ( !$wikiID ) { die( 'Unknown wiki.' ); } } $wgLocalDatabases = $wgConf->wikis = array_values( $wikis ); $wgDBname = $wikiID; $wgDBuser = 'mediawiki';
- すべてのウィキで異なる必要がある設定を行う例:
$wgCacheDirectory = "/tmp/mediawiki_cache/$wgDBname"; $wgUploadDirectory = "$IP/images/$wgDBname"; $wgUploadPath = "/w/images/$wgDBname";
- ウィキごとのオーバーライドを設定する。これは少なくとも
$wgServer
と$wgArticlePath
を含むべきです。これは、例えば別のファイルから行うことができます:$wgConf->settings = [ 'wgServer' => [ 'examplewiki' => 'https://example.org', 'onewiki' => 'https://one.example.org', ], 'wgArticlePath' => [ 'default' => '/wiki', ], 'wgSitename' => [ 'default' => 'Example', 'onewiki' => 'One', ], 'wgLogo' => [ 'default' => '/images/examplewiki/Example_logo.png', ], 'wgLanguageCode' => [ 'default' => 'en', 'onewiki' => 'pt', ], ]; extract( $wgConf->getAll( $wgDBname ) );
# LocalSettings.php $wgConf->settings = require __DIR__ . '/LocalSettings_overrides.php'; # LocalSettings_overrides.php <?php return [ 'wgServer' => .., .., ];
新しいウィキを作成するには、まずそのデータベースを作成し、設定を追加してから、php maintenance/update.php --wiki=mywiki
を実行します。
設定ファイルの分割
この方法は、完全に独立したWikiを運用しながらも、同じウェブサーバーとMediaWikiのソースコードを共有するためのものです。
- 最初のウィキを通常通り、ウェブもしくはCLIインストーラ経由でインストールします。データベースをセットアップして、LocalSettings.php ファイルを生成します。
- インストール後、生成された
LocalSettings.php
ファイルの名前をLocalSettings_mywiki.php
のようにウィキID(データベース名など)を含むように変更します。 - 作成したいウィキごとに、上記のステップ1と2を繰り返します。
- 正しいファイルを読み込む
LocalSettings.php
ファイルを新規に作成します。 As with the above wiki farm example, a--wiki
argument containing a hyphen will be split on the hyphen into two values assigned toMW_DB
andMW_PREFIX
, respectively.
<?php
$wikis = [
'example.org' => 'examplewiki',
'one.example.org' => 'onewiki',
];
if ( defined( 'MW_DB' ) ) {
// メンテナンススクリプトに--wikiオプションから自動的に設定されます。
$wikiID = MW_DB;
} else {
// 環境変数MW_DBを使うか、ドメイン名をマッピングする
$wikiID = $_SERVER['MW_DB'] ?? $wikis[ $_SERVER['SERVER_NAME'] ?? '' ] ?? null;
}
if ( $wikiID ) {
require_once "LocalSettings_$wikiID.php";
} else {
die( 'Unknown wiki.' );
}
// この行の下に、すべてのウィキに適用されるべき設定を追加します。
// -------
もしウィキが同じドメインにありながら、異なるパス(例:example.org/wiki1
、example.org/wiki2
など)にある場合は、次のような使い方ができます。
<?php
$wikis = [
'/example' => 'examplewiki',
'/w_example' => 'examplewiki',
'/one' => 'onewiki',
'/w_one' => 'onewiki',
];
if ( defined( 'MW_DB' ) ) {
// メンテナンススクリプトに--wikiオプションから自動的に設定されます。
$wikiID = MW_DB;
} else {
$path = explode( '/', $_SERVER['REQUEST_URI'] ?? '', 3 )[1] ?? '';
$wikiID = $_SERVER['MW_DB'] ?? $wikis[ $path ] ?? null;
}
if ( $wikiID ) {
require_once "LocalSettings_$wikiID.php";
} else {
die( 'Unknown wiki.' );
}
Drupalスタイルのサイト
このセットアップは、利用者に対して完全に透過的であり、画像ディレクトリの点でもそれなりに安全であるという利点があります。
- すべての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://example.com/mywikiをキャプチャするために、example.com.mywikiというディレクトリを作成する。 例mkdir /home/web/mediawiki/sites/example.com.mywiki
これについては、Drupalのsettings.php
ファイルを参照してください。 - メディアファイルを使用する場合は、サイトディレクトリにimagesディレクトリを作成してください。 例
mkdir /home/web/mediawiki/sites/example.com.wiki/images
必要に応じて書き込み可能に設定。 - Drupal スタイルの
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.example.com/images";
と$wgUploadPath = "/images";
変数のリセットを防ぐため、2行の挿入位置はDefaultSettings.php
(1.15.3の25行目)呼び出しより以降にする。 - 必要に応じて、さらに修正を加えてください。
- まず、
- Apache 2のインストールを準備します。サンプルサイト: wiki.example.com
- 必要であれば、codeディレクトリへのリンクを作成。例
ln -s /home/web/mediawiki/code /home/web/wiki.example.com
- 適切なVHost構成を作成:
- 必要であれば、codeディレクトリへのリンクを作成。例
<VirtualHost *:80>
ServerAdmin me@example.com
DocumentRoot /home/web/wiki.example.com
ServerName wiki.example.com
CustomLog /var/log/apache2/wiki.mysite.log common
# アクセス可能なサイトのエイリアス
Alias /mediawiki/code /home/web/mediawiki/code
# ウィキのエイリアスで画像が使えるようにする
Alias /images /home/web/mediawiki/sites/wiki.example.com/images
# パスワードで保護したい場合
# <Directory /home/web/wiki.example.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で複数のウィキと複数の(あるいはネストした)サブウィキを作成するための簡略な方法は、上記の方法と基本同じであり、以下のサイトに掲載されています。
ウィキ間の共有のコツ
アップロードされたメディアファイルをウィキ間で共有するために$wgForeignFileRepos
を利用することができます。これは、ウィキペディアのためのウィキメディアコモンズに似ています。
例:
- en.example.org - 英語
- fr.example.org - フランス語
- de.example.org - ドイツ語
- pool.example.org - すべてのウィキで共有されるメディアファイル。
commons
という名前のウィキ間リンクと競合する可能性があるため、「commons」という名前の使用は避けてください。
また、"media"という名前(例:media.example.org)は、インターウィキとローカルメディアファイル(例:[[media:File.png]])にアクセスするための内部名前空間Media:
との間で衝突を引き起こす可能性があるため、使用しないようにしてください。
データベーステーブルの共有
利用者アカウントに共有データベースを使用することを検討してください。 共有データベーステーブルの設定方法については、Manual:共有データベース を参照してください。
インターウィキ
Extension:Interwiki を利用することで、すべてのウィキ間でウィキ間リンクを作成することができます。 ウィキが言語版である場合、インターウィキの接頭辞に正確な言語コードの名前を付けることをお勧めします。例えば、あなたの家族のドイツ語版ウィキには"de"とします。 こうすることで、同じテーマに関するページを言語リンクでつなげることができます。
英語版のメインページに[[de:Hauptseite]] を追加すると、言語サイドバーに「ドイツ語版」というリンクが作成されます。 詳細情報は Help:Interwiki linking を参照してください。
ファイル用のセントラルウィキがある場合は、それ用のプレフィックスも作成してください。
例:pool
→https://pool.example.org/wiki/$1、「転送」チェックボックスを有効にすると、同系列のローカルウィキとして認識されます。
アップロード
pool-wikiの「images」フォルダが書き込み可能であることを確認します。
言語版ウィキの「ファイルのアップロード」リンクを、poolwikiのアップロードサイトに変更するのが便利です。 各言語版ウィキのLocalSettings.phpを開き、以下のコードを追加。
$wgUploadNavigationUrl = "https://pool.example.org/index.php/Special:Upload";
1.17では、赤リンクでpool-wikiにリダイレクトされるように$wgUploadMissingFileUrl
も設定する必要があります。
$wgUploadMissingFileUrl= "https://pool.example.org/index.php/Special:Upload";
プールウィキにのみアップロードを許可したい場合は、以下のような使い方をします。
if ( $wgDBname === 'pool' ) {
$wgEnableUploads = true;
} else {
$wgEnableUploads = false;
}
共有ファイルを利用
言語版ウィキで poolwiki のファイルを使用するには、それぞれの言語版ウィキの「LocalSettings.php」を開き、以下の行を追加します。
$wgUseSharedUploads = true;
$wgSharedUploadPath = 'https://pool.example.org/images';
$wgSharedUploadDirectory = '/(LOCALPATH)/POOL-FOLDER/images/';
$wgHashedSharedUploadDirectory = true;
これで多言語ウィキにおいて pool ディレクトリから複数のファイルを呼び出そうとした時、例えば [[File:MyLogo.png]] というメディアに統一できます。
画像の説明
各言語版ウィキで、メッセージMediaWiki:Sharedupload-desc-hereを(管理者として)開いてください。
次のようにテキストを変更します。
このファイルはここでのデータプールに保存されます。 情報と説明については、[[:pool:File:{{PAGENAME}}|こちらの説明]]を参照してください。
(ここで英文の先頭の「:」に注目。これを書くとページ左側のウィキ間リンクの一覧で「pool」を読み込まなくなります。)
共有ディレクトリの poolwiki に保存したメディアの説明文を出力したい場合、それぞれの言語版ウィキの「LocalSettings.php」に以下のコードを追加します:
$wgFetchCommonsDescriptions = true;
$wgSharedUploadDBname = 'pool'; # DB-Name of PoolWiki
$wgSharedUploadDBprefix = 'wiki_'; # Table name prefix for PoolWiki
$wgRepositoryBaseUrl = "https://pool.example.org/index.php/Image:";
ウィキファームの拡張機能
1つのコードベースを使って複数のWikiのホスティングを簡素化しようとするMediaWikiの拡張機能がいくつかありますが、現在注目すべきは1つだけです。
- Extension:MediaWikiFarm - beta.
- Extension:SkinCustomiser : サイドバー の地域化の問題と、外装のカスタマイズ (以下のファイルそれぞれについて
MediaWiki:Cologneblue.css
,MediaWiki:Modern.css
,MediaWiki:Monobook.css
,MediaWiki:Vector.css
,MediaWiki:Mobile.css
,MediaWiki:Common.css
)
関連項目
- Manual:$wgConf
- Manual:中央管理 ID — 利用者アカウントに「中央管理」用の識別子を与えるメカニズム。