Установка 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. На мой взгляд названия страниц в строке адреса на русском - нелепо и неудобно, но если вы не считаете это минусом - оставляйте русский.
Предупреждения и их устранение
Затем производится проверка и будут выданы предупреждения:
- 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 мне не понравилась и закомментировал всё обратно.
В результате получилось следующее:
Устанавливаем, предлагаю чётко выбрать ваш тип Вики - открытая/закрытая, это важный момент. После установки будет сгенерирован файл LocalSettings.php, который нужно закинуть в /var/lib/mediawiki, пользуемся программой WinSCP:
Ссылка для входа в 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-адрес. Тут важно поменять его в трех местах:
- В файле /etc/network/interfaces;
- В файле /etc/hosts;
- В файле LocalSettings.php.
Дополнение от 27.04.2017
В описании на сайте MediaWiki говорится, что с PHP 7.1 пока совместимо не до конца.
Однако у меня после обновления до PHP 7.1 MediaWiki вообще перестала работать. Apache при этом свою дефолтную страницу открывает, а вот MediaWiki index.php грузит как html, там код страницы и закомментированное предупреждение, смысл которого - у вас не настроено php.
В очередной раз убеждаюсь - обновление на новые версии без необходимости и когда всё работает - есть зло.
Может быть дело в ерунде какой-то, в одной настройке, может, не спорю, но под конец рабочего дня никакого желания разбираться нет. Восстановил из резервной копии. Порядок такой:
- Скопировать папку /var/lib/mediawiki себе на комп через WinSCP;
- Сделать дамп базы через putty (пусть база в MySQL называется dbwiki, пользователь базы dbuser, его пароль password) mysqldump --user=dbuser --password=password dbwiki > file.sql;
- Загрузить дампы себе на комп через WinSCP;
- Восстановить машину из резервной копии;
- Скопировать папку mediawiki обратно;
- Восстановить дамп 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
Здравствуйте,
благодарю за столь подробную запись о WikiMedia.
Возможно, у вас был опыт с тем как загрузить в Викимедия базу даных толкового словаря в формате .xdxf?
Может сможете порекомендовать как из .xdxf можно перевести в форма викимедия .xml или .csv и как загрузить словарь в свещую версию Викимедия.
Благодарю!
Здравствуйте, Алексей
Рад что моя статья пригодилась. К сожалению, у меня нет никакой информации по Вашему вопросу.
В любом случае, благодарю за ответ, и за очень полезный сайт и информацию на нём.
И Вам спасибо, Алексей