MediaWiki

Материал из СисадминВики (SysadminWiki.ru)
Перейти к: навигация, поиск

MediaWiki -- популярный бесплатный движок, на котором работает Википедия и другие проекты фонда WikiMedia. Легко устанавливается и расширяется.


Содержание

Установка MediaWiki

Установка крайне проста: скачиваем последнюю версию с официального сайта http://www.mediawiki.org и распаковываем в нужный каталог сайта (например /var/www/site/w/); далее настраиваем через веб-интерфейс. Точка входа: http://domain.ru/w/mw-config/

Для установки из командной строки (CLI) выполняем:

php ./maintenance/install.php --dbname Имя_БД --dbuser Пользователь_БД --dbpass Пароль_БД --dbprefix Префикс_Таблиц --pass Пароль_Участника_Админа Имя_Вики Участник_Админ

Список всех параметров установщика:

php ./maintenance/install.php --help

Подробно об установке можно узнать из официальной инструкции, и ещё одна здесь.

Вики движок лучше не размещать в корне сайта. Почему, кратко объяснено в спец. статье.

После установки хорошо бы ознакомиться с задачами администратора MediaWiki, где сказано что ещё можно доделать.

Как сделать (краткие ЧаВО)

Хорошие краткие инструкции (ЧаВО или FAQ) есть на официальном сайте MediaWiki как на русском языке, так и на английском.


Запрещаем редактирование не авторизованным пользователям:

$wgGroupPermissions['*']['createaccount'] = true;
$wgGroupPermissions['*']['read'] = true;
$wgGroupPermissions['*']['edit'] = false;
$wgGroupPermissions['*']['createpage'] = false;
$wgGroupPermissions['*']['createtalk'] = false;

Полный список прав см. в официальном руководстве

Делаем ссылки короткими

По умолчанию ссылки выглядят так: http://domain.ru/wiki/index.php?title=article. Чтобы сделать их такими же короткими и наглядными, как в Википедии, есть много способов. Один из них - это добавить в LocalSettings.php:

$wgScriptPath   = "/w";  
$wgArticlePath  = "/wiki/$1";
$wgUsePathInfo  = true;

где $wgScriptPath - каталог установки вики-сайта,

$wgArticlePath - виртуальный каталог, который нужно будет указать в URL при обращении к статье, имя не должно совпадать с реальным каталогом.

Затем, в корневом каталоге сайта (т.е. рядом с каталогом "w") нужно создать файл .htaccess:

