Manual:ウィキファミリー

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

Other languages:
Deutsch • ‎English • ‎español • ‎français • ‎日本語 • ‎한국어 • ‎polski • ‎русский • ‎中文

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

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

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

  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にリダイレクトするのもいいかもしれません。

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

EXPORTを使う[edit source]

この方法を用いる際、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パラメータを使う[edit source]

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スタイルのサイト[edit source]

上記において、同じソースコードを使用して単独のサーバ上で複数の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ディレクトリからwikiをセットアップします。
  • インストール成功後に、LocalSettings.phpをサイトがチェックされときにマッチするsitesディレクトリに移動させます。 例えば、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です。 必要なら書き込み可能にしてください。
  • Manual:Wiki family/Drupal-style LocalSettings.phpファイルをメインディレクトリに設置してください: cp DrupalLocalSettings.php /home/web/mediawiki/code/LocalSettings.php
  • LocalSettings.php を正しい位置を指定するように修正してください。次の修正は特別な注意を払うのに値します:
    • First comment out the code relating to $IP, (lines 16-20 in 1.15.3) as this is set to the code directory by index.php.
    • Next insert the following two lines to ensure that image files are accessible, e.g.: $wgUploadDirectory = "/home/web/mediawiki/sites/wiki.mysite.com/images"; and $wgUploadPath = "/images";. These need to be put somewhere after the call to DefaultSettings.php (line 25 in 1.15.3), as the variables will otherwise be reset.
    • Make further modifications as required.
  • Apache 2のインストールを準備してください。例のサイトです: wiki.mysite.com
    • Create a link to the code directory, if required e.g. 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>
  • If you are setting the sites up locally, update your hosts file with the site names.

これでサイトは動作します。 私の場合、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.

Modified Drupal-style method for Ubuntu[edit source]

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:


共通のリソースを共有する複数のwiki[edit source]

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

例:

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

インストールInstallation[edit source]

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

この方法では複数のディレクトリに Mediawiki をインストールするため ソース・コード が重複します。 この重複を取り除いてパフォーマンスを改善するには、 共通メディア用を除くそれぞれのウィキについて以下のディレクトリをメディア用ウィキからのシンボリックリンクに置き換えてください。: bin(≤ MW 1.20.x)、docsextensionsincludeslanguagesmaintenancemath(≤ MW 1.17.x)、resources, serialized[1]skins, testsvendor(≥ 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

設定[edit source]

ウィキの設定[edit source]

注 注: 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;

インターウィキ[edit source]

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

  • Interwikiテーブル
    • iw_prefix - wikiの言語コードを入力します。ドイツ語は"de"、英語は"en"、"fr"はフランス語、mediapoolwikiは"pool"
    • iw_url - wikiへの完全なURLのための場所です。例えば"http://de.yourwiki.org/index.php/$1"はドイツ語のwikiのためです("$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).

これで他の言語にある同じ記事にリンクすることが出来ます。 [[de:Hauptseite]]を英語のMain_Pageに追加することで、ドイツ語のHauptseiteのページにリンクが作成されます。さらに詳細な情報についてはHelp:Interwiki linking/jaをご覧ください。 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'.

アップロード[edit source]

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

各言語ウィキの「アップロードファイル」リンクがpoolwikiのアップロードサイトを指し示すよう設定を変更しておくと便利です。 それぞれの言語のwikiの"LocalSettings.php"を開き、以下のコードを追加します:

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

共有ファイルを使用する[edit source]

言語wikiでpoolwikiのファイルを使用するために、それぞれのwikiの"LocalSettings.php"を開き、以下の行を追加してください:

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

これで多言語間のwikiで [[Image:MyLogo.png]] によってpoolのファイルを統合できます。

画像の説明[edit source]

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

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

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

PoolWikiで保存されたメディアの説明を出力したい場合、それぞれの言語wikiの"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:";

共有設定[edit source]

複数のwikiを所有している場合、おそらくそれらをまたがる同じような設定を共有したいでしょう。 それは次のようにします。 下記で説明するように、他の設定よりも拡張機能の設定を他のファイルに分離することをお勧めします。 それらに一つの大きなファイルを置くことが出来ますが、特定のニーズに依存していて柔軟性がありません。

ディレクトリ構造の例です:

en/
es/
pl/
ja/
pool/
ExtensionSettings.php
WikiFamilySettings.php
SharedMediaSettings.php
拡張機能の設定[edit source]

ステップ 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 共有設定を使用したいそれぞれのwikiのLocalSettings.phpファイルを編集し次の内容を追加します

require_once "/absolute/path/to/ExtensionSettings.php";

ステップ 3 様々な拡張機能へのすべての参照を追加してください

Wikiファミリー設定[edit source]

wikiファミリー全体に適用したい設定があるとします。 例えば、すべてのwikiを同時にリードオンリーモードに設定できるようにしたいとします。 またデータベース(単体または複数)のためにユーザ名/パスワード(すべて同じ)も保存したいとします。 また、一つのファイルからwiki全体をまたがってユーザパーミッションをコントロールすることが出来ます。

ノート: Images/Media commonsまたはpoolを使用する場合、WikiFamilySettings.phpファイルでこれらの設定を適用しないことを推奨します。 この情報はリポジトリよりもwikiファミリーですべてのwikiに適用することのみに当てはまります。 それを個別のファイルに設定することをお勧めします。

Shared database tables[edit source]

See Manual:Shared database for instructions on setting up shared database tables.

究極の最小解決方法[edit source]

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

$ 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
}

Note we still individually do database related tasks, e.g., php update.php. (The above code should detect which wiki's update.php you are referring to.) Upgrading is simple if you download from Git. (Hopefully there is no more code that assumes there is only one wiki on the disk...)

画像[edit source]

アップロードを許可していないか、または共用メディア用ウィキのみにアップロードを許可している場合、それぞれのウィキで画像ディレクトリを作成し、仮想ホスト設定でそのディレクトリを参照するようエイリアスの設定を行う必要があります。 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/.

新たなウィキの追加[edit source]

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

古いウィキの削除[edit source]

To remove a wiki from a production Wiki family/ja

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

ウィキメディアが使っている方法[edit source]

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

  1. オンライン設定ウィザードを使ってMediaWikiテンプレートのコピーを設定します。 ウィキファーム内のウィキごとに初期ページを設定したいなら、メインページを編集してください。
  2. 次に、mysqldump や phpMyAdmin を使ってウィキのデータベースをエクスポートします。 これを 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.

Wiki Farm Extensions[edit source]

There are several MediaWiki extensions that attempt to simplify hosting of several wikis by using just one code base:


関連項目[edit source]

参考[edit source]

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