Manual:ウィキファミリー

This page is a translated version of the page Manual:Wiki family and the translation is 98% complete.
Outdated translations are marked like this.

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

基本原則

ウィキファミリーの最も一般的な構成では、全てのウィキを単一のMediaWiki で実行します。このシナリオでは、以下の手順が必要になります:

  1. 通常の MediaWiki サイトをインストールし、そこからデータベースのテンプレートを作成します。このデータベースは、中身が完全に空(どのテーブルにもデータがない)であっても、ウィキファミリーの任意のメンバーウィキ用のデータ (何らかの初期ページや利用者、インターウィキリンク等々) があっても、どちらでも構いません。
  2. Web サーバを、複数の場所に対する通信が 1 つの MediaWiki に向かうように設定します。この設定は、複数ドメイン、サブドメイン、サブディレクトリに対して、シンボリックリンク、エイリアス、URL rewrite その他の機能を使用して行います。
  3. LocalSettings.php でウィキファミリーの設定を行います。この LocalSettings.php は大別して 4 つの部分で構成されます。
    1. まず最初に、$_SERVER['SERVER_NAME']$_SERVER['REQUEST_URI'] 等々の変数と MW_DB 定数 (環境変数) を使用して、各ウィキを識別します (例: 変数 $wikiId にウィキ識別子を格納する)。$_SERVER['SERVER_NAME']$_SERVER['REQUEST_URI'] は Web リクエスト用、MW_DB はメンンテナンススクリプト用です (メンテナンススクリプトにおいてこの定数は --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 の残りの部分で、全てのウィキで共通する要素を設定します (例: 拡張機能、外装、等々)。
  4. 共用リソースの設定も可能です。利用者、セッション、メディア (アップロード等)、インターウィキリンク、等々が共用できます。
  5. ウィキファミリーに新しいウィキをインストールする手順は、データベースを新規作成し、データベーステンプレートをインポートして、php maintenance/update.php --wiki=wikiId を実行するだけです。アップグレードやその他のメンテナンス作業も同様です。

上記の各手順について、以下に詳述 (または [更新が必要] と表記) します。 You may want to also configure a shared database.

巨大 switch 構文

この手法により 1 つのサーバーに、同じソースコードチェックアウトを使用するウィキを複数インストールできます。

  1. MediaWiki ファイルをウェブサーバの web フォルダにアップロードします。
  2. 最初のウィキを通常通り構築します。 詳細は Manual:インストール ガイド を参照してください。
  3. インストールに成功したら LocalSettings.php をウィキのルートディレクトリに移動し、何らかの規則に基く識別しやすい名前に ファイル名を変更 します (例: LocalSettings_myFirstWiki.php)。
  4. 上記の 手順 2 および 手順 3 を作成するウィキの数だけ繰り返して、各ウィキ用の LocalSettings.php を作成します (例: LocalSettings_anotherWiki.php 等々)。
  5. 別個にインストールされた複数のウィキがメインウィキのファイルを使用して動作するように統合され、そして各 LocalSettings.php ファイルのファイル名を変更してメインウィキフォルダに移動し終えたら、各 LocalSettings.php の変数 $ScriptPath をメインウィキのフォルダを指すように変更します。
  6. グローバル設定用の LocalSettings.php ファイルを 1 つ作成します。次に以下のどちらかの設定を行います:
  • 複数のドメイン (またはサブドメイン) を持ち、それらがサーバの同じディレクトリにリンクする場合は、以下の通り:
<?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 );
        }