RewriteEngine On
RewriteRule ^wiki/(.*)$ /w/index.php?title=$1 [PT,L,QSA]
RewriteRule ^wiki/*$ /w/index.php [L,QSA]
RewriteRule ^/*$ /w/index.php [L,QSA]

Для лучшего понимания этого кода можно подробней ознакомиться с синтаксисом директивы RewriteRule.

Если на сервере установлено несколько виртуальных хостов, то нужно ещё добавить  настройку виртуального хоста в секцию <VirtualHost>:

AllowOverride All
RewriteEngine On
RewriteOptions Inherit

и подключить модуль rewrite, после чего перезагрузить apache. В Debian это делается следующим образом:

ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled
/etc/init.d/apache2 restart

Создаём пользователя из командной строки

Скрипт createAndPromote.php может создать пользователя, изменить его права (группу) и пароль.

Следующая команда создаёт пользователя NewUser с паролем UserPassword и добавляет его в группы бюрократоры и администраторы:

php createAndPromote.php --bureaucrat --sysop NewUser UserPassword


Меняем права пользователей

Права пользователя можно поменять на Special:Userrights. Подробно описано в официальном руководстве.

За изменение прав отвечает тип разрешения userrights. Дав это разрешение какой-либо группе в конфигурационном файле LocalSettings.php, мы позволяем участникам этой группы изменять права всех участников вики. Например, чтобы дать всем возможность управлять правами нужно добавить такую строчку:

$wgGroupPermissions['user']['userrights'] = true;

В реальной жизни это опасно и нецелесообразно, но может понадобиться в тестовой среде, чтобы быстро проверять и настраивать уровень доступа разных групп к ресурсам сайта:загрузка файлов, редактирование интервики и других служебных страниц вроде Edittools, а также редактирование защищённых страниц и т.п.

Меняем пароль пользователя

1. Пользователь может запросить забытый пароль на странице Special:UserLogin


2. Администратор может поменять пароль любого пользователя следующими способами:

2.1) скриптом из каталога maintenance:

php ./changePassword.php --user=example --password=newpassword

или для имён с пробелами:

php ./changePassword.php --user='Иван Иванович Иванов' --password=newpassword

2.2) SQL командой:

UPDATE user SET user_password = MD5(CONCAT(user_id, '-', MD5('Новый_Пароль'))) WHERE user_name = 'Имя_Пользователя';

2.3) на странице Special:PasswordReset. В этом случае пароль будет автоматически создан и отправлен на почтовый ящик участника.


Читайте подробней на официальном сайте. См также статью о MySQL.

Разрешаем включать страницы из других вики

Чтобы включить страницу или шаблон из другой вики, она должна быть описана в таблице интервики ссылок и в LocalSettings.php нужно добавить параметр $wgEnableScaryTranscluding:

$wgEnableScaryTranscluding = true;

Можно прочитать подбробней про включения (transclusion) вообще и про включения из других вики в частности.

Разрешаем загружать файлы

# Позволяем загружать файлы
$wgEnableUploads = true;

# Определяем макс. размер файла
$wgMaxUploadSize = 5000000; 

# Отключаем проверку расширения файла
$wgCheckFileExtensions = false;
$wgStrictFileExtensions = false;

# Отключаем проверку MIME-типов
$wgVerifyMimeType = false;

Последние два параметра разрешают загружать все файлы (что не безопасно). Если их не указывать, то по умолчанию будут разрешены только изображения.

Чтобы самостоятельно задать тип файлов указываем:

$wgFileExtensions = array('png', 'gif', 'jpg', 'jpeg', 'svg', 'pdf', 'doc', 'docx', 'xls', 'xlsx','ods','odg','odt');

Для того, чтобы файлы могли быть загруженными, должен быть настроен и сам PHP. Максимальный размер загружаемого файла задаётся в php.ini (напр. /etc/php5/apache2/php.ini) параметром upload_max_filesize. Т.е. одной установки $wgMaxUploadSize будет мало.

Для повышения безопасности запретим выполнять скрипты из каталога изображений. Для этого в корне каталога images создадим файл .htaccess со следующими настройками (подробнее...):

# Serve HTML as plaintext, don't execute SHTML
AddType text/plain .html .htm .shtml .phtml .php .php3 .php4 .php5 .php7

# Old way of registering php with AddHandler
RemoveHandler .php

# Recent way of registering php with SetHandler
<FilesMatch "\.ph(p[3457]?s?|tml)$">
   SetHandler None
</FilesMatch>

Подробней о настройке загрузки файлов см. официальную документацию.

Добавляем классы таблиц

код для shared.css
/* -pm- as wikitable but without a table */
/*background and darker header background*/
table.standard {
    margin: 1em 1em 1em 0;
    border: 1px #aaa solid;
    border-collapse: collapse;
}
.standard th, .standard td {
    border: 1px #aaa solid;
    padding: 0.2em;
}
.standard th {
    background: #d2d2d2;
    text-align: center;
}
.standard caption {
    font-weight: bold;
}

/* -pm- as standart but with frame only */
table.frame {
    margin: 1em 1em 1em 0;
    border: 1px #aaa solid;
    border-collapse: collapse;
}
.frame th .frame td {
    padding: 0.2em;
}
.frame th {
    background: #d2d2d2;
    text-align: center;
}
.frame caption {
    font-weight: bold;
}

/* -pm- as standart but wide (100%) */
table.wide {
    margin: 1em 1em 1em 0;
    border: 1px #aaa solid;
    border-collapse: collapse;
    width: 100%;
}
.wide th, .wide td {
    border: 1px #aaa solid;
    padding: 0.2em;
}
.wide th {
    background: #d2d2d2;
    text-align: center;
}
.wide caption {
    font-weight: bold;
}

