Руководство:Семьи вики/ru
«Семейство вики» — это совокупность двух или более вики, которые работают на одном сервере и используют общий набор ресурсов родительской установки, при этом каждая вики остаётся независимой. Эта установка является альтернативой запуску полностью отдельных установок МедиаВики. Это может быть предпочтительным выбором, если администратор сайта хочет сократить объём работы по управлению несколькими вики-сайтами или сократить использование индексных дескрипторов. По этой причине некоторые службы хостинга вики работают по модели семейства вики.
Наиболее известной реализацией семейства вики является «вики-ферма», хотя возможны и другие подходы. A list of known wiki farms is available on WikiApiary .
Ниже приведены инструкции по настройке MediaWiki для размещения более одного вики-сайта.
Методы
Вики-ферма
Следующие шаги предназначены для запуска нескольких вики-сайтов в одной и той же версии MediaWiki:
- Установите первую вики-страницу в обычном режиме. Подробности см. в Manual:Руководство по установке .
- Включите свой веб-сервер для совместного использования вашей установки MediaWiki со всеми вики. Для нескольких (под)доменов ваш веб-сервер должен принимать соединения со всех соответствующих доменов. Для нескольких подкаталогов вы можете использовать правила перезаписи, псевдонимы или символические ссылки.
- Добавьте код в начало
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';
- Настройте параметры, которые должны отличаться для всех вики-сайтов. Например:
$wgCacheDirectory = "/tmp/mediawiki_cache/$wgDBname"; $wgUploadDirectory = "$IP/images/$wgDBname"; $wgUploadPath = "/w/images/$wgDBname";
- Настройте переопределения для каждой вики. Это должно включать, по крайней мере,
$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' => .., .., ];
Для добавления новой вики в семью:
- Сначала создайте базу данных и добавьте её настройки , с
--wiki=mywiki
, если вы запуститеinstall.php
из командной строки. - Запустить
php maintenance/update.php --wiki=mywiki
.
Индивидуальные файлы настроек
Этот подход предназначен для работы с полностью независимыми вики-сайтами, но при этом использующими один и тот же веб-сервер и исходный код MediaWiki.
- Установите первую вики-страницу как обычно, через веб- или CLI-установщик, который настроит вашу базу данных и сгенерирует файл LocalSettings.php .
- После установки переименуйте сгенерированный файл
LocalSettings.php
, чтобы включить идентификатор wiki (например, имя базы данных), напримерLocalSettings_mywiki.php
. - Повторите первый и второй шаги выше для каждой вики, которую вы хотите создать.
- Создайте новый файл
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.' ); }
Сайты в стиле Drupal
Преимущества этого метода в том, что он полностью прозрачен для пользователей и достаточно безопасен с точки зрения каталога изображений.
- Создайте базовый каталог, содержащий все ваши файлы 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
- Настройте wiki как обычно из каталога "/code".
- После успешной установки "переместите"
LocalSettings.php
в каталог сайтов, который будет совпадать при проверке сайта. Например, чтобы захватить http://example.com/mywiki, можно было бы создать каталог example.com.mywiki. "например",mkdir /home/web/mediawiki/sites/example.com.mywiki
Смотрите файл Drupalsettings.php
для получения дополнительной информации об этом. - Если вы собираетесь использовать медиафайлы, создайте каталог images в каталоге вашего сайта. "например",
mkdir /home/web/mediawiki/sites/example.com.wiki/images
Пользователь, под которым работает Apache, должен иметь права на запись в эту папку. - Поместите файл
LocalSettings.php
в стиле Drupal в свой основной каталог:cp DrupalLocalSettings.php /home/web/mediawiki/code/LocalSettings.php
- Измените
LocalSettings.php
каждого дочернего сайта, чтобы указать на нужные места:- Сначала закомментируйте код, относящийся к
$IP
(строки 16-20 в 1.15.3), поскольку он устанавливается в каталог code наindex.php
. - Сначала закомментируйте код, относящийся к
$wgUploadDirectory = "/home/web/mediawiki/sites/wiki.example.com/images";
(строки 16-20 в 1.15.3), поскольку он установлен в каталоге$wgUploadPath = "/images";
на $3. Их необходимо поместить куда-нибудь после вызоваDefaultSettings.php
(строка 25 в 1.15.3), так как в противном случае переменные будут сброшены. - При необходимости внесите дополнительные изменения.
- Сначала закомментируйте код, относящийся к
- Подготовьте установку Apache 2. Пример сайта: wiki.example.com
- Создайте ссылку на каталог code, если требуется "например"
ln -s /home/web/mediawiki/code /home/web/wiki.example.com
- Создайте соответствующую конфигурацию 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>
- Создайте ссылку на каталог code, если требуется "например"
- 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 |
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 - Общие медиафайлы для всех вики.
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, которые пытаются упростить размещение нескольких вики-сайтов, используя только одну кодовую базу, однако в настоящее время заслуживает внимания только одно:
- Extension:MediaWikiFarm - beta.
- Extension:SkinCustomiser : Для локализации проблем Боковое меню и настройки скинов относительно файлов
MediaWiki:Cologneblue.css
,MediaWiki:Modern.css
,MediaWiki:Monobook.css
,MediaWiki:Vector.css
,MediaWiki:Mobile.css
,MediaWiki:Common.css
соответственно.
См. также
- Расширение:CentralAuth
- Manual:InitialiseSettings.php
- Руководство:CommonSettings.php
- Manual:$wgConf
- Manual:Central ID — механизм, с помощью которого учетные записи пользователей могут иметь дополнительный "центральный" идентификатор.