複数のドメインが 1 つの MediaWiki コードを指すようにするには、ウェブサーバの (多分 DNS も) 設定変更が必要です。 その方法については、利用するウェブサーバまたはウェブホストのマニュアルを参照してください。
  • ウィキのドメインが 1 つで、パスが異なる場合 (例: 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 に適用します。

ウィキ毎に異なるデータベースを使用することを推奨します (各ウィキで異なる $wgDBname を設定します)。 データベースが 1 つしか使えない環境であれば、異なる接頭辞 ($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 パラメータを使用する

巨大 switch 構文 で示したような、ウィキファミリーの各ウィキ用に個別の LocalSettings.php を使用する場合は、--conf パラメータにより update.php に使用する設定ファイルを指示できます。 例えば:

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. ウィキを通常の「/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 の位置を修正。次の修正には特に注意:
    1. まず $IP 関連のコードをコメントアウト (1.15.3 では16-20行) 、index.php で「code」ディレクトリに指定されるのを回避。
    2. 続いて以下の2行を挿入、画像ファイルへのアクセスを設定。: $wgUploadDirectory = "/home/web/mediawiki/sites/wiki.mysite.com/images";$wgUploadPath = "/images"; 変数のリセットを防ぐため、2行の挿入位置は DefaultSettings.php (1.15.3 では25行) 呼び出しより以降にする。
    3. 必要に応じて他の調整をする。
  10. Apache 2 のインストールを準備。例: wiki.mysite.com
    1. 必要なら「code」ディレクトリにリンクを作成。 ln -s /home/web/mediawiki/code /home/web/wiki.mysite.com
    2. 適切な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とデータベースをインストールとアップデートするところから他のコードのコピーをしました。 注意点は、付随する Drupal コードに記入した $_SERVER['HTTP_HOST'] は、コマンドラインからメンテナンスのスクリプトを走らせた場合に定義されないため、この方式を採用すると、加工しない限り、標準のメンテナンスのスクリプトは使えません。

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

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

共通リソースを共有した並列ウィキ

言語毎に複数のウィキを用意し、さらに別に 1 つウィキを用意してここでメディアファイルを共有するのは、よい方法です。

例えば:

  • en.yourwiki.org - 英語
  • fr.yourwiki.org - フランス語
  • de.yourwiki.org - ドイツ語
  • pool.yourwiki.org - これら全てのウィキ用のメディアファイル(コモンズと同様)
    • commons という Interwikilink 名は Wikimedia Commons 用に使用済みなので、ここではメディアファイルウィキ名として "pool" を使用します。
    • 慎重に検討した後に創造力を発揮しましょう; 例えばメディアファイルウィキ名として "media" 等を使用すると (例: media.example.com)、内部名前空間、およびメディアファイルを埋め込み記述する際の記法 ([[media:file.ext]]) と競合します。

インストール

ターゲット環境のファイルシステム上に、各ウィキ毎に 1 つ、フォルダを新規作成します。 次に、各ウィキでインストールスクリプトを実行します。

この方法では、ソースコードが重複してしまいます。 この重複部分を取り除きキャッシュ性能を向上するには、各言語用ウィキのインストールディレクトリの bin(≤ MW 1.20.x)、docsextensionsincludeslanguagesmaintenancemath(≤ MW 1.17.x)、resourcesserialized[1]skinstestsvendor(≥ MW 1.22.x[2])ディレクトリを、pool 用ウィキの当該ディレクトリへのシンボリックリンクで置換するとよいでしょう。

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.

THIS WILL NOT WORK.

例えば、

rm -R extensions/

と入力し、次に

ln -s pathtopool/extensions/ extensions

と入力します。

忘れずに httpd.conf を編集して FollowSymLinks オプションを追加し、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 データベースを編集してすべてのウィキ間のウィキ間リンクを設定しなければなりません (お好みで 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を同時にリードオンリーモードに設定できるようにしたいとします。 またユーザ名/パスワードがデータベース (単体または複数) ですべて共通の場合なら、保存したいとします。 さらにまた、このファイルひとつを使って、複数のウィキのユーザパーミッションを一括コントロールできます。

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

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

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

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' ) ) { 
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にウィキを追加する方法。

  1. そのウィキの設定をユーザーのウェブサーバに追加。
  2. 一時的にfile_exists("../LocalSettings.php")config/index.phpのチェックをコメントアウトしておき、走らせる
  3. 生成したconfig/LocalSettings.phpをLocalSettings.phpに統合。
  4. 複数ページを追加

古いウィキの削除

ウィキをWiki family/ja生成から削除する

  1. 設定を削除する場所
    1. ウェブ サーバー
    2. LocalSettings.php
  2. データベースを削除する

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

もう一つの方法はウィキメディア財団が使っている方法です。 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. 方法の概略は以下の通りです。 この方法は安定した方法ではありませんが、ウィキメディア財団が使って成功したことでも分かるようにかなりいい結果が得られます:-)

  1. オンライン設定ウィザードを使ってMediaWikiテンプレートのコピーを設定します。 ウィキファーム内のウィキごとに初期ページを設定したいなら、メインページを編集してください。
  2. 次に、mysqldump や phpMyAdmin を使ってウィキのデータベースをエクスポートします。 データベースの書き出しの方法は構成のみ(例:mysqldump -uroot -p --no-data dbname > template.sql)でも実行でき、その場合はcreateAndPromote.phpで第一の利用者を作成してください。 これを template.sql のような名前でサーバの maintenance/ ディレクトリの下に保存します。
  3. 次に、新しいウィキ作成用に短いスクリプトを何件か書きます。 かいつまんで言うなら、ウィキの一覧を作るためにデータベースを複製します。(一覧の基準はフラットファイルでもMySQL/SQLiteでも有効。)まず最初にテンプレートウィキを書き出し、次にテンプレートのデータベースのダンプを、それぞれのウィキの名前を付けたデータベースに読み込みます。 新しいデータベースの名称には標準の接尾辞(ウィキの名称がcat.example-farm.orgならデータベースはcatwikiと命名)。
  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 をワイルドカード A のデータで設定、apache にはサーバーの別名を設定 (例: ServerAlias *.example-farm.org)、これで動くはずです。

スクリプトのメンテナンスあるいはupdate.phpが取るパラメータ--wikiは書き出すとMW_DB定数になります。あなたのLocalSettings.phpファイルはそれを正しく$wgDBnameに設定する必要があります。(コマンドラインにHTTPリクエストはなく、「SERVER_NAME」もありません: For instance:

php maintenance/update.php --wiki catwiki

あなたの一意のLocalSettings.php(通常はサーバから直接アクセスできないCommonSettings.phpを含む数行)はウィキ固有の設定を初期化する$wgDBname変数です。使用法は Manual:$wgConf を参照してください。

合わせて、もしウィキごとに別ファイルにアップロードしたいなら、アップロードのディレクトリも調整が必要です。 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.

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

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

関連項目

脚注

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