Jump to content

手冊:Wiki農場

本頁使用了標題或全文手工轉換
From mediawiki.org
This page is a translated version of the page Manual:Wiki family and the translation is 92% complete.

A wiki family is a collection of two or more wikis that run on the same server and share a common set of resources from the parent installation, while each wiki remains otherwise independent. This setup is an alternative to running fully separate installations of MediaWiki. It may be the preferred choice if the site admin wants to reduce the amount of work involved in managing multiple wikis, or cut down on inode usage. For this reason, some wiki hosting services opt for the wiki family model.

The best known implementation of a wiki family is the wiki farm, although other approaches are possible. A list of known wiki farms is available on WikiApiary .

下面是設置MediaWiki的各個指示,說明如何寄存多個wiki

方法

維基農場

以下步驟是在相同版本的MediaWiki中執行多個wiki

  1. 正常安裝第一個wiki。 更多資料,請看手冊:安裝指南
  2. 啟用您的Web伺服器用來和所有wiki共用您的MediaWiki安裝。 For multiple (sub)domains, have your web server accept connections from all the relevant domains. 對於多個子目錄,你可以使用重寫規則、別名或符號連結。
  3. LocalSettings.php頂部添加如下代碼,解析當前wiki。 需要注意的是,如果--wiki的參數包含一個連字元,參數將在連字元處被拆分,得到的兩個值將分別賦值給MW_DBMW_PREFIX。 對於按域名分類的wiki:
    $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';
    
  4. 設置所有wiki必要的不同的設置。例如:
    $wgCacheDirectory = "/tmp/mediawiki_cache/$wgDBname";
    $wgUploadDirectory = "$IP/images/$wgDBname";
    $wgUploadPath = "/w/images/$wgDBname";
    
  5. 設置前一個維基的覆寫。 這應該包括至少$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' => ..,
        ..,
    ];
    

To add a new wiki to the family:

單獨的設置檔案

這種方法是用於操作完全獨立的wiki們,但仍共用相同的Web伺服器和MediaWiki原始碼。

  1. 像往常一樣,通過Web或CLI安裝程式安裝第一個wiki,這會設置您的資料庫並生成一個LocalSettings.php 檔案。
  2. 安裝後,重新命名生成的LocalSettings.php檔案以包含wiki ID(例如資料庫名稱),如LocalSettings_mywiki.php
  3. 對要建立的每個wiki重複上述步驟1和2。
  4. 建立一個新的LocalSettings.php檔案,該檔案將載入正確的檔案。 與上面的維基農場範例一樣,包含連字元的 --wiki 參數將被分割成兩個值,分別分配給 MW_DBMW_PREFIX
    <?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.' );
    }
    
    // 添加需要应用于此行以下所有wiki的所有设置
    // -------
    
    如果你的wiki在同一個域上,但路徑不同(例如:example.org/wiki1example.org/wiki2等),你可以這樣操作:
    <?php
    $wikis = [
        'example' => 'examplewiki',
        'w_example' => 'examplewiki',
        'one' => 'onewiki',
        'w_one' => 'onewiki',
    ];
    if ( defined( 'MW_DB' ) ) {
        // 自动从--wiki选项设置为维护脚本
        $wikiID = MW_DB;
    } else {
        $wikiID = $_SERVER['MW_DB'] ?? $wikis[ explode( '/', $_SERVER['REQUEST_URI'], 3 )[1] ] ?? null;
    }
    
    if ( $wikiID ) {
        require_once "LocalSettings_$wikiID.php";
    } else {
        die( 'Unknown wiki.' );
    }
    
如果您使用短 URL,您需要同時添加$wgArticlePath$wgScriptPath

Drupal樣式的網站

這種設置的優點是對用戶完全透明,圖像目錄也相當安全。

  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到網站目錄中,在檢查網站時就會匹配。 例如,要擷取http://example.com/mywiki,可以建立目錄example.com.mywiki範例: mkdir /home/web/mediawiki/sites/example.com.mywiki 有關詳細資訊,請參閱Drupal的settings.php檔案。
  7. 如果打算使用媒體檔案,請在網站目錄中建立一個images目錄。 範例:mkdir /home/web/mediawiki/sites/example.com.wiki/images 根據需要使其可寫。
  8. Drupal樣式 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. 接下來插入以下兩行,以確保可以訪問圖檔,"'範例'":$wgUploadDirectory = "/home/web/mediawiki/sites/wiki.example.com/images";$wgUploadPath = "/images";。 這些變數需要放在呼叫 DefaultSettings.php 後(1.15.3中的第25行),否則將被重設。
    3. 根據需要進一步修改。
  10. 準備 Apache 2 安裝。網站範例: wiki.example.com
    1. 如果需要,建立指向code目錄的連結 範例ln -s /home/web/mediawiki/code /home/web/wiki.example.com
    2. 建立適當的虛擬主機組態:
      <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 "我的受保护的维基"
          #    AuthUserFile /etc/apache2/htpasswd/users-mywiki
          #   require valid-user
          #  </Directory>
      </VirtualHost>
      
11. 如果在本地設置網站,請用網站名稱更新 hosts 檔案。 現在網站應該可以正常執行了。

就我而言,我製作了另一份代碼副本,用於安裝和更新我的LocalSettings.php和資料庫。 注意從命令列執行維護指令碼時,配套 Drupal 代碼中的 $_SERVER['HTTP_HOST'] 未定義,因此此解決方案不能夠在不做修改的情況下使用維護指令碼。

Ubuntu 的 Drupal 樣式設置方法

在 Ubuntu/Kubuntu 上使用多個維基和多個(或巢狀的)子維基的簡化方法,大致基於上述方法,可在以下網址找到:

維護指令碼如何處理wiki農場

MediaWiki維護指令碼(例如update.php)接受一個--wiki參數,該參數將作為常數MW_DBMW_PREFIX、和MW_WIKI_NAME傳遞給你的LocalSettings.php 檔案。 --wiki參數的全部值是MW_WIKI_NAME的值。

如果--wiki參數中有一個破折號,那麼破折號之前的部分被分配給MW_DB,破折號之後的部分被分配給MW_PREFIX

本表展示了這如何工作:

--wiki的參數是如何被解析的。
--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

由於網絡請求沒有--wiki參數,因此必須以不同的方式處理。 通常情況下,域名和/或URL路徑被用來選擇一個wiki。

維基之間共用的技巧

您可以使用$wgForeignFileRepos 在維基中共用上載的媒體檔案。這與維基百科的維基共享資源類似。

例如:

  • en.example.org - 英語
  • fr.example.org - 法語
  • de.example.org - 德語
  • pool.example.org - 所有wiki的共用媒體檔案。
上面的範例使用名稱「pool」。避免使用名稱「commons」,因為這可能與跨維基連結衝突,也稱為commons表示維基共享資源。 還要避免使用名稱「media」(例如media.example.org),因為這可能會導致您的跨維基與用於訪問本地媒體檔案的內部命名空間Media:(例如[[media:File.png]])之間的衝突。

共用數據表

請考慮對用戶帳戶使用共用資料庫。 有關設置共用資料庫表的說明,請參閱 手冊:共用資料庫

跨Wiki

您可以使用Extension:Interwiki 在所有wiki之間建立跨維基連結。 如果wiki是語言編輯版本,建議在確切的語言代碼之後命名跨維基前綴。例如,「de」代表您農場中的德語wiki。 這樣,您可以使用語言連結連接有關同一主題的頁面。

在英文「首頁」上添加[[de:Hauptseite]]將在語言側邊欄中建立一個連結「Deutsch」。 更多資訊請參見Help:Interwiki linking

如果你有一個用於檔案的中央wiki,也要為此建立一個前綴。 例如,pool 到 https://pool.example.org/wiki/$1,並啟用「轉發」核取方塊以將其辨識為同一系列中的本地 wiki。

上載

首先確認 pool-wiki 資料夾的「images」權限是可寫的。

將language-wikis的"Upload file"連結更改為指向 poolwiki 的上載站點很重要。 打開每種語言維基的「LocalSettings.php」,然後添加:

$wgUploadNavigationUrl = "https://pool.example.org/index.php/Special:Upload";

在1.17中,您還必須設置$wgUploadMissingFileUrl才能重新導向到紅色連結上的pool-wiki。

$wgUploadMissingFileUrl= "https://pool.example.org/index.php/Special:Upload";

如果想要只允許pool wiki上載,使用以下內容:

if ( $wgDBname === 'pool' ) {
	$wgEnableUploads = true;
} else {
	$wgEnableUploads = false;
}

共用檔案

要在語言維基中使用poolwiki的檔案,請為每個語言wiki打開「LocalSettings.php」並添加:

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

現在,您可以將池的檔案與語言維基中的檔案(例如[[File:MyLogo.png]])整合。

圖像描述

在每個languagewiki中打開(以管理員身份)訊息 MediaWiki:Sharedupload-desc-here

將文字更改為:

该文件存储在数据池中(data-pool)。
有关信息和说明,请访问[[: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:";

wiki農場擴充功能

有幾個 MediaWiki 擴充試圖通過僅使用一個代碼庫來簡化多個 wiki 的寄存,但目前只有一個值得參考:

其它說明