Руководство:Группы викисайтов/ru

This page is a translated version of the page Manual:Wiki family and the translation is 94% 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 для размещения более одного вики-сайта.

Методы

Вики-ферма

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

  1. Установите первую вики-страницу в обычном режиме. Подробности см. в Manual:Руководство по установке .
  2. Включите свой веб-сервер для совместного использования вашей установки MediaWiki со всеми вики. For multiple (sub)domains, have your web server accept connections from all the relevant domains. Для нескольких подкаталогов вы можете использовать правила перезаписи, псевдонимы или символические ссылки.
  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' => ..,
        ..,
    ];
    

Чтобы создать новую вики-страницу, сначала создайте ее базу данных и добавьте ее настройки, а затем запустите php maintenance/update.php --wiki=mywiki.

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

Этот подход предназначен для работы с полностью независимыми вики-сайтами, но при этом использующими один и тот же веб-сервер и исходный код 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, которые пытаются упростить размещение нескольких вики-сайтов, используя только одну кодовую базу, однако в настоящее время заслуживает внимания только одно:

См. также