/* -pm- as wide but with frame only*/
table.wide-frame {
    margin: 1em 1em 1em 0;
    border: 1px #aaa solid;
    border-collapse: collapse;
    width: 100%;
}
.wide-frame th .wide-frame td {
    padding: 0.2em;
}
.wide-frame th {
    background: #d2d2d2;
    text-align: center;
}
.wide-frame caption {
    font-weight: bold;
}

По умолчанию в движке MediaWiki определён только один класс таблиц wikitable.

  • Чтобы определить свои классы нужно отредактировать файл skins/common/shared.css. Вставьте в любое место приведённый справа код.


Пример классов таблиц:

вид
wikitable
Заголовок 1 Заголовок 2
Ячейка 1*1 Ячейка 2*1
Ячейка 1*2 Ячейка 2*2
Ячейка 1*3 Ячейка 2*3
standard
Заголовок 1 Заголовок 2
1 Ячейка 2 Ячейка
2 Ячейка 1 Ячейка
3 Ячейка 3 Ячейка
frame
Латиница Кириллица Цифры
D Г 3
E Щ 2
F Б 11


код
{| class="wikitable"
|-
!Заголовок 1||Заголовок 2 
|-
|Ячейка 1*1||Ячейка 2*1
|-
|Ячейка 1*2||Ячейка 2*2
|-
|Ячейка 1*3||Ячейка 2*3
|}
{| class="standard sortable"
|-
!Заголовок 1||Заголовок 2 
|-
| 1 Ячейка || 2 Ячейка
|-
| 2 Ячейка || 1 Ячейка 
|-
| 3 Ячейка || 3 Ячейка
|}
{| class="frame sortable"
|-
!Латиница||Кириллица||class="unsortable"|Цифры
|-
| D || Г || 3 
|-
| E || Щ || 2
|-
| F || Б || 11
|}
широкие
wide
Заголовок 1 Заголовок 2
Ячейка 1*1 Ячейка 2*1
Ячейка 1*2 Ячейка 2*2
Ячейка 1*3 Ячейка 2*3
wide-frame
Заголовок 1 Заголовок 2
Ячейка 1*1 Ячейка 2*1
Ячейка 1*2 Ячейка 2*2
Ячейка 1*3 Ячейка 2*3


Сортируем данные в колонках

Для добавления возможности сортировки данных в колонках достаточно в заголовке добавить к названию класса слово "sortable". Например:

{| class="wikitable sortable"

См. подробнее на английском на официальном сайте.


Переносим статьи и шаблоны из другой вики

  • Special:Export - выгружаем требуемую статью или шаблон в промежуточный XML файл
  • Special:Import - загружаем на новой вики XML файл

Подробнее в официальной документации. Иногда, в случае со сложными зависимостями, когда шаблон использует несколько других (как часто бывает в Википедии, например), проще переносить шаблон вручную, отредактировав его и убрав зависимости, заменив их на более простые конструкции (облегчённые шаблоны или просто текст).

Скрываем большие и незначительные блоки текста

  • Начиная с 1.18 для всех элементов добавлен класс "mw-collapsible", который можно указать не только для таблиц, но и для любого текста. Подробней см. справку по редактированию
  • До версии 1.18 в официальной инструкции рекомендуется создать в вики страницы MediaWiki:Common.js и MediaWiki:Common.css Такое решение имеет свой плюс (при обновлении движка настройка останется) и минус (в случае вики фермы - страницу нужно будет создавать в каждой вики). Для вики фермы можно добавить код в конец следующих файлов в каталоге skins/common/:
    • код для Common.js добавил в ajax.js
    • код для Common.css добавил в shared.css
  • Сворачивать можно также разделы, таблицы, ячейки в таблицах и удалённые от кнопки сворачивания блоки. Примеры можно посмотреть на сайте тестирования MediaWiki

Перевод сайта в режим только для чтения

Перевести сайт в режим только для чтения можно определив переменную $wgReadOnly:

$wgReadOnly = 'Внимание! Идёт обновление движка сайта. Редактирование временно будет не доступно!';


Игнорируем перенаправление (redirect)

Чтобы игнорировать перенапревление, нужно в адресной строке добавить параметр "redirect=no":

https://mysite.org/w-wiki/index.php?title=Page_Name&redirect=no

Меняем название заглавной страницы

Если в URL не указать страницу сайта, то мы попадём на страницу "Заглавная страница". Название "Заглавной страницы" можно поменять как и любой другой - переименованием, но чтобы избежать сообщения о перенаправлении, нужно изменить системное сообщение MediaWiki:Mainpage. Подробнее в оф. документации.

Чтобы спрятать название страницы см. ниже.

Включаем обработку подстраниц

При включенной обработке подстраниц, если в заголовке страницы встречается косая черта (/), то система начинает распознавать всё, что за ней как подстраницу. То есть если есть в названии страницы эта косая черта, то она считается подстраницей, если нет - то это корневая (родительская) страница. Сколько косых черт в заголовке - таков и уровень подстраницы.

При выключенной обработке подстраниц все страницы считаются корневыми.

Обработка включается и выключается для каждого пространства имён отдельно:

# Включаем обработку подстраниц
$wgNamespacesWithSubpages[NS_MAIN] = true;

# Выключаем обработку подстраниц
$wgNamespacesWithSubpages[NS_TEMPLATE] = false;

или для всех сразу:

# Включаем обработку подстраниц для всех пространств имён
$wgNamespacesWithSubpages = array_fill(
 	0, 200, true
 	);

При включенной обработке на подстраницах под заголовком появляется строка ссылок на все родительские страницы ("хлебные крошки" или BreadCrumbs). Также можно вывести список всех дочерних страниц (подстраниц) с помощью запроса:

{{Special:PrefixIndex/MediaWiki/ |hideredirects=1 |stripprefix=1}}

где

  • hideredirects=1 скрывает страницы с перенаправлением, а
  • stripprefix=1 удаляет из полного названия страницы названия родительских страниц; 1 - удаляет только самого первого родителя, 2 - первого и второго и т.д.


Подробнее смотрите на официальных страницах:

Добавление расширений

Этому посвящена статья MediaWiki/Расширения

Резервное копирование

Чтобы узнать, как скачать дампы базы данных со статьями Википедии, см. статью Википедии

Для создания собственного дампа локального сайта, использующего MediaWiki, есть подробная инструкция.

Если кратко, то полная резервная копия - это дамп из СУБД (у меня MySQL) в виде SQL выражений, а частичная в виде xml файла. Особенности последней в том, что она не зависит от структуры базы данных и может быть перенесена, например, на нувую версию MediaWiki с изменнённой структурой БД, но в xml не выгружаются информация о логинаx пользователей, журналы и метаданные изображений.

  • Для SQL дампа выполняем:
mysqldump -h $SERVER -u $USER -p$PASSWORD --default-character-set=$CHARSET $DATABASE -c \
| /bin/gzip -9 > ~/backup/wiki-$(date '+%a').sql.gz
параметры $USER, $PASSWORD и $DATABASE берём из LocalSettings.php
cat ./LocalSettings.php  | grep wgDB
параметр --default-character-set=$CHARSET нужен, если возникли проблемы с кодировкой (подробней см. статью выше)
параметр -h $SERVER нужен если подключаемся не через сокет, иначе получим ошибку:
mysqldump: Got error: 2002: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) when trying to connect


  • Для XML дампа используем скрипт dumpBackup.php, расположенный в каталоге maintenance:
php maintenance\dumpBackup.php --full > full.xml 

Список параметров dumpBackup.php можно получить, вызвав его без параметров, однако, в исходном коде этого скрипта есть ещё несколько недокументированных опций.


Редактировние статей

Об этом можно подробно узнать из Справки по редактированию.

Поиск в Firefox по своей вики

В Firefox с помощью шаблона %s и "Краткого имени" (keyword) в закладке можно настроить быстрый доступ к любому сайту.

Отрываем Закладки - Управление закладками (Bookmark/Manage bookmarks), создаём отдельную папку для быстрого поиска, скажем "Быстрый поиск"; создаём новую закладку, где указываем:

  • Имя: Поиск по СисадминВики
  • Адрес: http://sysadminwiki.ru/wiki/%s
  • Краткое имя: св

Обратите внимание, что краткое имя может быть и на русском языке.

Теперь в адресной строке набираем: "св MediaWiki" и попадаем на эту страницу.

Если наберём просто "св", то попадём на начальную страницу сайта.

Почта

