Установка 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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *