Установка MediaWiki

Установка MediaWiki — столкнулся с необходимостью избавиться от многочисленных файлов блокнота с паролями, инструкциями, описаниями и прочим хламом ценным материалом, непрерывно накопляемым в процессе работы.

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


Выбор платформы

Тут ничего сложного, виртуальная машина Ubuntu 16.04.1. Почему VM говорил уже много раз: виртуалку удобно таскать туда-сюда между серверами, она не привязана к железу. Один раз настроив VM, получаем шаблон для множественного использования. Почему Ubuntu — на мой субъективный взгляд, сегодня это самый стремительно развивающийся проект. Для серьёзного многопользовательского продакшена не подойдёт, но когда для себя что-то запилить и ещё для пары админов, очень комфортно делать на Ubuntu.

Гипервизор. Мой любимый Hyper-V, встроенный сегодня во все современные версии настольных и серверных ОС от MS. И это очень упрощает работу с VMs.

К своему вящему позору до сих пор не знал, что начиная с версии 14.04 Ubuntu поддерживает VM 2 поколения. Много всяких интересных штук добавили.


Подготовка машины 2 поколения

Процесс установки ничем не отличается, за исключением того, что в конце инсталлятор спрашивает точно ли мы хотим загружаться как UEFI.

Включаем рута:

passwd root

Логинимся рутом, киляем пользователя, заведенного при установке:

userdel имя

Разрешаем вход рута по SSH:

vi /etc/ssh/sshd_config

PermitRootLogin yes

Проверяем/изменяем настройки сети:

vi /etc/network/interfaces

Переходим на Putty, накатываем обновления:

apt-get update; apt-get upgrade -y; apt-get dist-upgrade -y

shutdown -r now

Всё, система готова. Далее, перед установкой важных компонентов делаем снимок машины и если что-то идёт не так, возвращаемся к предыдущему состоянию.


Выбор дистрибутива Wiki

Требования следующие:

  • Полностью бесплатное ПО;
  • Это должна быть именно чистая вики, а не вики плюс форум или вики плюс трекер-заявок;
  • Внешний вид, простота установки.

Поискав в интернете, понял, что выбора-то и нет. Только MediaWiki.


Установка Wiki

Apache, PHP 7.0
apt-get install apache2 mysql-server php php-mysql libapache2-mod-php php-xml php-mbstring

Будет предложено ввести пароль root для MySQL. Поскольку у меня внутренняя вики, без доступа из интернет, помятуя прошлые проколы, ввожу короткий пароль.

Установка MediaWiki
mkdir 1
cd 1

wget https://releases.wikimedia.org/mediawiki/1.28/mediawiki-1.28.0.tar.gz

tar -xvzf mediawiki-*.tar.gz

mkdir /var/lib/mediawiki
mv mediawiki-*/* /var/lib/mediawiki

Следует помнить, что команда вводится в одну строчку, wget (как и некоторые команды выше) не поместилась здесь, лучше сначала скопировать её в блокнот и проверить этот момент.

Настройка MediaWiki
cd /var/www/html
sudo ln -s /var/lib/mediawiki mediawiki
service apache2 restart
Настройка PHP
vi /etc/php/7.0/apache2/php.ini

upload_max_filesize = 40M

Чтобы не прокручивать длинный конфиг, удобно пользоваться поиском vi. сначала нажать /, затем набрать upload_max_filesize и Enter.


Конфигурирование MediaWiki

Переходим по адресу:

http://vm_ip/mediawiki/mw-config/index.php?page=Welcome

Если ничего не грузится, нужно попробовать открыть дефолтную страницу apache:

http://vp_ip/

Страница открылась — разбираемся с mediawiki, нет — разбираемся с apache.

Итак, конфигурационная страница загрузилась, предлагаю не наступать на те же грабли, что и я и сразу выбрать язык для MediaWiki английский (en). На мой взгляд названия страниц в строке адреса на русском выглядят нелепо и неудобно, но если вы не считаете это минусом, оставляйте русский.

Установка Mediawiki
Предупреждения и их устранение

Затем производится проверка и будут выданы предупреждения:

  • GD для PHP. Не удалось найти встроенную библиотеку GD или ImageMagick. Возможность использования миниатюр изображений будет отключена.

Лечим:

add-apt-repository ppa:ondrej/php
apt-get update
apt-get install php7.0-gd
service apache2 restart

Найдена встроенная графическая библиотека GD.
Возможность использования миниатюр изображений будет включена, если вы включите их загрузку.

  • PECL для PHP. Внимание!: расширение intl из PECL недоступно для нормализации Юникода, будет использоваться медленная реализация на чистом PHP.
apt-get install php7.0-intl
service apache2 restart

Будет использовано расширение «intl» для PECL для нормализации Юникода.

  • Кеширование. Внимание: Не найдены APCu, XCache или WinCache.

Для PHP 7.0 нет таких механизмов кеширования, мне они и не нужны, поскольку это личная, закрытая вики, максимум на 2-3 человека.

Но можно установить специально созданный для PHP 7.0 opcache:

sudo apt-get install php7.0-opcache

И настроить. Раскомментировать строки в конфигурационном файле, поменять значения:

vi /etc/php/7.0/apache2/php.ini
/
opcache

opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.max_wasted_percentage=5
opcache.use_cwd=1
opcache.validate_timestamps=1
opcache.revalidate_freq=60
opcache.save_comments=0
opcache.fast_shutdown=1
opcache.consistency_checks=0

Предупреждаю, сами эти настройки не выверены, работа opcache мне не понравилась и закомментировал всё обратно.

В результате получилось следующее:

Установка Mediawiki

Устанавливаем, предлагаю чётко выбрать ваш тип Вики. Открытая/закрытая, это важный момент. После установки будет сгенерирован файл LocalSettings.php, который нужно закинуть в /var/lib/mediawiki, пользуемся программой WinSCP:

Установка Mediawiki

Ссылка для входа в wiki будет предоставлена при генерации. Надо сказать, что большая часть глобальных настроек Вики идет именно через файл LocalSettings.php.


Смена картинки

Для стандартной шкуры Vector картинку-лого можно поменять закинув свою с названием mediawiki.png и размером 135x135 в папку /var/lib/mediawiki/resources/assets.


Смена шкуры

Встроенные шкуры мне не понравились. Есть очень красивые, но платные, отпадает. Есть альтернативные, мне они показались неинтересными. Остановился на Apex:

https://www.mediawiki.org/wiki/Skin:Apex/ru

Самое то для Вики небольших размеров, какая-то легкость присутствует. Установка там простая и подробно расписана. В LocalSettings.php:

wfLoadSkin( 'apex' );

Полезно сделать Apex шкурой по умолчанию для новых пользователей:

$wgDefaultSkin = "apex";

Картинка-лого для шкуры Apex лежит /var/lib/mediawiki/skins/apex/images/logos.


Настройка подвала

Убрать "Отказ от ответственности": перейти по адресу http://vm_ip/mediawiki/index.php/MediaWiki:Disclaimers, отредактировать страницу, заменив текст на - (знак минуса).
Убрать "Условия конфиденциальности": ../MediaWiki:Privacy, тоже самое.


Фавикон

Генерируем, кладем в корень, добавляем в LocalSettings.php:

$wgFavicon = "/mediawiki/favicon.ico";

Остальные настройки MediaWiki

Это некоторая особенность, настройки Вики производятся не из меню Администратора, а со специальной страницы:

../mediawiki/index.php/Special:SpecialPages

Группы пользователей и права

Можно посмотреть на странице:

../Special:ListGroupRights

Меня интересуют только Анонимные (они же Все) и Пользователи. Первые обозначаются *,  поскольку у меня закрытая Вики, то доступ предоставляется только авторизованным (user). Чтобы отнять или предоставить дополнительные права у группы user, нужно в файле LocalSettings.php создать специальную секцию. Пример моей:

# Permissions
$wgGroupPermissions['user']['createaccount'] = false;
$wgGroupPermissions['user']['read'] = true;
$wgGroupPermissions['user']['edit'] = false;
$wgGroupPermissions['user']['createpage'] = false;
$wgGroupPermissions['user']['createtalk'] = false;
$wgGroupPermissions['user']['writeapi'] = false;
$wgGroupPermissions['user']['move'] = false;

Более тонко права настраиваются в LocalSettings.php через расширение Lockdown:

require_once "$IP/extensions/Lockdown/Lockdown.php";

Права задаются для группы. Эта группа и всё группы с более высокими правами будут иметь доступ. Все остальные группы нет:

$wgActionLockdown['history'] = array('sysop');
$wgActionLockdown['edit'] = array('sysop');

Sysop (название канеш странное) группа Администраторов. При такой настройке обычные пользователи не будут иметь право открыть страницу редактирования и страницу с историей изменения для данной страницы.


Траблшутинг

Есть очень хороший FAQ для MediaWiki. В частности там описано как поступить, если не создался пользователь с правами Администратора, так получилось у меня:

  • Добавить последней строчкой LocalSettings.php:
$wgAddGroups['user'] = true;
  • Перейти на страницу:
../Special:Userrights 
  • Выбрать своего пользователя и добавить ему прав.

Перенос в продакшен

Экспортируем VM средствами Hyper-V на диск и тащим его по месту назначения. Импортируем, меняем IP-адрес. Тут важно поменять его в трех местах:

  1. В файле /etc/network/interfaces;
  2. В файле /etc/hosts;
  3. В файле LocalSettings.php.

Дополнение от 27.04.2017

В описании на сайте MediaWiki говорится, что с PHP 7.1 пока совместимо не до конца.

Установка Mediawiki

Однако у меня после обновления до PHP 7.1 MediaWiki вообще перестала работать. Apache при этом свою дефолтную страницу открывает, а вот MediaWiki index.php грузит как html. Там код страницы и закомментированное предупреждение, смысл которого у вас не настроено php.

В очередной раз убеждаюсь, обновление на новые версии без необходимости и когда всё работает — есть зло.

Может быть дело в ерунде какой-то, в одной настройке, может, не спорю, но под конец рабочего дня никакого желания разбираться нет. Восстановил из резервной копии. Порядок такой:

  1. Скопировать папку /var/lib/mediawiki себе на комп через WinSCP;
  2. Сделать дамп базы через Putty (пусть база в MySQL называется dbwiki, пользователь базы dbuser, его пароль password) mysqldump --user=dbuser --password=password dbwiki > file.sql;
  3. Загрузить дампы себе на комп через WinSCP;
  4. Восстановить машину из резервной копии;
  5. Скопировать папку mediawiki обратно;
  6. Восстановить дамп mysql -udbuser -ppassword dbwiki < file.sql

При этом все внесённые данные будут на месте.

Еще одна трабла обновления, раздел /boot оказался забитым на 100%, зависимости нарушены и команда:

apt autoremove

выдаёт ошибку, а команда:

apt-get -f install

говорит нет места.

Порядок такой:

  • Посмотреть версию используемого ядра:
uname -a
  • Перейти в /boot;
  • Поудалять руками старые версии ядра через rm и расчистить ~20% свободного места, затем apt-get -f install и потом apt autoremove.

Дополнение от 12.05.2017

Создаём закрытое пространство имён

Потребовалось создать область, страницы которой смогут читать только определённые группы. Всё подробна расписано.

  # определение констант для собственных пространств имён для расширенной настройки
  define('NS_PRIVATE', 1000);
  define('NS_PRIVATE_TALK', 1001);

  # определение собственных пространств имён
  $wgExtraNamespaces[NS_PRIVATE] = 'Private';
  $wgExtraNamespaces[NS_PRIVATE_TALK] = 'Private_talk';

  # ограничение разрешения «read» для администраторов
  $wgNamespacePermissionLockdown[NS_PRIVATE]['read'] = array('sysop');
  $wgNamespacePermissionLockdown[NS_PRIVATE_TALK]['read'] = array('sysop');

  # предотвращение включения страниц из этого пространства имён
  $wgNonincludableNamespaces[] = NS_PRIVATE;
  $wgNonincludableNamespaces[] = NS_PRIVATE_TALK;

Создаем новую станицу как:

Private:Имя_страницы

Теперь туда можно складывать то, что обычные пользователи видеть не должны.

Ещё полезное. Ранее были заданы права как:

# Permissions
$wgGroupPermissions['user']['createaccount'] = false;
$wgGroupPermissions['user']['read'] = true;
$wgGroupPermissions['user']['edit'] = false;
$wgGroupPermissions['user']['createpage'] = false;
$wgGroupPermissions['user']['createtalk'] = false;
$wgGroupPermissions['user']['writeapi'] = false;
$wgGroupPermissions['user']['move'] = false;

Можно сделать проще:

$wgNamespacePermissionLockdown[NS_PROJECT]['*'] = array('sysop');
$wgNamespacePermissionLockdown[NS_PROJECT]['read'] = array('user');

Все действия для администраторов и чтение для пользователей.

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

# Edit namespasces only for admins
$wgNamespacePermissionLockdown[NS_PROJECT]['edit'] = array('sysop')

Финальный вариант файла настроек

Окончательный (надеюсь) вид файла настроек:

<?php
# This file was automatically generated by the MediaWiki 1.28.0
# installer. If you make manual changes, please keep track in case you
# need to recreate them later.
#
# See includes/DefaultSettings.php for all configurable settings
# and their default values, but don't forget to make changes in _this_
# file, not there.
#
# Further documentation for configuration settings may be found at:
# https://www.mediawiki.org/wiki/Manual:Configuration_settings

# Protect against web entry
if ( !defined( 'MEDIAWIKI' ) ) {
 exit;
}

## Uncomment this to disable output compression
# $wgDisableOutputCompression = true;

$wgSitename = "База Знаний Дежурного администратора";
$wgMetaNamespace = "База_Знаний_Дежурного_администратора";

## The URL base path to the directory containing the wiki;
## defaults for all runtime URL paths are based off of this.
## For more information on customizing the URLs
## (like /w/index.php/Page_title to /wiki/Page_title) please see:
## https://www.mediawiki.org/wiki/Manual:Short_URL
$wgScriptPath = "/mediawiki";

## The protocol and server name to use in fully-qualified URLs
$wgServer = "http://192.168.0.45";

## The URL path to static resources (images, scripts, etc.)
$wgResourceBasePath = $wgScriptPath;

## The URL path to the logo. Make sure you change this from the default,
## or else you'll overwrite your logo when you upgrade!
$wgLogo = "$wgResourceBasePath/resources/assets/wiki.png";

## UPO means: this is also a user preference option

$wgEnableEmail = false;
$wgEnableUserEmail = true; # UPO

$wgEmergencyContact = "apache@192.168.0.45";
$wgPasswordSender = "apache@192.168.0.45";

$wgEnotifUserTalk = false; # UPO
$wgEnotifWatchlist = false; # UPO
$wgEmailAuthentication = true;

## Database settings
$wgDBtype = "mysql";
$wgDBserver = "localhost";
$wgDBname = "USD";
$wgDBuser = "root";
$wgDBpassword = "password";

# MySQL specific settings
$wgDBprefix = "USD";

# MySQL table options to use during installation or update
$wgDBTableOptions = "ENGINE=InnoDB, DEFAULT CHARSET=binary";

# Experimental charset support for MySQL 5.0.
$wgDBmysql5 = false;

## Shared memory settings
$wgMainCacheType = CACHE_NONE;
$wgMemCachedServers = [];

## To enable image uploads, make sure the 'images' directory
## is writable, then set this to true:
$wgEnableUploads = true;
#$wgUseImageMagick = true;
#$wgImageMagickConvertCommand = "/usr/bin/convert";

# InstantCommons allows wiki to use images from https://commons.wikimedia.org
$wgUseInstantCommons = false;

# Periodically send a pingback to https://www.mediawiki.org/ with basic data
# about this MediaWiki instance. The Wikimedia Foundation shares this data
# with MediaWiki developers to help guide future development efforts.
$wgPingback = false;

## If you use ImageMagick (or any other shell command) on a
## Linux server, this will need to be set to the name of an
## available UTF-8 locale
$wgShellLocale = "en_US.utf8";

## Set $wgCacheDirectory to a writable directory on the web server
## to make your wiki go slightly faster. The directory should not
## be publically accessible from the web.
#$wgCacheDirectory = "$IP/cache";

# Site language code, should be one of the list in ./languages/data/Names.php
$wgLanguageCode = "en";

$wgSecretKey = "Long_Key";

# Changing this will log out all existing sessions.
$wgAuthenticationTokenVersion = "1";

# Site upgrade key. Must be set to a string (default provided) to turn on the
# web installer while LocalSettings.php is in place
$wgUpgradeKey = "Key";

## For attaching licensing metadata to pages, and displaying an
## appropriate copyright notice / icon. GNU Free Documentation
## License and Creative Commons licenses are supported so far.
$wgRightsPage = ""; 
# Set to the title of a wiki page that describes your license/copyright
$wgRightsUrl = "";
$wgRightsText = "";
$wgRightsIcon = "";

# Path to the GNU diff3 utility. Used for conflict resolution.
$wgDiff3 = "/usr/bin/diff3";

# The following permissions were set based on your choice in the installer
$wgGroupPermissions['*']['createaccount'] = false;
$wgGroupPermissions['*']['edit'] = false;
$wgGroupPermissions['*']['read'] = false;

## Default skin: you can change the default skin. Use the internal symbolic
## names, ie 'vector', 'monobook':
$wgDefaultSkin = "apex";

# Enabled skins.
# The following skins were automatically enabled:
wfLoadSkin( 'apex' );
wfLoadSkin( 'CologneBlue' );
wfLoadSkin( 'Modern' );
wfLoadSkin( 'MonoBook' );
wfLoadSkin( 'Vector' );


# Enabled extensions. Most of the extensions are enabled by adding
# wfLoadExtensions('ExtensionName');
# to LocalSettings.php. Check specific extension documentation for more details.
# The following extensions were automatically enabled:
wfLoadExtension( 'Cite' );
wfLoadExtension( 'CiteThisPage' );
wfLoadExtension( 'ConfirmEdit' );
wfLoadExtension( 'ImageMap' );
wfLoadExtension( 'InputBox' );
wfLoadExtension( 'Interwiki' );
wfLoadExtension( 'LocalisationUpdate' );
require_once "$IP/extensions/Lockdown/Lockdown.php";
wfLoadExtension( 'Nuke' );
wfLoadExtension( 'ParserFunctions' );
wfLoadExtension( 'PdfHandler' );
wfLoadExtension( 'Poem' );
wfLoadExtension( 'SpamBlacklist' );
wfLoadExtension( 'SyntaxHighlight_GeSHi' );
wfLoadExtension( 'TitleBlacklist' );
wfLoadExtension( 'WikiEditor' );


# End of automatically generated settings.
# Add more configuration options below.
# Permissions
$wgGroupPermissions['user']['createaccount'] = false;
$wgGroupPermissions['user']['read'] = true;
$wgGroupPermissions['user']['edit'] = false;
$wgGroupPermissions['user']['createpage'] = false;
$wgGroupPermissions['user']['createtalk'] = false;
$wgGroupPermissions['user']['writeapi'] = false;
$wgGroupPermissions['user']['move'] = false;

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

$wgFavicon = "/mediawiki/favicon.ico";

## Lockdown

## PRIVATE namespace
# определение собственных пространств имён
$wgExtraNamespaces[1000] = 'Private';
$wgExtraNamespaces[1001] = 'Private_talk';

# ограничение разрешения «read» только для админов
$wgNamespacePermissionLockdown[1000]['read'] = array('sysop');
$wgNamespacePermissionLockdown[1001]['read'] = array('sysop');

# предотвращение включения страниц из этого пространства имён
$wgNonincludableNamespaces[] = 1000;
$wgNonincludableNamespaces[] = 1001;

$wgActionLockdown['history'] = array('sysop');
$wgActionLockdown['edit'] = array('sysop');

# Edit namespasces only for admins
$wgNamespacePermissionLockdown[NS_PROJECT]['edit'] = array('sysop');

## End Lockdown

4 thoughts on “Установка MediaWiki”

  1. Алексей

    Здравствуйте,
    благодарю за столь подробную запись о WikiMedia.
    Возможно, у вас был опыт с тем как загрузить в Викимедия базу даных толкового словаря в формате .xdxf?
    Может сможете порекомендовать как из .xdxf можно перевести в форма викимедия .xml или .csv и как загрузить словарь в свещую версию Викимедия.
    Благодарю!

    1. Андрей

      Здравствуйте, Алексей
      Рад что моя статья пригодилась. К сожалению, у меня нет никакой информации по Вашему вопросу.

      1. Алексей

        В любом случае, благодарю за ответ, и за очень полезный сайт и информацию на нём.

Leave a Comment

Scroll to Top