Разрешаем пересылку почты пользователям и устанавиваем ограничение на запрос напоминания пароля не чаще чем один в час.

## UPO means: this is also a user preference option
$wgEnableEmail      = true;
$wgEnableUserEmail  = true; # UPO
$wgEnotifUserTalk = true; # UPO
$wgEnotifWatchlist = true; # UPO
$wgEmailAuthentication = true;
$wgPasswordReminderResendTime = 1;

$wgEmergencyContact = "wiki_admin@domain.ru";
$wgPasswordSender = "wiki_admin@domain.ru";

Чтобы задать особые настройки почтового сервера, с которого будут посылаться сообщения, определяем массив $wgSMTP.

$wgSMTP = array(
 'host'     => "mail.domain.ru", //could also be an IP address
 'IDHost'   => "domain.ru",
 'port'     => 25,
 'auth'     => false,
 'username' => "wiki_admin@domain.ru",
 'password' => "пароль"
);

Но в этом случае нам понадобиться установленный пакет Mail из репозитория PEAR. Ставится командой

pear install MAIL Net_SMTP

Если же не установлен сам PEAR, то в Debian этом можно сделать так:

apt-get install php-pear

Отображение файлов SVG

Движок MediaWiki преобразует все изображения SVG (а также WMF, OpenEXR, DjVu и Graphviz) в формат PNG. Поэтому, для отображения файлов векторной графики в формате SVG необходимо доустановить утилиту конвертации графических файлов. На время выхода версии 1.27 поддерживаются следующие: ImageMagick, ImagickExt, sodipodi, inkscape, batik, rsvg, и imgserv.

Подробнее читайте на официальном сайте.

Борьба со спамом

  1. Блокировать пользователя с помощью UserMerge на служебной странице (блокирует ненадолго) или вручную.
  2. Удаление учётки: объединение спамерской учётки с Anonymous и удаление (расширение UserMerge).
  3. Удаление всех статей Anonymous (расширение Nuke)

Дополнительные настройки

  • Интервики (interwiki) - это ссылки, оформленные как внутренние ссылки с использованием специального префикса, но ведущие на страницы других проектов. Интервики-ссылки позволяют сделать ссылку на страницы других вики-проектов, например Википедии, Викиучебника, Викиновостей и т.д., или, к примеру, на разделы вашего вики-проекта на разных языках.

Для редактирования таблицы интервики группой администраторов (sysop) нужно в конфигурацию добавить строчку:

$wgGroupPermissions['sysop']['interwiki'] = true;

Для разрешения включать шаблоны из других сайтов:

$wgEnableScaryTranscluding = true;
  • На странице MediaWiki:Tagline можно изменить подпись "Материал из НазваниеВики". Подробнее в описании о настройке вида: Tagline
  • Можно использовать "волшебные слова" (переключатели и переменные), например, для настройки отображение содержания, или вставки даты в определённом формате, или отображения статистики.
  • Можно изменить некоторые умолчальные настройки профиля пользователя переменной $wgDefaultUserOptions. Например, чтобы не показывать ссылку "Правка" для секций для незарегистрированных пользователей, нужно добавить в LocalSettings.php
$wgDefaultUserOptions ['editsection'] = 0;

Работа над ошибками

Для вывода ошибок на экран, в конец конфигурационного файла LocalSettings.php дописываем.

# Debug
$wgShowExceptionDetails = true;

// Отладка работы базы данных
$wgShowDBErrorBacktrace = true;
$wgShowSQLErrors = true;


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

error_reporting( -1 );
ini_set( 'display_errors', 1 );

Самостоятельная запись в журнал любого отладочного сообщения:

$wgDebugLogFile = "/home/user/logs/a-debug-{$wgDBname}.log";
wfErrorLog( "Текст сообщения", $wgDebugLogFile );

или в любой файл:

wfErrorLog( "Текст сообщения", "/home/user/logs/short.log" );

См. также

Тематические подстраницы для этой:

А также:

  • Семантика - как установить, настроить и использовать её
  • В категории MediaWiki есть ещё несколько статей, которые помогут настроить движок соответсвенно нуждам.

Полезные ссылки

Документация:

Справочники:

Форум:

Описание движка MediaWiki: