Руководство:Семьи вики/ru

This page is a translated version of the page Manual:Wiki family and the translation is 100% complete.

«Семейство вики» — это совокупность двух или более вики, которые работают на одном сервере и используют общий набор ресурсов родительской установки, при этом каждая вики остаётся независимой. Эта установка является альтернативой запуску полностью отдельных установок МедиаВики. Это может быть предпочтительным выбором, если администратор сайта хочет сократить объём работы по управлению несколькими вики-сайтами или сократить использование индексных дескрипторов. По этой причине некоторые службы хостинга вики работают по модели семейства вики.

Наиболее известной реализацией семейства вики является «вики-ферма», хотя возможны и другие подходы. Список известных вики-ферм доступен за 1$.

Ниже приведены инструкции по настройке MediaWiki для размещения более одного вики-сайта.

Методы

Вики-ферма

Следующие шаги предназначены для запуска нескольких вики-сайтов в одной и той же версии MediaWiki:

  1. Установите первую вики-страницу в обычном режиме. Подробности см. в Manual:Руководство по установке .
  2. Включите свой веб-сервер для совместного использования вашей установки MediaWiki со всеми вики. Для нескольких (под)доменов ваш веб-сервер должен принимать соединения со всех соответствующих доменов. Для нескольких подкаталогов вы можете использовать правила перезаписи, псевдонимы или символические ссылки.
  3. Добавьте код в начало LocalSettings.php, чтобы определить текущую вики-страницу. Обратите внимание, что если аргумент --wiki содержит дефис, то он будет отделён и полученные два значения будут присвоены соответственно MW_DB и MW_PREFIX. Для вики-сайтов по доменному имени:
    $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. Настройте параметры, которые должны отличаться для всех вики-сайтов. Например:
    $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' => ..,
        ..,
    ];
    

Для добавления новой вики в семью:

Индивидуальные файлы настроек

Этот подход предназначен для работы с полностью независимыми вики-сайтами, но при этом использующими один и тот же веб-сервер и исходный код MediaWiki.

  1. Установите первую вики-страницу как обычно, через веб- или CLI-установщик, который настроит вашу базу данных и сгенерирует файл LocalSettings.php .
  2. После установки переименуйте сгенерированный файл LocalSettings.php, чтобы включить идентификатор wiki (например, имя базы данных), например LocalSettings_mywiki.php.
  3. Повторите первый и второй шаги выше для каждой вики, которую вы хотите создать.
  4. Создайте новый файл LocalSettings.php, который загрузит правильный файл. Как и в случае с вышеприведенным примером фермы вики, аргумент --wiki с строкой будет разделен на строку на два значения, присвоенные соответственно MW_DB и MW_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.' );
    }
    
    // Добавьте любые настройки, которые должны применяться ко всем вики-сайтам ниже этой строки
    // -------
    
    Если ваши вики находятся на одном домене, но по разным путям (например, 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.' );
    }
    
Если вы используете Короткий 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. Настройте wiki как обычно из каталога "/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 Пользователь, под которым работает Apache, должен иметь права на запись в эту папку.
  8. Поместите файл LocalSettings.php в стиле Drupal в свой основной каталог: cp DrupalLocalSettings.php /home/web/mediawiki/code/LocalSettings.php
  9. Измените LocalSettings.php каждого дочернего сайта, чтобы указать на нужные места:
    1. Сначала закомментируйте код, относящийся к $IP (строки 16-20 в 1.15.3), поскольку он устанавливается в каталог code на index.php.
    2. Сначала закомментируйте код, относящийся к $wgUploadDirectory = "/home/web/mediawiki/sites/wiki.example.com/images"; (строки 16-20 в 1.15.3), поскольку он установлен в каталоге $wgUploadPath = "/images"; на $3. Их необходимо поместить куда-нибудь после вызова DefaultSettings.php (строка 25 в 1.15.3), так как в противном случае переменные будут сброшены.
    3. При необходимости внесите дополнительные изменения.
  10. Подготовьте установку Apache 2. Пример сайта: wiki.example.com
    1. Создайте ссылку на каталог code, если требуется "например" ln -s /home/web/mediawiki/code /home/web/wiki.example.com
    2. Создайте соответствующую конфигурацию VHost:
      <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 и базы данных. Обратите внимание, что $_SERVER['HTTP_HOST'] в сопутствующем коде Drupal не определен при запуске сценариев обслуживания из командной строки, поэтому это решение не разрешает использование сценариев обслуживания без некоторых изменений.

Модифицированный метод в стиле Drupal для Ubuntu

Упрощенный метод для нескольких вики и нескольких (или вложенных) вложенных вики в Ubuntu /Kubuntu, который в общих чертах основан на вышеупомянутом методе, можно найти по адресу:

Как вики-фермы обрабатываются в скриптах обслуживания

Скрипты обслуживания MediaWiki (например, update.php) принимают аргумент --wiki, который передается в ваш файл LocalSettings.php как константы MW_DB, MW_PREFIX и MW_WIKI_NAME. Полное значение аргумента --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-адрес используются для выбора вики.

Советы по обмену информацией между вики-сайтами

Вы можете использовать $wgForeignFileRepos для обмена загруженными медиафайлами между вики-сайтами. Это похоже на Викисклад для Википедии.

Например:

  • en.example.org - английский
  • fr.example.org - французский
  • de.example.org - немецкий
  • pool.example.org - Общие медиафайлы для всех вики.
В приведенном выше примере используется имя "pool". Избегайте использования имени "commons", поскольку это может противоречить ссылка на интервики, также названному commons для Викисклад. Также избегайте использования имени "media" (например, media.example.org), поскольку это может вызвать конфликт между вашим interwiki и внутренним пространством имен Media: для доступа к локальным медиафайлам, например [[media:File.png]].

Общие таблицы базы данных

Рассмотрите возможность использования общей базы данных для учетных записей пользователей. Инструкции по настройке общих таблиц базы данных см. в разделе Руководство:Общие базы данных .

Интервики

Вы можете создать ссылки на интервики между всеми вики, используя Extension:Interwiki . Если вики-сайты являются языковыми изданиями, рекомендуется указывать префикс интервики после точного кода языка. Например, "de" для немецкой вики в вашей семье. Таким образом, вы можете соединять страницы, посвященные одной и той же теме, используя языковые ссылки.

Добавление [[de:Hauptseite]] на вашу английскую "Главную страницу" создаст ссылку "Deutsch" на боковой панели языков. Для получения дополнительной информации см. Help:Interwiki linking .

Если у вас есть центральная вики-страница для файлов, создайте префикс и для нее. Например, от pool до https://pool.example.org/wiki/$1 и установите флажок "Переслать", чтобы распознать его как локальную вики в том же семействе.

Загрузка

Убедитесь, что папка "images" пула-wiki доступна для записи.

Полезно изменить ссылку "Загрузить файл" языковой вики, чтобы она указывала на сайт загрузки 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";

Если вы хотите разрешить загрузку только для вашей вики-страницы пула, вы можете использовать что-то вроде этого:

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

Использование общих файлов

Чтобы использовать файлы poolwiki в languagewiki, откройте "LocalSettings.php" для каждого languagewiki и добавьте:

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

Теперь вы можете интегрировать файлы пула с помощью (например, [[File:MyLogo.png]]) в languagewikis.

Описание изображения

В каждом languagewiki откройте (как администратор) сообщение MediaWiki:Sharedupload-desc-here.

Измените текст на что-то вроде:

Этот файл хранится в нашем пуле данных.
Для получения информации и описания, пожалуйста, посетите [[:pool:File:{{PAGENAME}}|описание там]].

(И обратите внимание на ":" в начале строки, что останавливает включение "pool" в список интервики слева от страницы.)

Если вы хотите вывести медиа-описание, хранящееся в PoolWiki, тоже добавьте к "LocalSettings.php" languagewikis:

$wgFetchCommonsDescriptions = true;
$wgSharedUploadDBname = 'pool';  # DB-Name of PoolWiki
$wgSharedUploadDBprefix = 'wiki_'; # Table name prefix for PoolWiki
$wgRepositoryBaseUrl = "https://pool.example.org/index.php/Image:";

Расширения вики-фермы

Существует несколько расширений MediaWiki, которые пытаются упростить размещение нескольких вики-сайтов, используя только одну кодовую базу, однако в настоящее время заслуживает внимания только одно:

См. также