Difference between revisions of "Mediawiki4Intranet"

From Wiki4Intranet
Jump to: navigation, search
 
(135 intermediate revisions by 5 users not shown)
Line 1: Line 1:
[http://mediawiki.org/ MediaWiki] популярная [[WikiWiki|«вики»-система]], написанная на PHP и изначально создававшаяся в качестве «движка» [http://wikipedia.org/ Википедии]. Отличается отличной расширяемостью — существует более 1700 расширений к ней.
+
[[en:Mediawiki4Intranet/en]]
 +
[http://mediawiki.org/ MediaWiki] — популярная [[WikiWiki|«вики»-система]], написанная на PHP и изначально создававшаяся в качестве «движка» [http://wikipedia.org/ Википедии]. Отличается отличной расширяемостью — существует более 1700 расширений к ней.
  
 
<big>'''Mediawiki4Intranet'''</big> — сборка MediaWiki, содержащая в себе довольно большой набор расширений, полезных для внутрикорпоративной среды и, что очень важно, исправленных и «подруженных» между собой — большая часть ошибок, возникающих при интеграции, исправлена.
 
<big>'''Mediawiki4Intranet'''</big> — сборка MediaWiki, содержащая в себе довольно большой набор расширений, полезных для внутрикорпоративной среды и, что очень важно, исправленных и «подруженных» между собой — большая часть ошибок, возникающих при интеграции, исправлена.
 +
 +
Об установке см. [[#Установка]].
  
 
= Содержимое =
 
= Содержимое =
  
 
Сборка состоит из:
 
Сборка состоит из:
* Кода оригинальной MediaWiki.
+
* Доработанного ядра MediaWiki (оригинал + набор патчей).
* Установленных расширений.
+
* Расширений MediaWiki:
* Набора патчей.
+
** Оригинальных, то есть, нетронутых.
* Нескольких готовых конфигураций для простого создания <tt>LocalSettings.php</tt>.
+
** Доработанных незначительно, в виде «оригинал + набор патчей» для каждого.
 +
** Форкнутых, то есть, доработанных значительно, в простом виде гитхаб-репозитория.
 +
** Новых, созданных нами.
 +
* Скрипта установки «[[repo.php]]».
 +
* Нескольких готовых конфигураций типа <tt>LocalSettings.php</tt> для быстрой установки.
 +
* Нескольких дополнительных утилит обслуживания.
  
Лицензия распространения большинства этого добра: GPLv2, как и у самой MediaWiki. /* Надеемся, что тивоизация нам всё-таки не грозит :) */
+
Лицензия на сборку — GNU GPLv3 или новее. Почему? Потому, что:
 +
* MediaWiki и большинство расширений распространяются под GPLv2+.
 +
* Часть расширений — под Permissive лицензиями.
 +
* Часть расширений — под GPLv3+.
 +
Соответственно, на сборку целиком распространяется наиболее жёсткая из этих свободных лицензий, а именно, GPLv3.
  
 
== MediaWiki ==
 
== MediaWiki ==
  
Код MediaWiki берётся из [http://svn.wikimedia.org/svnroot/mediawiki/ SVN Wikimedia].
+
Код доработанного ядра и расширений MediaWiki, а также расширений, созданных нами, живёт на Github у организации «mediawiki4intranet»: https://github.com/mediawiki4intranet/. Там есть репозиторий с ядром MediaWiki, репозиторий с конфигурациями и скриптами деплоя и обслуживания, а также по репозиторию на каждое расширение и тему оформления MediaWiki.
  
Версия Mediawiki4Intranet может отставать от стабильной, ибо различия между версиями MediaWiki не так уж и велики, а вот патчи менять приходится.
+
Код оригинальной MediaWiki, кстати, раньше жил в Subversion, а теперь живёт в [[rupedia:Git]]-репозиториях Wikimedia, по адресам вида:
 +
* Ядро: https://gerrit.wikimedia.org/r/gitweb?p=mediawiki/core.git
 +
* Расширение {{red|XXX}}: <nowiki>https://</nowiki>gerrit.wikimedia.org/r/gitweb?p=mediawiki/extensions/{{red|XXX}}.git
  
Версия MediaWiki, лежащая в основе сборки: '''1.16.2''' (до недавнего времени 1.14.1).
+
Версия Mediawiki4Intranet несколько отстаёт от наиболее свежей стабильной, ибо внешние различия между версиями MediaWiki не так уж и велики, но при этом в новых могут вылезать баги (вроде [https://bugzilla.wikimedia.org/show_bug.cgi?id=37209 Bug 37209]), и на обновление всех доработок сборки приходится тратить некоторое время.
 +
 
 +
Историй версий MediaWiki в основе Mediawiki4Intranet:
 +
* 2016-09-14 &rarr; текущая: '''1.26.4'''
 +
* 2016-07-04 &rarr; 2016-09-14: '''1.26.3'''
 +
* 2015-12-21 &rarr; 2016-07-04: '''1.26.2'''
 +
* 2015-10-15 &rarr; 2015-12-21: '''1.26 beta'''.
 +
* 2014-06-03 &rarr; 2015-10-15: '''1.21.10'''.
 +
* 2014-01-31 &rarr; 2014-06-03: '''1.21.5'''.
 +
* 2014-01-14 &rarr; 2014-01-31: '''1.21.3'''.
 +
* 2012-11-20 &rarr; 2014-01-14: '''1.18.5'''.
 +
* 2012-02-22 &rarr; 2012-11-20: '''1.18.1'''.
 +
* 2011-02-08 &rarr; 2012-02-22: '''1.16.2'''.
 +
* 2010-10-09 &rarr; 2011-02-08: '''1.14.1'''.
 +
* &rarr; 2010-10-09: '''1.13.1''' (в репозиториях отсутствует).
  
 
== Патчи ==
 
== Патчи ==
  
Патчи содержат в себе изменения в код самой MediaWiki, а также небольшие изменения в расширениях, ради которых не хочется поддерживать отдельную версию этих расширений.
+
В виде патчей оформляются либо мелкие доработки расширений, либо любые доработки ядра MediaWiki. Сами патчи хранятся в Git-репозитории в виде обычных коммитов, организованных в серию, по принципу 1 коммит = 1 патч.
  
В '''MediaWiki4Intranet''' патчи хранятся в Feature Branches, то есть, в Mercurial-репозитории есть ветка «'''mediawiki-x.xx'''» (например, mediawiki-1.16), содержащая оригинальный код MediaWiki (плюс расширения, в которые изменения вносятся только патчами), по ветке на каждый патч, и ветка «'''all'''», содержащая все патчи, объединённые вместе. Для удобства объединений используется расширение Mercurial [http://arrenbrecht.ch/mercurial/pbranch/ pbranch].
+
{{warning}} При внесении изменений в уже существующий патч вместо добавления новых коммитов происходит {{red|переписывание истории}}! Это приводит к некоторым неудобствам при обновлении веток (нужно руками делать git reset), но зато, по крайней мере, каждый патч достаточно легко выделить и отправить авторам.
  
Какие плюсы это даёт:
+
Описание всех патчей, входящих в сборку MediaWiki4Intranet, читайте на странице: [[Mediawiki4Intranet/Патчи]].
* Патчи не смешиваются, поэтому поддерживается высокий порядок — можно взять отдельный патч и отправить в upstream или, например, удалить.
+
* Если патчи экспортировать в [http://www.gnu.org/software/diffutils/ Unified diff]-формате, между ними гарантированно не возникнет конфликтов, так как ещё на стадии объединения конфликты либо устраняются, либо вносится зависимость между патчами.
+
  
А единственный минус — высокая сложность графа ветвлений в Mercurial-репозитории.
+
== Расширения ==
  
Ветки отдельных патчей отпочкованы от оригинальной, и все изменения, вносимые этими патчами, просто фиксируются в соответствующие ветки. Обновления кода MediaWiki и расширений коммитятся в «оригинальную» ветку и merge’атся в ветки патчей, а затем и в ветку «all».
+
Отличная расширяемость без использования патчей — важнейшая фишка MediaWiki. Расширения используют заранее заданные в коде точки интеграции («Hooks») и добавляют в MediaWiki новый функционал без необходимости вносить изменения в ядро.
  
Далее ко всему этому безобразию, тоже отдельной веткой ('''mw4i-ext'''), добавляются SVN-репозиторий, содержащий собственные и сильно доработанные расширения, инструменты и конфигурационные файлы; после чего ветки '''all''' и '''mw4i-ext''' объединяются в «установочную» ветку '''mw4install'''.
+
Описание всех расширений, входящих в сборку MediaWiki4Intranet, читайте на странице: [[Mediawiki4Intranet/Расширения]].
  
Всего: 35 патчей.
+
== Список изменений ==
  
=== Исправления багов ===
+
Изменения в версии Mediawiki4Intranet 1.26 (по сравнению с 1.21): [[Mediawiki4Intranet/1.26]]
  
То есть патчи, исправляющие какие-либо ошибки. Всего: 15.
+
= Установка =
  
<tab sep="bar" class="wikitable sortable" head="topleft">
+
== Установка через Docker ==
Аббр. | Дата добавления | Имя | Описание патча
+
CEB | 2010-02-03 | categorytree-empty-bullets | Патч расширения CategoryTree, чтобы оно не предлагало разворачивать пустые на самом деле категории.
+
CRNR | 2011-03-28 | cite-refsnoreferences | Патч расширения Cite + в код MediaWiki, в большей части случаев исправляющий ошибку «Ошибка цитирования: для несуществующего тега &lt;ref> не найдено тега &lt;references />», некорректно возникающую при использовании расширений, которые сами где-нибудь используют парсер без сброса состояния.
+
DCLD | 2009-11-11 | dont-call-linkholders-__destruct | Исправление некорректного явного вызова деструктора mLinkHolders в парсере.
+
DCS | 2009-11-24 | debug-categorized-specialrecentchanges | Исправление выбора по категориям в «[[Special:RecentChanges|Свежих правках]]».
+
DNL | 2009-08-12 | discussion-newsection-links | Ссылки на несуществующие страницы обсуждений сделаны по умолчанию ссылками на добавление секции.
+
DSSUC | 2010-03-26 | dont-suppress-same-user-conflicts | Не игнорировать конфликты редактирования, произошедшие из-под одного юзера.
+
EHC | 2009-09-11 | bug53818-empty-heading-crutch | Ликвидация пустых заголовков (строк вида ====) из текста статьи, вместо того, чтобы принимать б'''о'''льшую часть = за маркеры заголовка, а два внутренних = — за текст заголовка.
+
FFP3 | 2009-08-12 | fixes-for-php-5.3.0 | Исправления предупреждений (warnings) под PHP 5.3 и выше, в некоторых файлах MediaWiki и расширении Interwiki.
+
FL | 2010-12-29 | fix-l10n | Исправление сообщения noarticletext в русском языке, добавление формата даты «YYYY-MM-DD HH:MM:SS» без дурацкого «T» между ними.
+
FPH | 2010-12-14 | fix-pdfhandler | Патч расширения PdfHandler, убрано экранирование <tt>$wgPdfProcessor</tt>'а, ссылки на PDF-файл с его страниц теперь ведут на саму страницу.
+
GS | 2009-11-19 | gdalwaysresample-setting | Настройка <tt>$wgGDAlwaysResample</tt> GD, если true, то миниатюры gif’ок получаются более качественными (они всегда уменьшаются с интерполяцией).
+
NSF | 2010-06-25 | no-session-fail | Ликвидация лишней попытки сохранения и «ошибок потери данных сессии» при переходе на форму редактирования статьи с передачей текста в окно редактирования.
+
UALE | 2009-12-21 | upload-autofill-lowercase-extensions | Автоматическая смена регистра расширения загружаемого файла на нижний. Плюс настройка <tt>$wgMaxFilenameLength</tt> максимальной длины имени файла в списках файлов с миниатюрами — в оригинале забито гвоздями значение 20, что очень мало, и из-за чего имена файлов часто обрезаются.
+
USDMS | 2009-06-03 | unauth-save-display-modified-source | Показ '''изменённого''', а не оригинального текста статьи при запрещённой попытке сохранения. Нужен, чтобы пользователь не потерял свои изменения при нажатии «Сохранить», если сохранять ему на самом деле запрещено.
+
WDCS | 2009-12-14 | wfmsg-dont-clear-stripstate | По умолчанию не очищать <tt>$parser->mStripState</tt> при дополнительных вызовах <tt>parse()</tt>. Исправляет некоторое количество ошибок с непонятными длинными иероглифическими маркерами «--……..uniq--» в тексте статьи на месте каких-либо данных. На самом деле причина ошибки более глубока: ''парсер MediaWiki нереентерабелен'', авторы об этом знают и, возможно, когда-нибудь исправят.
+
</tab>
+
  
=== Доработки ===
+
Простейший способ установить Mediawiki4Intranet — использовать [https://www.docker.com/ Docker]. Наш репозиторий с образом Docker:
  
То есть патчи, добавляющие какой-либо новый функционал. Всего: 20.
+
https://github.com/mediawiki4intranet/docker
  
<tab sep="bar" class="wikitable sortable" head="topleft">
+
Чтобы установить Mediawiki4Intranet через Docker, установите себе в систему Docker, склонируйте данный репозиторий, зайдите в склонированную директорию и запустите команду:
Аббр. | Дата добавления | Имя | Описание патча
+
AH | 2010-07-23 | add-hooks | Добавление хуков. Требуется для расширений <tt>HttpAuth</tt> (для авторизации методом HTTP Basic) и <tt>Wikilog</tt> (для группировки свежих правок комментариев в блогах по имени поста на странице «улучшенных» свежих правок).
+
ALT | 2009-11-20 | anchor-link-tocnumbers | Поддержка автоматической простановки номеров секций в ссылках на секции текущей страницы. То есть в ссылки вида «<tt><nowiki>[[#Раздел]]</nowiki></tt>» будет автоматически добавлен номер секции («2. Раздел»).
+
CSL | 2010-03-25 | category-subcatlist | Патч расширения CategoryTree. Новый метод группировки страниц в категориях — не по первой букве имени, а по другим категориям, в которых они также перечислены. Чтобы включить этот метод, на страницу категории нужно добавить магическое слово &#x5F;_CATEGORYSUBCATLIST__.
+
DAT | 2009-08-07 | dot-after-tocnumber | Настройка <tt>$wgDotAfterTocnumber</tt>, если true, то после номеров разделов в оглавлении ставится точка.
+
DBT | 2010-05-21 | detailed-badtitle | Детализация сообщений об ошибках недопустимого имени страницы.
+
DSAH | 2009-10-23 | detect-script-allow-html | Разрешение изменения списка тегов, запрещённых в тексте загруженных файлов — настройка <tt>$wgForbiddenTagsInUploads</tt>.
+
EP | 2011-02-18 | env-proxy | Поддержка настроек HTTP прокси, заданных в стандартных переменных окружения http_proxy, http_no_proxy, при загрузке изображений по URL.
+
FVS | 2011-02-11 | fix-vector-skin | Небольшая доработка и исправление скина Vector — возвращение возможности поместить поле поиска в левую панель через [[MediaWiki:Sidebar]] (что за тупость — удалять возможность). Плюс увеличение ширины верхнего поля поиска.
+
HE | 2010-04-21 | html-emails | Часть расширения EnotifDiff. Поддержка отправки почты об изменениях и подтверждении e-mail адреса в формате HTML, а не в виде чистого текста.
+
IAR | 2011-02-25 | intraacl-rights | Часть расширения [[IntraACL]]. Проверки прав доступа к страницам во всём коде MediaWiki. Собственно это и обеспечивает защиту.
+
IEIC | 2009-05-13 | import-export-images-and-conflicts | [[MW_Import&Export|Очень сильно улучшенный импорт/экспорт]] страниц MediaWiki. Отправлен в [https://bugzilla.wikimedia.org/show_bug.cgi?id=22881 Wikimedia Bug 22881].
+
ITF | 2011-02-11 | imagethumb-transform-flags | Передавать данные о том, откуда вызывается создание миниатюры файла. Нужно для FlvHandler’а, чтобы не вставлять код видеоплеера в галереи файлов и в миниатюры файлов в истории ревизий.
+
LPWC | 2011-03-23 | longpagewarning-config | Поддержка настройки лимита размера статьи, по истечении которого показывается предупреждение [[MediaWiki:Longpagewarning]]. Баг такой у разработчиков mediawiki стоит, но решение они для него предложили очень странное — убрали нафиг проверку и разрешили делать эту проверку на уровне функций парсера. Глупость.
+
LSA | 2011-03-23 | lcstore-accel | Поддержка кэширования локализации (LocalisationCache) в PHP ускорителе типа XCache. Странно, что этого нет в оригинале.
+
PDD | 2011-02-11<br />&larr; 2010-07-26 | parser-debug-doblocklevels | Разрешать включать <tt><nowiki><center>...</center></nowiki></tt> и <tt><nowiki><blockquote>...</blockquote></nowiki></tt> внутрь абзаца. Две даты добавления — потому что патч, по сути, имел две версии — первая добавляла тупой хак, местами ломавший тесты, а вторая включает почти полностью переписанный корректный метод doBlockLevels().
+
REF | 2010-12-14 | rearrange-editform | Перемещение списков использованных в статье шаблонов и скрытых категорий на странице редактирования '''под форму редактирования''', то есть, за пределы элемента &lt;form>. Что необходимо для того, чтобы текст <tt>[[wikipedia:User:Cacycle/wikEd|WikEd]]</tt>'овского AJAX-предпросмотра, то есть HTML-текст статьи, не включался в форму, потому что он сам может включать в себя формы, и тогда их содержимое некорректным образом попадает в форму редактирования, что потенциально приводит к неприятным багам. Плюс настройка <tt>$wgNoCopyrightWarnings</tt> для отключения предупреждений о копирайте (MediaWiki:Copyrightwarning, MediaWiki:Copyrightwarning2).
+
SHL | 2009-06-18 | shift-included-templates-heading-levels | «Сдвиг» уровня заголовков статьи при её включении в подзаголовок. То есть если она включается под заголовком уровня N, то её заголовки 1-го уровня станут (1+N)-ого уровня, 2-го — (2+N), и т. п.
+
SNH | 2009-05-13 | signature-nohyphen | Вставка подписей нажатием кнопки без двух лидирующих минусов «--». Плюс <tt><nowiki><m>...</m></nowiki></tt> вместо <tt><nowiki><math>...</math></nowiki></tt> на кнопке вставки TeX-формул (обрабатывается расширением MarkupBabel).
+
TFN | 2009-05-13 | translit-upload-filenames | Автоматическое транслитерирование физических имён файлов (то есть имён файлов на диске) с кириллицы на латиницу под Windows.
+
TS | 2010-10-15 | transclude-sections | Поддержка включений секций страниц с помощью синтаксиса вида <tt><nowiki>{{:Статья#Секция}}</nowiki></tt>.
+
</tab>
+
  
=== Устаревшие патчи ===
+
<pre>
 +
docker build -t mediawiki4intranet .
 +
</pre>
  
Под устаревшими понимаются патчи, более не нужные в связи с обновлением лежащего в основе кода. По сути, это означает, что данный патч либо исправлял какой-то баг, который исправили уже и сами авторы, либо был сам принят в состав MediaWiki (таких пока что, правда, нет), либо был переименован.
+
Это соберёт образ системы Mediawiki4Intranet. Чтобы запустить на основе этого образа контейнер, запустите:
  
<tab sep="bar" class="wikitable sortable" head="topleft">
+
<pre>
Аббр. | Дата добавления | Имя | Описание патча
+
docker run --name mw4i -p 8077:80 -v /home/wiki4intranet/data -t -d mediawiki4intranet
CRDP | 2010-01-12 | cite-reenterability-for-different-parser-objects | Патч расширения Cite, направленный на его реентерабельность.
+
</pre>
FCRW | 2009-05-13 | fix-cannot-redeclare-wfspecialupload | Исправление ошибки «Fatal error: Cannot redeclare wfspecialupload()» при загрузке изображения без авторизации. Плюс поддержка HTTP прокси, заданной в стандартной переменной окружения http_proxy, при загрузке изображений по ссылке.
+
HAR | 2010-04-27 | haloacl-rights | ''/* переименован в intraacl-rights */'' Часть расширения HaloACL. Проверки прав доступа к страницам во всём коде MediaWiki. Собственно это и обеспечивает защиту.
+
IGTT | 2009-09-11 | imagegallery-tell-transform, imagepage-tell-transform | ''/* патчи объединены в imagethumb-transform-flags */'' Передавать данные о том, откуда вызывается создание миниатюры файла. Нужно для FlvHandler’а, чтобы не вставлять код видеоплеера в галереи файлов и в миниатюры файлов в истории ревизий.
+
TMF4 | 2009-11-24 | trunk-mediafunctions-for-1.14 | Патч trunk-версии расширения MediaFunctions, позволяющий ей работать в MediaWiki 1.14.1.
+
</tab>
+
  
== Расширения ==
+
После чего откройте в браузере адрес http://localhost:8077 и заходите в wiki с логином-паролем WikiSysop/MediaWiki4Intranet.
  
Для большинства расширений, присутствующих в [http://svn.wikimedia.org/svnroot/mediawiki/ SVN Wikimedia], используется их версия, соответствующия версии MediaWiki — например, для версии 1.14.1 расширения берутся из [http://svn.wikimedia.org/svnroot/mediawiki/tags/REL1_14_1/extensions tags/REL1_14_1/extensions]. Однако версии некоторых расширений, соответствующие версии MediaWiki, имеют различные неприятные баги, или их там вообще ещё нет, и тогда берётся их '''trunk'''-версия (то есть самая новая) из [http://svn.wikimedia.org/svnroot/mediawiki/trunk/extensions trunk/extensions], возможно, как-то допиливается, например, с помощью патчей, и включается в сборку.
+
{{Box|{{Warning}} В Docker образе не сконфигурирована отправка почты, так как она требует либо настроенного MTA, либо SMTP подключения, а это зависит от окружения, в котором вы запускаете контейнер. Чтобы это исправить, либо пропишите в LocalSettings.php конфигурацию [https://www.mediawiki.org/wiki/Manual:$wgSMTP $wgSMTP] (для использования внешнего SMTP-сервера), либо установите внутрь контейнера sendmail/postfix и настройте его (это, к сожалению, пока надо делать вручную).}}
  
Есть и расширения, которые вообще не попали в SVN, и у которых нет даже своего репозитория с кодом, а есть только где-то выложенные файлики, или даже просто PHP-код на вики-страницах. Такие сохраняются в нашем локальном SVN, там же дорабатываются, и включаются в сборку оттуда. Вообще говоря, у нас есть ''«супер-система»'' автоматического объединения кода и патчей из нескольких источников на основе [http://mercurial.selenic.com/ Mercurial] и [http://arrenbrecht.ch/mercurial/pbranch/ pbranch], но это немного другая история.
+
=== Сборка с VisualEditor ===
  
Всего: 58.
+
В репозитории есть два Dockerfile'а: базовый без VisualEditor и отдельный с оным. Соответственно, чтобы использовать сборку с VisualEditor, вместо одной команды build нужно запустить две:
  
Статус — это статус доработок расширения. Легенда:
+
<pre>
 +
docker build -t mediawiki4intranet .
 +
docker build -t mediawiki4intranet/ve -f ve.Dockerfile .
 +
</pre>
  
;{{/Неизм}} = Не изменённые: Включены в сборку без изменений. Всего: .
+
После чего запускать полученный образ аналогично:
;{{/Отлаж}} = Отлаженные: Включены в сборку после отладки, back-портирования, либо мелких доработок. Всего: .
+
;{{/Дораб}} = Доработанные: Включены в сборку после '''сильной''' доработки. Всего: .
+
;{{/Созд}} = Созданные: Созданные специально в рамках сборки. Всего: .
+
  
Даты изменений:
+
<pre>
; Оригинал: Дата последней модификации оригинальной (не 4intranet) версии расширения, если таковая существует.
+
docker run --name mw4i -p 8077:80 -v /home/wiki4intranet/data -t -d mediawiki4intranet/ve
; Включено: Дата первого включения расширения в сборку.
+
</pre>
; Последняя: Дата последнего изменения расширения в сборке, если что-то менялось.
+
  
<tab sep="bar" class="wikitable sortable" head="topleft">
+
== Ручная установка ==
Статус | Название | Оригинал | Включено | Последняя | Описание
+
{{/Неизм}} | [[mediawikiwiki:Extension:AllowGetParamsInWikilinks|AllowGetParamsInWikilinks]] | 2009-04-27 | 2009-12-01 | - |Разрешение использования URL-параметров (?key=value) во внутренних вики-ссылках.
+
{{/Неизм}} | [[mediawikiwiki:Extension:CharInsert|CharInsert]] | 1.16.2 | 2008-10-15 | - |Поддержка вставки шаблонов <tt>&lt;charinsert></tt> для [[MediaWiki:Edittools]]. См. также UserMessage, CharInsertList.
+
{{/Неизм}} | [[mediawikiwiki:Extension:DeleteBatch|DeleteBatch]] | 1.16.2 | 2009-07-21 | - |Удаление множества страниц сразу со спецстраницы [[Служебная:DeleteBatch]].
+
{{/Неизм}} | [[mediawikiwiki:Extension:Full Local Image|FullLocalImage]] | 2006-10-31 | 2009-09-08 | - |Добавление функций <tt><nowiki>{{fullimage:ФАЙЛ}}</nowiki></tt> и <tt><nowiki>{{localimage:ФАЙЛ}}</nowiki></tt>, возвращающих путь хранения файла на сервере (полный в первом случае и относительный во втором).
+
{{/Неизм}} | [[mediawikiwiki:Extension:Google Analytics|Google Analytics]] | trunk | 2010-01-14 | - |Гугловский счётчик. Можно подключать на виках, установленных в интернете.
+
{{/Неизм}} | [[mediawikiwiki:Extension:PagedTiffHandler|PagedTiffHandler]] | trunk | 2011-01-14 | - |Поддержка TIFF-картинок.
+
{{/Неизм}} | [[mediawikiwiki:Extension:ParserFunctions|ParserFunctions]] | 1.16.2 | 2008-10-15 | - |Функции парсера типа <tt><nowiki>{{#if:}}</nowiki></tt>, <tt><nowiki>{{#ifeq:}}</nowiki></tt> и т. п. '''[[mediawikiwiki:Help:Extension:ParserFunctions|Справка тут]].'''
+
{{/Неизм}} | [[mediawikiwiki:Extension:PreferencesExtension|PreferencesExtension]] | 1.16.2 | 2009-04-01 | - |Расширение, используемое другими расширениями для добавления пользовательских настроек. Нужно в версиях MediaWiki < 1.16.
+
{{/Неизм}} | [[mediawikiwiki:Extension:Renameuser|Renameuser]] | trunk | 2010-10-05 | - |Переименование пользователя с корректным обновлением ссылок на него в БД.
+
{{/Неизм}} | [[mediawikiwiki:Extension:SimpleForms|SimpleForms]] | 1.16.2 | 2010-10-26 | - |Поддержка добавления на страницы формочек с целью простого создания новых страниц по шаблону.
+
{{/Неизм}} | [[mediawikiwiki:Extension:StringFunctions|StringFunctions]] | 1.16.2 | 2008-11-17 | - |Строковые функции парсера типа <tt><nowiki>{{#sub:}}</nowiki></tt>. В новых версиях объединены с ParserFunctions, но у нас 1.14.1, а там ещё нет.
+
{{/Неизм}} | [[mediawikiwiki:Extension:SyntaxHighlight_GeSHi|SyntaxHighlight_GeSHi]] | 1.16.2 | 2008-10-15 | - |Поддержка подсветки синтаксиса в большинстве распространённых языков программирования с помощью [http://qbnz.com/highlighter/ GeSHi]. Используется тег '''<tt>&lt;source&gt;</tt>'''. И будет использоваться всегда, несмотря на то, что в новых версиях расширения его заменяют <tt>&lt;syntaxhighlight&gt;</tt> (маразм).
+
{{/Неизм}} | [[mediawikiwiki:Extension:UserMerge|UserMerge]] | trunk | 2010-10-05 | - |Объединение и удаление учётных записей пользователей с корректным изменением ссылок в БД.
+
{{/Неизм}} | [[mediawikiwiki:Extension:WhoIsWatching|WhoIsWatching]] | 1.16.2 | 2010-10-05 | - |Даёт ответ на вопрос «кто наблюдает за данной страницей?» со страницы [[Служебная:WhoIsWatching]].
+
{{/Неизм}} | [[mediawikiwiki:Extension:WikiCategoryTagCloud|WikiCategoryTagCloud]] | 1.16.2 | 2010-10-05 | - |Вставка облаков тегов на страницы. Тегами считаются категории.
+
  
{{/Отлаж}} | [[mediawikiwiki:Extension:Cite|Cite]]      | 1.16.2        | 2010-10-05    | -    |Поддержка сносок на вики-страницах (теги <tt>&lt;ref&gt;</tt> и <tt>&lt;references&gt;</tt>). Внесены изменения '''патчем'''.
+
=== Скачать код ===
{{/Отлаж}} | [[mediawikiwiki:Extension:MediaFunctions|MediaFunctions]]  | trunk | 2009-10-24    | -    |Поддержка функций для получения информации о загруженных файлах. Внесены изменения '''патчем''' для работы trunk’овой версии в 1.14.1.
+
{{/Отлаж}} | [[mediawikiwiki:Extension:PdfHandler|PdfHandler]]  | trunk | 2009-10-25    | -    |Медиаобработчик для PDF-файлов. То есть, поддержка загрузки PDF’ок, их постраничного просмотра и вставки страниц PDF как изображений. Иногда может создавать проблемы, ибо ghostscript обрабатывает некоторые PDF’ки с очень большим трудом, потреблением дискового пространства на <tt>/tmp</tt> и процессорного времени. Внесены изменения '''патчем'''.
+
{{/Отлаж}} | [[mediawikiwiki:Extension:MultiCategorySearch|MultiCategorySearch]]        | 1.16.2        | 2010-10-14    | 2010-10-14    |Спецстраница [[Служебная:MultiCategorySearch]] для поиска страниц, включённых в несколько категорий сразу.
+
{{/Отлаж}} | [[mediawikiwiki:Extension:SimpleTable|SimpleTable]]        | 1.16.2        | 2009-03-27    | 2011-03-28    |Поддержка простого синтаксиса для вставки таблиц — тега <tt>&lt;tab></tt>.
+
{{/Отлаж}} | [[mediawikiwiki:Extension:Drafts|Drafts]]  | 1.16.2        | 2009-06-15    | 2011-03-03    |Поддержка сохранения черновиков в процессе редактирования страниц, плюс авто-сохранение каждую минуту, чтобы не потерять свои труды, если браузер вдруг накроется.
+
{{/Отлаж}} | [[mediawikiwiki:Extension:CategoryTree|CategoryTree]]      | 1.16.2        | 2008-10-15    | -    |AJAX-раскрываемые деревья категорий на [[Служебная:CategoryTree|спецстранице]] и страницах самих категорий. Внесены изменения '''патчами''' для поддержки альтернативной группировки страниц в категории и удаления плюсиков ([+]) у категорий, не содержащих подкатегорий, в деревьях.
+
{{/Отлаж}} | [[mediawikiwiki:Extension:AnyWikiDraw|AnyWikiDraw]]        | 1.16.2        | 2008-10-15    | 2011-02-09    |Поддержка вставки рисованных с помощью Java-апплета картинок на вики-страницы. Увы, нетривиальна в эксплуатации, ибо апплет.
+
{{/Отлаж}} | [[mediawikiwiki:Extension:OpenID|OpenID]]  | trunk | 2009-05-15    | 2010-12-08    |Поддержка входа в вики по офигически глючной, но самой распространённой технологии единого входа — [http://www.openid.net OpenID].
+
{{/Отлаж}} | [[mediawikiwiki:Extension:Interwiki|Interwiki]]    | trunk | 2008-10-15    | -    |Междувиковые ссылки, включения, редактирование таблиц интервики. Внесены изменения '''патчем'''.
+
{{/Отлаж}} | [[mediawikiwiki:Extension:reCAPTCHA|reCAPTCHA]]    | 2007-05-31    | 2009-12-21    | -    |Реализация популярной [[rupedia:CAPTCHA|CAPTCHA]] («Публичного Полностью Автоматического Теста Тьюринга для Различения Компьютера и Человека»), короче говоря, антиспам для вики-систем, установленных в интернете. У нас, кстати, по умолчанию только что зарегистрированные пользователи не могут создавать новые страницы.
+
{{/Отлаж}} | [[mediawikiwiki:Extension:Form|SpecialForm]]      | 2009-07-26    | 2009-11-06    | 2010-07-26    |Ещё одно расширение для создания страниц из форм по шаблонам. Вероятно, от него вскоре полностью откажемся в пользу SimpleForms.
+
{{/Отлаж}} | [[mediawikiwiki:Extension:SVNIntegration|SVNIntegration]]  | 2009-02-17    | 2009-06-18    | 2011-02-11    |Не используется и является хорошей «дырой» в subversion, но позволяет вставлять на страницы файлы из Subversion или информацию о них.
+
{{/Отлаж}} | [[mediawikiwiki:Extension:PlantUML|PlantUML]]      | 2010-02-13    | 2010-08-03    | 2010-06-25    |Рисование UML-диаграмм с помощью [http://plantuml.sourceforge.net/ PlantUML].
+
{{/Отлаж}} | [[mediawikiwiki:Extension:Workflow|Workflow]]      | 2009-07-09    | 2009-07-03    | 2009-07-06    |Небольшое расширения для вставки «переключаемых» состояний страниц (можно назвать «информерами»), реализованных через категории.
+
{{/Отлаж}} | [[mediawikiwiki:Extension:SVGEdit|SVGEdit]]        | [http://svn.wikimedia.org/viewvc/mediawiki/trunk/extensions/SVGEdit/?pathrev=81655 svn81655]<br />SVGEdit&nbsp;2.5.1      | 2010-11-25    | 2011-03-09    |Поддержка браузерного JavaScript-редактора [http://code.google.com/p/svg-edit/ SVG-Edit] для редактирования SVG’шек в MediaWiki. Ошибка синхронизации при открытии, кстати, исправлена.
+
{{/Дораб}} | [[Calendar (MediaWiki)|Calendar]]  | 2009-08-04    | 2010-05-26    | 2011-03-23    |Расширение-календарь событий для MediaWiki, на котором каждое событие, либо каждый день с событиями, хранится на вики-странице.
+
{{/Дораб}} | [[FlvHandler (MediaWiki)|FlvHandler]]      | 2009-09-18    | 2009-09-09    | 2010-11-15    |Поддержка вставки Flash-видеоплееров на страницы с использованием обычного синтаксиса <tt><nowiki>[[Файл:Видео.mp4]]</nowiki></tt>. Поддерживаются видеокодеки FLV+MP3 или H.264+AAC в контейнерах FLV или MP4.
+
{{/Дораб}} | [[mediawikiwiki:Extension:MagicNumberedHeadings|MagicNumberedHeadings]]    | 2007-09-06    | 2009-11-20    | 2009-12-18    |Магические слова <tt>&#x5F;_NUMBEREDHEADINGS__</tt> и <tt>&#x5F;_NONUMBEREDHEADINGS__</tt>, принудительно включающие/выключащие нумерацию заголовков на страницах вне зависимости от пользовательских настроек. В оригинальной версии есть только включающее слово.
+
{{/Дораб}} | [[mediawikiwiki:Extension:SphinxSearch|SphinxSearch]]      | 2010-09-15    | 2008-10-15    | 2011-03-23    |Замена стандартного вики-поиска поиском на основе движка [http://sphinxsearch.com/ Sphinx]. Также см. инструкции по установке: [[SphinxSearch (Mediawiki4Intranet)#Установка]].
+
{{/Дораб}} | [[mediawikiwiki:Extension:Wikilog|Wikilog]]        | [http://svn.wikimedia.org/viewvc/mediawiki/trunk/extensions/Wikilog/?pathrev=62933 svn62933]  | 2009-09-08| 2011-03-23    |Блоги, форумы, иерархические комментарии, календарик записей на основе MediaWiki, импорт блогов из экспортных файлов [http://blogger.com blogger.com]. Заметка по поводу качества кода: авторы (в основном Juliano F. Ravasi), по-моему, перемудрили с объектной ориентированностью, всё это можно было написать раза в 2 компактнее.
+
  
{{/Созд}} | [[BatchEditor (MediaWiki)|BatchEditor]] | - | 2008-10-14 | 2011-03-28 |Расширение для массового редактирования множества страниц с помощью замен строк или регулярных выражений.
+
Варианты:
{{/Созд}} | [[BugzillaBuglist (MediaWiki)|BugzillaBuglist]] | - | 2010-11-12 | 2010-12-28 |Расширение для включения списков багов из [[Bugzilla]] из-под специально заданного пользователя (соответственно, со специально заданными правами). В виде обычных таблиц.
+
{{/Созд}} | [[CategoryTemplate (MediaWiki)|CategoryTemplate]] | - | 2009-03-25 | 2010-11-18 |Расширение для быстрого создания страниц в категории по шаблону.
+
{{/Созд}} | [[CharInsertList (MediaWiki)|CharInsertList]] | - | 2010-04-05 | 2011-01-14 |Расширение, похожее на [[mediawikiwiki:Extension:CharInsert|CharInsert]], полезное исключительно для использования с «EditTools», и позволяющее вставлять выпадающие списки для вставки шаблонов, аналогичных CharInsert’овским.
+
{{/Созд}} | [[CustisScripts]] | - | 2008-10-14 | 2011-03-29 |«композитное» пока-что не разделённое расширение. Включает в себя: <tt>[[wikipedia:User:Cacycle/wikEd|WikEd]]</tt>, русскоязычный <tt>[[rupedia:Википедия:Викификатор|Викификатор]]</tt>, «автопредпросмотр» AKA Live Preview (показывает в отдельном окне браузера автоматически обновляемый в процессе редактирования предварительный просмотр страницы), плюс несколько изменений CSS стилей.
+
{{/Созд}} | [[DocExport]] | - | 2008-10-14 | 2011-02-25 |
+
{{/Созд}} | [[EnotifDiff (MediaWiki)|EnotifDiff]] | - | 2009-04-01 | 2011-02-28 |Отправка почты об изменениях наблюдаемых страниц в формате HTML, опциональное включение в них diff’ов (текстов различий), отправка писем о подтверждении e-mail адресов в формате HTML.
+
{{/Созд}} | [[GlobalAuth (MediaWiki)|GlobalAuth]] | - | 2010-07-21 | 2011-02-11 |Поддержка [[Глобальная авторизация в веб-системах|самопального веб-протокола Single Sign-On]] в MediaWiki (как клиентской, так и серверной стороны).
+
{{/Созд}} | [[HttpAuth (MediaWiki)|HttpAuth]] | - | 2010-09-03 | 2010-09-03 |Поддержка входа в Wiki с использованием HTTP Basic авторизации. Полезно, например, для доступа к RSS/Atom лентам в закрытых с помощью HaloACL вики-системах из читалок.
+
{{/Созд}} | [[IntraACL]] | - | 2011-02-25 | 2011-03-22 |Лучшее (из двух работающих) расширение MediaWiki, реализующее права доступа к страницам. За основу взято [[mediawikiwiki:Extension:Halo Access Control List|HaloACL]], но практически полностью переписано. См. подробнее [[IntraACL]]. 100%-ной гарантии соблюдения прав в MediaWiki всё равно никогда нет, потому что она не создавалась в расчёте на это, и большинство расширений лазают в базу как попало и, соответственно, могут вытащить оттуда любую информацию. Однако в пределах сборки [[Mediawiki4Intranet]] IntraACL работает.
+
{{/Созд}} | [[ListFeed (MediaWiki)|ListFeed]] | - | 2009-07-30 | 2010-11-09 |Генерация RSS-лент из вики-списков (* или #).
+
{{/Созд}} | [[MarkupBabel (MediaWiki)|MarkupBabel]] | - | 2008-10-14 | 2010-12-15 |Ещё одно «композитное» расширение, включающее поддержку [[lib:TeX|LaTeX]]-формул, [[Graphviz]]-графов, [[Gnuplot]]-графиков, процентных диаграмм, UML-схем через [http://www.umlgraph.org/ UMLGraph].
+
{{/Созд}} | [[mediawikiquizzer]] | - | 2008-10-14 | 2011-03-18 |
+
{{/Созд}} | [[MMHandler (MediaWiki)|MMHandler]] | - | 2009-11-02 | 2010-11-29 |Медиаобработчик для вставки Flash-плагина просмотра [[rupedia:Диаграмма связей|майндмапов]] («интеллектуальных карт» или «диаграмм связей») формата <tt>*.mm</tt> ([http://freemind.sourceforge.net/ FreeMind], [http://freeplane.sourceforge.net/ FreePlane]) с помощью обычного синтаксиса вставки изображений <tt><nowiki>[[Файл:Mindmap.mm]]</nowiki></tt>.
+
{{/Созд}} | [[Polls]] | - | 2008-10-14 | 2011-03-23 |
+
{{/Созд}} | [[S5SlideShow]] | - | 2010-02-09 | 2010-11-03 | Оно же MWSlideology.
+
{{/Созд}} | [[SubPageList2]] | - | 2009-11-09 | 2010-12-20 |
+
{{/Созд}} | [[SiteExport]] | - | 2009-07-20 | 2010-07-20 |
+
{{/Созд}} | [[SWFUpload]] | - | 2009-12-16 | 2010-04-02 |
+
{{/Созд}} | [[UserMagic]] | - | 2010-01-19 | 2010-08-20 |
+
{{/Созд}} | [[UserMessage]] | - | 2010-03-25 | 2011-02-01 |
+
{{/Созд}} | [[WikiBookmarks]] | - | 2009-12-03 | 2011-03-03 |
+
</tab>
+
  
= Установка =
+
# Можно скачать [http://wiki.4intra.net/public/mediawiki4intranet.7z архив с исходниками] (примерно 25 МБ)
 +
# Можно использовать [[repo.php]] для автоматизированного скачивания с помощью системы контроля версий [[rupedia:Git|Git]] (что, разумеется, требует установленного git-клиента):
 +
#: {{cmd|git clone https://github.com/mediawiki4intranet/configs mediawiki/configs}}
 +
#: {{cmd|cd mediawiki/configs}}
 +
#: {{cmd|php repo.php install mediawiki4intranet}}
 +
 
 +
=== Установить зависимости ===
 +
 
 +
==== В Debian ====
 +
 
 +
В Debian почти всё (кроме UMLGraph и [[#TikaMW|Tika]]) ставится 1 командой:
 +
 
 +
<pre>
 +
apt-get install zip unzip poppler-utils \
 +
    netpbm librsvg2-bin djvulibre-bin texlive-base texlive-extra-utils ffmpeg \
 +
    dia graphviz gnuplot plotutils umlet default-jre diffutils imagemagick sphinxsearch \
 +
    nginx php7.0-fpm php7.0-cli php7.0-json php7.0-opcache php7.0-mbstring php7.0-curl php7.0-gd \
 +
    php7.0-intl php7.0-mysql php7.0-xml php7.0-zip php-imagick php-apcu php-apcu-bc php-mail php-net-smtp
 +
</pre>
 +
 
 +
UMLGraph, если хочется, нужно скачать [http://www.umlgraph.org/ с сайта] и подложить в системные пути.
 +
 
 +
Apache Tika — скачать отсюда: http://wiki.4intra.net/public/tika-app-1.2-fix-TIKA709-TIKA964.jar и добавить в /etc/rc.local:
 +
 
 +
<pre>
 +
start-stop-daemon -S -b --pidfile /var/run/tika.pid -m -x /usr/bin/java -- -jar /root/tika-app.jar -p 127.0.0.1:8072 -t -eutf-8
 +
</pre>
 +
 
 +
==== В других ОС ====
 +
 
 +
Минимальные требования:
 +
* PHP >= 5.3. Можно (лучше) PHP 7.
 +
* Веб-сервер и сервер приложений PHP. Например, [http://nginx.ru/ nginx] + [http://php-fpm.org/ php_fpm] или [http://httpd.apache.org/ Apache]. Другие варианты (IIS?) тоже, вероятно, поддерживаются.
 +
* СУБД MySQL или MariaDB >= 5.1, либо PostgreSQL >= 9.0.
 +
* Желателен Debian/Ubuntu Linux. Сборка, разумеется, будет работать под любым Linux’ом или ****BSD (и даже под виндой с некоторыми оговорками), но установить весь необходимый софт проще всего в Debian.
 +
 
 +
Также нужны следующие расширения PHP:
 +
* '''php-mysql''' или '''php-pgsql'''
 +
* Обязательно наличие '''DOM'''. Расширение базовое и обычно встроено в PHP, но в дурацких RPM-дистрибутивах выделено в отдельный пакет типа '''php-dom'''.
 +
* '''php-gd''' для обработки картинок.
 +
* '''php-curl''' для загрузки файлов по URL.
 +
* Любой кэшер, например '''php-opcache''', '''php-apc''' или '''php-xcache'''
 +
* Для PHP < 5.6 — [[php5-fss]]. Для 5.6 или 7 — не нужно.
 +
* Для отправки почты — PEAR-пакеты Mail и Net_SMTP, см. подробнее [[#Отправка E-mail]].
 +
 
 +
Требования конфигурации PHP (директивы php.ini):
 +
* <tt>post_max_size</tt>, <tt>upload_max_filesize</tt> — в зависимости от того, какого размера файлы планируете загружать
 +
* В боевой конфигурации: <tt>error_reporting = E_ALL & ~E_NOTICE</tt>
 +
* Если PHP < 5.4: <tt>magic_quotes_gpc = Off, register_globals = Off</tt>
 +
 
 +
Дополнительно нужны сторонние программы — их список внушительный, но почти всё обычно ставится менеджером пакетов:
 +
* Импорт-экспорт в ZIP-архивах: утилиты [http://gnuwin32.sourceforge.net/packages/zip.htm zip] и [http://gnuwin32.sourceforge.net/packages/unzip.htm unzip] (windows). Под UNIX обычно либо уже есть, либо ставится из пакетов.
 +
* PDF: [http://pages.cs.wisc.edu/~ghost/ GhostScript], [http://poppler.freedesktop.org/ Poppler] — бывший [http://www.foolabs.com/xpdf/ Xpdf] ([http://gnuwin32.sourceforge.net/packages/xpdf.htm windows)]
 +
* DJVU: [http://djvu.sourceforge.net/ djvulibre], [http://netpbm.sourceforge.net/ netpbm] ([http://gnuwin32.sourceforge.net/packages/netpbm.htm windows]).
 +
* LaTeX (формулы &lt;m>…&lt;/m>): любой дистрибутив TeX’а, например, в Debian обычно [http://www.tug.org/texlive/debian.html TeXLive], под Windows — [http://miktex.org/ MiKTeX]; утилита [http://dvisvgm.sourceforge.net/ dvisvgm].
 +
* [http://dia-installer.de/ Dia]
 +
* FLV/MP4-видео: [http://www.ffmpeg.org/ ffmpeg] ([http://ffmpeg.arrozcru.org/wiki/index.php?title=Main_Page для windows]).
 +
* [http://www.imagemagick.org/ ImageMagick]
 +
* [http://www.graphviz.org/ Graphviz] желателен версии не меньше 2.27, так как в предыдущих есть различные мелкие баги.
 +
* [http://www.gnuplot.info/ GNUPlot].
 +
* [http://www.umlgraph.org/ UMLGraph].
 +
* [http://www.umlet.com/ UMLet].
 +
* UMLGraph, UMLet, PlantUML требуют наличия [http://java.sun.com Java].
 +
* Sphinx-поиск по вики: [http://sphinxsearch.com/ Sphinx], [[#TikaMW|Tika]]
 +
 
 +
=== Создать папку images и пустую БД ===
 +
 
 +
В директории для установки нужно создать папку <tt>images</tt>, читаемую и записываемую веб-сервером.
 +
 
 +
Также нужно создать для вики MySQL базу данных и пользователя с полным доступом к ней.
 +
 
 +
=== Инициализировать БД ===
 +
 
 +
Сначала нужно создать структуру БД для «голой» MediaWiki:
 +
 
 +
# Либо просто накатить дамп <tt>maintenance/tables.sql</tt>:
 +
#* ''Сначала'' создать минимальный конфиг MediaWiki4Intranet (LocalSettings.php, см. ниже)
 +
#* Выполнить команду {{cmd|php maintenance/patchSql.php maintenance/tables.sql}} из директории установки вики.
 +
# Либо запустить вики-установщик из папки <tt>mw-config</tt> — плюс в том, что он ещё проводит дополнительные проверки версии PHP, расширений и т. п.:
 +
#* Зайти на <tt>http://server/wiki/mw-config/</tt>, ответить на вопросы, исправить недоразумения (если таковые возникнут), выбрать базу MySQL, InnoDB, 4.1/5.0 utf8 binary. Установщик создаст пустую БД и конфиг.
 +
#* ''Удалить'' конфиг, сгенерированный установщиком — в нём куча опций, которые все уже прописаны в правильные значения в конфигах MediaWiki4Intranet.
 +
#* ''Потом'' создать минимальный конфиг MediaWiki4Intranet (см. ниже)
 +
 
 +
Потом нужно дополнить созданную БД таблицами расширений. Для этого нужно:
 +
* Запустить {{cmd|php maintenance/update.php}} из директории установки вики.
 +
 
 +
=== Создать минимальный конфиг ===
 +
 
 +
Содержимое минимального конфига (LocalSettings.php):
  
Чтобы установить '''MediaWiki4Intranet''', нужно:
 
* Cклонировать [http://code.google.com/p/mediawiki4intranet/source/checkout/ mercurial-репозиторий из Google Code]: <tt>hg clone http://mediawiki4intranet.googlecode.com/hg/ mediawiki4intranet</tt>.
 
* Обновиться до ветки [http://code.google.com/p/mediawiki4intranet/source/browse/?r=mw4install mw4install]: <tt>hg up mw4install</tt>.
 
* В директории для установки создать папку <tt>images</tt>, читаемую и записываемую веб-сервером.
 
* Создать для вики MySQL базу данных и пользователя с полным доступом к ней.
 
* Запустить вики-установщик из папки <tt>config</tt>, то есть, зайти на <tt>http://server/wiki/config/</tt>, ответить на вопросы, исправить недоразумения (если таковые возникнут), выбрать базу MySQL, InnoDB, 4.1/5.0 utf8 binary. Установщик создаст пустую БД и конфиг.
 
* '''Удалить''' конфиг, сгенерированный установщиком — в нём куча опций, которые все уже прописаны в правильные значения в конфигах MediaWiki4Intranet.
 
* Создать минимальный конфиг MediaWiki4Intranet (LocalSettings.php):
 
 
<code-php>
 
<code-php>
 
<?php
 
<?php
require_once 'custisinstall/ServerSettings.php'; # это под UNIX, либо BaseSettings.php для винды
+
require_once 'configs/ServerSettings.php'; # это под UNIX, либо BaseSettings.php для винды
 
$wgDBname = 'wiki'; # имя БД
 
$wgDBname = 'wiki'; # имя БД
 
$wgDBuser = ''; # логин и пароль с полным доступом к этой БД
 
$wgDBuser = ''; # логин и пароль с полным доступом к этой БД
Line 207: Line 212:
 
$wgScriptPath = '/wiki';
 
$wgScriptPath = '/wiki';
 
</code-php>
 
</code-php>
* Запустить <tt>php maintenance/update.php</tt> из директории установки вики.
 
  
== Системные требования ==
+
== Старый Windows-образ ==
  
Минимальные требования — на случай, если кто-то забыл про стандартный веб-стек:
+
Для того, чтобы быстро попробовать '''MediaWiki4Intranet''' на локальной Windows-машине, также есть '''старая''' Windows-сборка. Фичи там есть не все, обновляться она скорее всего больше не будет (на данный момент версия {{/WindowsBundleVersion}}), настроена кривовато (ибо Windows) и не очень безопасно (ибо XAMPP). Раньше это был простейший способ попробовать Mediawiki4Intranet. Подробнее: [[Windows-сборка Mediawiki4Intranet]].
* PHP версии 5 или выше.
+
* Веб-сервер. Проще всего использовать [http://httpd.apache.org/ Apache], хотя теоретически должны поддерживаться и [http://iis.net/ IIS], и [http://nginx.ru/ nginx] + [http://php-fpm.org/ php_fpm].
+
* СУБД MySQL, желательно, версии 5 или выше.
+
* Желательна UNIX-система.
+
 
+
Также нужны следующие расширения PHP:
+
* php5-mysql обязательно! :-)
+
* php5-gd для обработки картинок.
+
* php5-curl для загрузки файлов по URL.
+
* php5-xcache для ускорения работы MediaWiki.
+
* [[#php5-fss|php5-fss]] тоже для ускорения, см. по ссылке.
+
  
Под Windows не работает следующий функционал MediaWiki4Intranet:
+
{{Box|
 +
{{Warning}} Под Windows не работает следующий функционал MediaWiki4Intranet:
 
* Отправка почты в формате HTML
 
* Отправка почты в формате HTML
 
* По умолчанию отключён Sphinx-поиск
 
* По умолчанию отключён Sphinx-поиск
 
* По умолчанию отключена поддержка PDF и Djvu
 
* По умолчанию отключена поддержка PDF и Djvu
* По умолчанию отключено слияние при конфликтах редактирования, что включить, нужно установить Windows-версию утилиты diff3, и прописать в LocalSettings.php:
+
* По умолчанию отключено слияние при конфликтах редактирования — чтобы включить, нужно установить Windows-версию утилиты diff3, и прописать в LocalSettings.php:
 
<code-php>$wgDiff3 = 'путь к diff3';</code-php>
 
<code-php>$wgDiff3 = 'путь к diff3';</code-php>
* [[#php5-fss|php5-fss]] собирать скорее всего задолбаетесь, а готовой виндовой версии нет.
+
}}
  
Теперь для тех, кто считает, что MySQL — не база данных: сама-то MediaWiki поддерживает и PostgreSQL, и Sqlite, и Oracle, но, во-первых, не все расширения тоже их поддерживают, а во-вторых, при использовании MediaWiki '''никакого''' смысла в этих СУБД нет, потому что MediaWiki не генерирует сложные запросы. То есть, '''вообще'''.
+
= Дополнительная настройка =
  
 
== Отправка E-mail ==
 
== Отправка E-mail ==
 +
 +
Для отправки электронной почты нужна рабочая локальная команда sendmail.
  
 
По умолчанию она включается только под UNIX’ами, потому что под виндой sendmail’а обычно нет. Однако когда включается, нужно поменять две следующие переменные в <tt>LocalSettings.php</tt>, иначе почта из вики так и будет приходить от Стаса Фомина:
 
По умолчанию она включается только под UNIX’ами, потому что под виндой sendmail’а обычно нет. Однако когда включается, нужно поменять две следующие переменные в <tt>LocalSettings.php</tt>, иначе почта из вики так и будет приходить от Стаса Фомина:
Line 244: Line 240:
  
 
Также, для отправки почты в формате HTML (а не plaintext) нужны PEAR-пакеты Mail и Net_SMTP:
 
Также, для отправки почты в формате HTML (а не plaintext) нужны PEAR-пакеты Mail и Net_SMTP:
* <tt>pear install Mail; pear install Net_SMTP</tt>, либо
+
* {{cmd|pear install Mail; pear install Net_SMTP}}, либо
* <tt>apt-get install php-mail php-net-smtp</tt> (Debian, Ubuntu).
+
* {{cmd|apt-get install php-mail php-net-smtp}} (Debian, Ubuntu).
  
 
== Короткие URL ==
 
== Короткие URL ==
  
Под «короткими URL» в вики понимаются адреса статей без <tt>index.php/</tt> и тем более без <tt>index.php?title=</tt>, например, такой URL — «короткий»: '''<tt>http://wiki.4intra.net/Mediawiki4Intranet</tt>'''. Настраиваются с помощью конфигурации в '''LocalSettings.php''':
+
Под «короткими URL» в вики понимаются адреса статей без <tt>index.php/</tt> и тем более без <tt>index.php?title=</tt>, например, такой URL — «короткий»: '''<tt>http://wiki.4intra.net/Mediawiki4Intranet</tt>'''.
 +
 
 +
Настраиваются с помощью конфигурации вики + конфигурации веб-сервера.
 +
 
 +
=== LocalSettings.php ===
  
 
<code-php>
 
<code-php>
Line 256: Line 256:
 
</code-php>
 
</code-php>
  
И дополнительно — директив mod_rewrite:
+
Если вы при этом хотите использовать API (<tt>api.php</tt>), то нужно исхитриться следующим образом: {{cmd|1 = $wgUsePathInfo = substr($_SERVER['PHP_SELF'], 0, 10) == '/index.php';}}. Дело в том, что в MediaWiki принято обычно располагать Script Path в месте, отличном от Rewrite Path. То есть, скрипты класть в <tt>yourdomain.com/w/</tt> (index.php, api.php и т. п.), а путь для статей делать <tt>yourdomain.com/wiki/</tt>. И API рассчитывает на это, и в итоге переданное значение параметра <tt>title=</tt> в случае равенства путей заменяется на «api.php», что мешает нормально использовать API.
 +
 
 +
=== nginx + php-fpm ===
 +
 
 +
<pre>
 +
    root /path/to/wiki;
 +
    location ~ /\.svn\/|\.bzr\/|\.hg\/|\.git\// {
 +
        deny all;
 +
    }
 +
    location / {
 +
        index index.php;
 +
        try_files $uri @index;
 +
    }
 +
    location ~ \.php$ {
 +
        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
 +
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 +
        fastcgi_param PATH_INFO $fastcgi_path_info;
 +
        include fastcgi_params;
 +
    }
 +
    location @index {
 +
        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
 +
        fastcgi_param SCRIPT_FILENAME $document_root/index.php;
 +
        fastcgi_param PATH_INFO $fastcgi_path_info;
 +
        include fastcgi_params;
 +
    }
 +
</pre>
 +
 
 +
=== Apache 2 ===
 +
 
 +
Через директивы mod_rewrite:
  
 
<pre>
 
<pre>
Line 266: Line 295:
 
</pre>
 
</pre>
  
Всё относительно очевидно, но есть пара нюансов:
+
Всё относительно очевидно, но есть нюансы:
* В последней строчке обязательно использовать именно <tt>index.php?title=$1</tt>, а не <tt>index.php/$1</tt>, так как во втором случае при использовании [B] подстраницы (страницы с / в названии) становятся недоступны.
+
* В последней строчке обязательно писать именно <tt>index.php?title=$1</tt>, а не <tt>index.php/$1</tt>, так как во втором случае при использовании [B] подстраницы (страницы с / в названии) становятся недоступны.
 
* Флаг [B] в последней строчке важен. Ибо без [B] mod_rewrite при переписи URL разэкранирует и не экранирует обратно спецсимволы (все, кроме латинских букв и цифр), из-за чего статьи с названиями, содержащими процент (%), становятся недоступны, потому что % в URL-кодировке — спецсимвол, и обязательно должен быть заменён на %25.
 
* Флаг [B] в последней строчке важен. Ибо без [B] mod_rewrite при переписи URL разэкранирует и не экранирует обратно спецсимволы (все, кроме латинских букв и цифр), из-за чего статьи с названиями, содержащими процент (%), становятся недоступны, потому что % в URL-кодировке — спецсимвол, и обязательно должен быть заменён на %25.
 
* Флаг [QSA] тоже нужен, ибо без него к ?title=$1 не дописываются остальные параметры URL.
 
* Флаг [QSA] тоже нужен, ибо без него к ?title=$1 не дописываются остальные параметры URL.
 
* Первые две строчки нужны, чтобы с адресов, содержащих в себе <tt>index.php/</tt>, перенаправить пользователя на «короткие» — это убирает дублирование страниц, которое не любят поисковики.
 
* Первые две строчки нужны, чтобы с адресов, содержащих в себе <tt>index.php/</tt>, перенаправить пользователя на «короткие» — это убирает дублирование страниц, которое не любят поисковики.
 
== php5-xcache ==
 
 
Рекомендуется [http://xcache.lighttpd.net/ установить и настроить] XCache для PHP5. Это весьма неплохо ускоряет работу MediaWiki.
 
 
== php5-fss ==
 
 
Замечательное расширение для PHP, позволяющее ускорить важнейшую для медиавики операцию — замену набора подстрок на набор других подстрок — примерно в 500 раз. «FSS» значит «Fast String Search» на основе алгоритмов Бойера-Мура и Комменца-Вальтера. Посмотреть доклад (мой, ага — [[Участник:VitaliyFilippov|VitaliyFilippov]] 16:21, 30 марта 2011 (MSD)) про это расширение можно здесь: [[lib:PHP-разгон: серебряная пуля из автомата Комменца-Вальтера (Commentz-Walter)]].
 
 
Реально это ускоряет работу MediaWiki в разы, особенно на больших статьях с большим количеством разметки (например, включений шаблонов, функций парсера…).
 
 
На зеркалах дебиана его нет, однако можно собрать из исходников вот отсюда:
 
 
* http://apt.wikimedia.org/wikimedia/pool/main/php5-fss/
 
 
Из исходников собирать нужно потому, что пакетов под i386 там нет, только под amd64. Сборка описана для тех, у кого есть под рукой Debian/Ubuntu.
 
 
Нужно скачать файлы:
 
* http://apt.wikimedia.org/wikimedia/pool/main/php5-fss/php5-fss_0.0.1.orig.tar.gz
 
* http://apt.wikimedia.org/wikimedia/pool/main/php5-fss/php5-fss_0.0.1-2.dsc
 
* http://apt.wikimedia.org/wikimedia/pool/main/php5-fss/php5-fss_0.0.1-2.diff.gz
 
 
И далее сказать:
 
<code-bash>
 
dpkg-source -x php5-fss_0.0.1-2.dsc
 
cd php5-fss-0.0.1
 
debian/rules binary
 
dpkg -i ../php5-fss_0.0.1-2_i386.deb
 
</code-bash>
 
 
Либо можно добавить в <tt>/etc/apt/sources.list</tt> зеркало <tt>http://apt.wikimedia.org/wikimedia/</tt> (обязательно с deb-src), и дальше <tt>apt-get update; apt-get source php5-fss</tt> и дальше всё то же самое.
 
 
Для версий PHP >= 5.3 в коде расширения также следует изменить строчку
 
ZVAL_ADDREF(*value);
 
На строчку
 
Z_ADDREF_P(*value);
 
 
== PDF, DJVU, LaTeX ==
 
 
Поддержка постраничного просмотра PDF и DJVU по умолчанию включается только под UNIX-ами. Если вы хотите включить её под Windows, есть большая вероятность, что вы считаете свой Windows почти UNIX’ом — тогда просто используйте ServerSettings.php вместо BaseSettings.php + добавьте
 
 
* PDF: [http://pages.cs.wisc.edu/~ghost/ GhostScript], [http://www.foolabs.com/xpdf/ Xpdf] ([http://gnuwin32.sourceforge.net/packages/xpdf.htm windows)]
 
* DJVU: [http://djvu.sourceforge.net/ djvulibre], [http://netpbm.sourceforge.net/ netpbm] ([http://gnuwin32.sourceforge.net/packages/netpbm.htm windows]).
 
* LaTeX (формулы &lt;m>…&lt;/m>): [http://miktex.org/ MiKTeX].
 
 
Всё это должно быть прописано в системные пути.
 
 
Debian: <code-bash>apt-get install djvulibre-bin netpbm ghostscript xpdf-utils</code-bash>
 
 
== Graphviz, GNUplot, UMLGraph, PlantUML ==
 
 
* [http://www.graphviz.org/ Graphviz] желателен версии не меньше 2.27, так как в предыдущих есть различные мелкие баги.
 
* [http://www.gnuplot.info/ GNUPlot].
 
* [http://www.umlgraph.org/ UMLGraph], требует наличия [http://java.sun.com Java].
 
* Для [http://plantuml.sourceforge.net/ PlantUML] тоже нужна [http://java.sun.com Java]. Сам PlantUML ставить не нужно, он уже есть в составе MediaWiki4Intranet.
 
 
Всё это, опять-таки, должно быть в путях.
 
 
== Поддержка MP4/FLV видео ==
 
 
Здесь требуется [http://www.ffmpeg.org/ ffmpeg] ([http://ffmpeg.arrozcru.org/wiki/index.php?title=Main_Page windows]), прописанный в пути.
 
  
 
== Sphinx-поиск по вики ==
 
== Sphinx-поиск по вики ==
  
Нужно установить и настроить [http://sphinxsearch.com/ Sphinx]. Генератор готовых конфигураций есть в директории sphinxsearch: <tt>configure.sphinx.php</tt>.
+
Во-первых, нужно установить [http://sphinxsearch.com/ Sphinx].
 +
 
 +
Mediawiki4Intranet использует «realtime» индексы Sphinx, то есть, обновляемые индексы. Ответственное расширение - [[SphinxSearchEngine]]. Для конфигурирования есть авто-конфигуратор <tt>configs/maintenance/configure-sphinx.php</tt>. Использовать так:
  
Делаем так:
 
 
* Создаём рядом с ним файл <tt>sphinx.wikis.php</tt>, в который прописываем что-то вроде:
 
* Создаём рядом с ним файл <tt>sphinx.wikis.php</tt>, в который прописываем что-то вроде:
 
<code-php>
 
<code-php>
Line 349: Line 318:
 
));
 
));
 
</code-php>
 
</code-php>
* Вызываем <tt>php configure.sphinx.php --hostname HOST</tt> — под UNIX вместо HOST можно использовать имя из /etc/hostname, и тогда можно будет держать один конфиг на несколько серверов, и вызывать без опции <tt>--hostname</tt>.
+
* Вызываем <tt>php configure-sphinx.php --hostname HOST --style rt</tt>. Под UNIX вместо HOST можно использовать имя из <tt>/etc/hostname</tt>, и тогда можно будет держать один конфиг на несколько серверов, и вызывать без опции <tt>--hostname</tt>.
* Будет создан файл '''<tt>sphinx.conf</tt>''', который нужно скормить Sphinx’у — под UNIX это обычно означает положить его в <tt>/etc/sphinxsearch/</tt>.
+
* Будет создан файл '''<tt>sphinx.conf</tt>''', который нужно скормить Sphinx’у — под UNIX это обычно означает положить его в <tt>/etc/sphinxsearch/</tt>.
* Добавить в <tt>/etc/crontab</tt> команды на переиндексацию, которые выведет конфигуратор.
+
* Если конфигуратор предложит инициализировать какие-то индексы и выведет для этого команды — делайте, что говорит.
* Если конфигуратор предложить инициализировать какие-то индексы и выведет для этого команды — делайте, что говорит.
+
 
 +
После чего прописываем в <tt>LocalSettings.php</tt> (раскомментируйте и подставьте адрес и порт, если у вас он в итоге отличается):
  
Далее ещё нужно прописать в <tt>LocalSettings.php</tt> (заменить «wiki» на то, что вы использовали в параметре name в sphinx.wikis.php):
 
 
<code-php>
 
<code-php>
$wgSphinxSearch_index = 'main_wiki, inc_wiki';
+
require_once "$IP/extensions/SphinxSearch/SphinxSearch.php";
 +
$wgSphinxQL_index = 'wiki';
 +
//$wgSphinxQL_host = '';
 +
//$wgSphinxQL_port = '/var/run/searchd.sock'; // UNIX сокет, либо номер TCP-порта SphinxQL
 
</code-php>
 
</code-php>
  
Внимание: конфиги, сгенерированные таким образом, скорее всего, непригодны для использования под виндами. Вообще, мы под виндами сфинкса не используем и гарантировать работу тоже не можем.
+
{{Warning}} На самом деле старые версии документов при обновлениях в индексе остаются, просто прописываются в «Kill-List» — список ID устаревших документов, которые удаляются из результатов поиска. Поэтому при большом количестве обновлений страниц могут пойти тормоза. И хотя сфинкс ''очень быстрый'' и тормоза пойдут не скоро, это всё-таки может случиться. Поэтому время от времени полезно делать оптимизацию индекса, подсоединяясь к Sphinx MySQL-клиентом и отправляя ему SQL-запрос '''OPTIMIZE INDEX index_name'''.
 +
 
 +
=== [[TikaMW]] ===
 +
 
 +
[http://tika.apache.org/ Apache Tika] - библиотека, позволяющая извлекать текст из бинарных файлов (pdf, офисных и т.п). Она используется для индексации содержимого загруженных файлов.
 +
* Брать тут: http://code.google.com/p/mediawiki4intranet/downloads/detail?name=tika-app-1.2-fix-TIKA709-TIKA964.jar
 +
* Или тут: http://wiki.4intra.net/public/tika-app-1.2-fix-TIKA709-TIKA964.jar
 +
 
 +
Тику нужно прописать в автозапуск на сервере как-то так:
 +
 
 +
<pre>java -jar tika-app-1.2-fix-TIKA709-TIKA964.jar -p 127.0.0.1:8072 -t -eutf-8</pre>
 +
 
 +
Более подробная информация в статье расширения: [[TikaMW]].
  
 
== Антиспам для публичных Wiki ==
 
== Антиспам для публичных Wiki ==
Line 365: Line 349:
 
В публичных Wiki имеют свойство заводиться спамеры, потому что можно легко зарегистрироваться и создать статью.
 
В публичных Wiki имеют свойство заводиться спамеры, потому что можно легко зарегистрироваться и создать статью.
  
Поэтому желательно включить расширение '''reCAPTCHA''', распространяемое вместе с MediaWiki4Intranet, получить ключи для своего домена на http://recaptcha.net/api/getkey, и прописать это всё в '''LocalSettings.php''':
+
Поэтому если ваша Wiki «смотрит» в Интернет и не закрыта от него ПОЛНОСТЬЮ (правами, например, или по IP, или базовой авторизацией), используйте наш конфиг <tt>ExternalServerSettings.php</tt>. В нём изначально включены [[ConfirmEdit]] и [[WikiKCaptcha]], а также прописан 30-дневный срок жизни Cookie и необходимость подтверждения e-mail адреса перед редактированием.
  
<code-php>
+
…И ещё один нюанс — спамеры любят регистрироваться и сразу создавать статьи, поэтому можно запретить создавать статьи после регистрации на какой-то период времени (в тяжёлых случаях можно, например, на 4 суток):
require_once('extensions/recaptcha/ReCaptcha.php');
+
// Sign up for these at http://recaptcha.net/api/getkey
+
$recaptcha_public_key = '';
+
$recaptcha_private_key = '';
+
</code-php>
+
 
+
У спамеров есть ещё одно свойство — они регистрируются и сразу начинают создавать статьи. Поэтому, можно запретить создавать статьи после регистрации на какой-то период времени (в тяжёлых случаях можно, например, на 4 суток). Для этого нужно прописать следующие директивы в '''LocalSettings.php''':
+
  
 
<code-php>
 
<code-php>
 
// Время, в течение которого запрещено создавать статьи (например, 4 суток * 86400 секунд в сутках)
 
// Время, в течение которого запрещено создавать статьи (например, 4 суток * 86400 секунд в сутках)
 
$wgAutoConfirmAge = 86400 * 4;
 
$wgAutoConfirmAge = 86400 * 4;
 
$wgGroupPermissions['*']['edit'] = false;
 
$wgGroupPermissions['*']['delete'] = false;
 
$wgGroupPermissions['*']['undelete'] = false;
 
$wgGroupPermissions['*']['createpage'] = false;
 
$wgGroupPermissions['*']['createtalk'] = false;
 
$wgGroupPermissions['user']['createpage'] = false;
 
$wgGroupPermissions['user']['createtalk'] = false;
 
$wgGroupPermissions['autoconfirmed']['createpage'] = true;
 
$wgGroupPermissions['autoconfirmed']['createtalk'] = true;
 
$wgGroupPermissions['sysop']['createpage'] = true;
 
$wgGroupPermissions['sysop']['createtalk'] = true;
 
$wgGroupPermissions['bureaucrat']['createpage'] = true;
 
$wgGroupPermissions['bureaucrat']['createtalk'] = true;
 
 
</code-php>
 
</code-php>
  
 
== OpenID ==
 
== OpenID ==
  
В MediaWiki4Intranet есть поддержка OpenID, хотя и глючная, как и вообще любая реализация OpenID. Это не наша вина, и даже не вина авторов [[mediawikiwiki:Extension:OpenID|расширения OpenID]] — виноваты здесь авторы библиотеки [http://www.janrain.com/openid-enabled OpenID для PHP].
+
В MediaWiki4Intranet есть поддержка OpenID, хотя и глючная, как и вообще любая реализация OpenID. Это не наша вина, и даже не вина авторов [[mediawikiwiki:Extension:OpenID|расширения OpenID]] виноваты здесь авторы библиотеки [http://www.janrain.com/openid-enabled OpenID для PHP].
  
 
Чтобы включить её, нужно прописать следующее в <tt>LocalSettings.php</tt>:
 
Чтобы включить её, нужно прописать следующее в <tt>LocalSettings.php</tt>:
 
<code-php>
 
<code-php>
require_once(«$IP/extensions/OpenID/OpenID.setup.php»);
+
require_once("$IP/extensions/OpenID/OpenID.setup.php");
 
</code-php>
 
</code-php>
 
Также можно установить PEAR-пакет Auth_OpenID (<tt>apt-get install php-openid</tt> в Debian). Это необязательно — MediaWiki4Intranet уже включает копию этой библиотеки. Однако если у вас есть копия новее, чем у нас — ставьте… И удаляйте директорию <tt>extensions/OpenID/Auth</tt>.
 

Latest revision as of 12:26, 29 May 2017

MediaWiki — популярная «вики»-система, написанная на PHP и изначально создававшаяся в качестве «движка» Википедии. Отличается отличной расширяемостью — существует более 1700 расширений к ней.

Mediawiki4Intranet — сборка MediaWiki, содержащая в себе довольно большой набор расширений, полезных для внутрикорпоративной среды и, что очень важно, исправленных и «подруженных» между собой — большая часть ошибок, возникающих при интеграции, исправлена.

Об установке см. #Установка.

Содержимое

Сборка состоит из:

  • Доработанного ядра MediaWiki (оригинал + набор патчей).
  • Расширений MediaWiki:
    • Оригинальных, то есть, нетронутых.
    • Доработанных незначительно, в виде «оригинал + набор патчей» для каждого.
    • Форкнутых, то есть, доработанных значительно, в простом виде гитхаб-репозитория.
    • Новых, созданных нами.
  • Скрипта установки «repo.php».
  • Нескольких готовых конфигураций типа LocalSettings.php для быстрой установки.
  • Нескольких дополнительных утилит обслуживания.

Лицензия на сборку — GNU GPLv3 или новее. Почему? Потому, что:

  • MediaWiki и большинство расширений распространяются под GPLv2+.
  • Часть расширений — под Permissive лицензиями.
  • Часть расширений — под GPLv3+.

Соответственно, на сборку целиком распространяется наиболее жёсткая из этих свободных лицензий, а именно, GPLv3.

MediaWiki

Код доработанного ядра и расширений MediaWiki, а также расширений, созданных нами, живёт на Github у организации «mediawiki4intranet»: https://github.com/mediawiki4intranet/. Там есть репозиторий с ядром MediaWiki, репозиторий с конфигурациями и скриптами деплоя и обслуживания, а также по репозиторию на каждое расширение и тему оформления MediaWiki.

Код оригинальной MediaWiki, кстати, раньше жил в Subversion, а теперь живёт в rupedia:Git-репозиториях Wikimedia, по адресам вида:

Версия Mediawiki4Intranet несколько отстаёт от наиболее свежей стабильной, ибо внешние различия между версиями MediaWiki не так уж и велики, но при этом в новых могут вылезать баги (вроде Bug 37209), и на обновление всех доработок сборки приходится тратить некоторое время.

Историй версий MediaWiki в основе Mediawiki4Intranet:

  • 2016-09-14 → текущая: 1.26.4
  • 2016-07-04 → 2016-09-14: 1.26.3
  • 2015-12-21 → 2016-07-04: 1.26.2
  • 2015-10-15 → 2015-12-21: 1.26 beta.
  • 2014-06-03 → 2015-10-15: 1.21.10.
  • 2014-01-31 → 2014-06-03: 1.21.5.
  • 2014-01-14 → 2014-01-31: 1.21.3.
  • 2012-11-20 → 2014-01-14: 1.18.5.
  • 2012-02-22 → 2012-11-20: 1.18.1.
  • 2011-02-08 → 2012-02-22: 1.16.2.
  • 2010-10-09 → 2011-02-08: 1.14.1.
  • → 2010-10-09: 1.13.1 (в репозиториях отсутствует).

Патчи

В виде патчей оформляются либо мелкие доработки расширений, либо любые доработки ядра MediaWiki. Сами патчи хранятся в Git-репозитории в виде обычных коммитов, организованных в серию, по принципу 1 коммит = 1 патч.

Attention niels epting.svg При внесении изменений в уже существующий патч вместо добавления новых коммитов происходит переписывание истории! Это приводит к некоторым неудобствам при обновлении веток (нужно руками делать git reset), но зато, по крайней мере, каждый патч достаточно легко выделить и отправить авторам.

Описание всех патчей, входящих в сборку MediaWiki4Intranet, читайте на странице: Mediawiki4Intranet/Патчи.

Расширения

Отличная расширяемость без использования патчей — важнейшая фишка MediaWiki. Расширения используют заранее заданные в коде точки интеграции («Hooks») и добавляют в MediaWiki новый функционал без необходимости вносить изменения в ядро.

Описание всех расширений, входящих в сборку MediaWiki4Intranet, читайте на странице: Mediawiki4Intranet/Расширения.

Список изменений

Изменения в версии Mediawiki4Intranet 1.26 (по сравнению с 1.21): Mediawiki4Intranet/1.26

Установка

Установка через Docker

Простейший способ установить Mediawiki4Intranet — использовать Docker. Наш репозиторий с образом Docker:

https://github.com/mediawiki4intranet/docker

Чтобы установить Mediawiki4Intranet через Docker, установите себе в систему Docker, склонируйте данный репозиторий, зайдите в склонированную директорию и запустите команду:

docker build -t mediawiki4intranet .

Это соберёт образ системы Mediawiki4Intranet. Чтобы запустить на основе этого образа контейнер, запустите:

docker run --name mw4i -p 8077:80 -v /home/wiki4intranet/data -t -d mediawiki4intranet

После чего откройте в браузере адрес http://localhost:8077 и заходите в wiki с логином-паролем WikiSysop/MediaWiki4Intranet.

Attention niels epting.svg В Docker образе не сконфигурирована отправка почты, так как она требует либо настроенного MTA, либо SMTP подключения, а это зависит от окружения, в котором вы запускаете контейнер. Чтобы это исправить, либо пропишите в LocalSettings.php конфигурацию $wgSMTP (для использования внешнего SMTP-сервера), либо установите внутрь контейнера sendmail/postfix и настройте его (это, к сожалению, пока надо делать вручную).

Сборка с VisualEditor

В репозитории есть два Dockerfile'а: базовый без VisualEditor и отдельный с оным. Соответственно, чтобы использовать сборку с VisualEditor, вместо одной команды build нужно запустить две:

docker build -t mediawiki4intranet .
docker build -t mediawiki4intranet/ve -f ve.Dockerfile .

После чего запускать полученный образ аналогично:

docker run --name mw4i -p 8077:80 -v /home/wiki4intranet/data -t -d mediawiki4intranet/ve

Ручная установка

Скачать код

Варианты:

  1. Можно скачать архив с исходниками (примерно 25 МБ)
  2. Можно использовать repo.php для автоматизированного скачивания с помощью системы контроля версий Git (что, разумеется, требует установленного git-клиента):
    git clone https://github.com/mediawiki4intranet/configs mediawiki/configs
    cd mediawiki/configs
    php repo.php install mediawiki4intranet

Установить зависимости

В Debian

В Debian почти всё (кроме UMLGraph и Tika) ставится 1 командой:

apt-get install zip unzip poppler-utils \
    netpbm librsvg2-bin djvulibre-bin texlive-base texlive-extra-utils ffmpeg \
    dia graphviz gnuplot plotutils umlet default-jre diffutils imagemagick sphinxsearch \
    nginx php7.0-fpm php7.0-cli php7.0-json php7.0-opcache php7.0-mbstring php7.0-curl php7.0-gd \
    php7.0-intl php7.0-mysql php7.0-xml php7.0-zip php-imagick php-apcu php-apcu-bc php-mail php-net-smtp

UMLGraph, если хочется, нужно скачать с сайта и подложить в системные пути.

Apache Tika — скачать отсюда: http://wiki.4intra.net/public/tika-app-1.2-fix-TIKA709-TIKA964.jar и добавить в /etc/rc.local:

start-stop-daemon -S -b --pidfile /var/run/tika.pid -m -x /usr/bin/java -- -jar /root/tika-app.jar -p 127.0.0.1:8072 -t -eutf-8

В других ОС

Минимальные требования:

  • PHP >= 5.3. Можно (лучше) PHP 7.
  • Веб-сервер и сервер приложений PHP. Например, nginx + php_fpm или Apache. Другие варианты (IIS?) тоже, вероятно, поддерживаются.
  • СУБД MySQL или MariaDB >= 5.1, либо PostgreSQL >= 9.0.
  • Желателен Debian/Ubuntu Linux. Сборка, разумеется, будет работать под любым Linux’ом или ****BSD (и даже под виндой с некоторыми оговорками), но установить весь необходимый софт проще всего в Debian.

Также нужны следующие расширения PHP:

  • php-mysql или php-pgsql
  • Обязательно наличие DOM. Расширение базовое и обычно встроено в PHP, но в дурацких RPM-дистрибутивах выделено в отдельный пакет типа php-dom.
  • php-gd для обработки картинок.
  • php-curl для загрузки файлов по URL.
  • Любой кэшер, например php-opcache, php-apc или php-xcache
  • Для PHP < 5.6 — php5-fss. Для 5.6 или 7 — не нужно.
  • Для отправки почты — PEAR-пакеты Mail и Net_SMTP, см. подробнее #Отправка E-mail.

Требования конфигурации PHP (директивы php.ini):

  • post_max_size, upload_max_filesize — в зависимости от того, какого размера файлы планируете загружать
  • В боевой конфигурации: error_reporting = E_ALL & ~E_NOTICE
  • Если PHP < 5.4: magic_quotes_gpc = Off, register_globals = Off

Дополнительно нужны сторонние программы — их список внушительный, но почти всё обычно ставится менеджером пакетов:

  • Импорт-экспорт в ZIP-архивах: утилиты zip и unzip (windows). Под UNIX обычно либо уже есть, либо ставится из пакетов.
  • PDF: GhostScript, Poppler — бывший Xpdf (windows)
  • DJVU: djvulibre, netpbm (windows).
  • LaTeX (формулы <m>…</m>): любой дистрибутив TeX’а, например, в Debian обычно TeXLive, под Windows — MiKTeX; утилита dvisvgm.
  • Dia
  • FLV/MP4-видео: ffmpeg (для windows).
  • ImageMagick
  • Graphviz желателен версии не меньше 2.27, так как в предыдущих есть различные мелкие баги.
  • GNUPlot.
  • UMLGraph.
  • UMLet.
  • UMLGraph, UMLet, PlantUML требуют наличия Java.
  • Sphinx-поиск по вики: Sphinx, Tika

Создать папку images и пустую БД

В директории для установки нужно создать папку images, читаемую и записываемую веб-сервером.

Также нужно создать для вики MySQL базу данных и пользователя с полным доступом к ней.

Инициализировать БД

Сначала нужно создать структуру БД для «голой» MediaWiki:

  1. Либо просто накатить дамп maintenance/tables.sql:
    • Сначала создать минимальный конфиг MediaWiki4Intranet (LocalSettings.php, см. ниже)
    • Выполнить команду php maintenance/patchSql.php maintenance/tables.sql из директории установки вики.
  2. Либо запустить вики-установщик из папки mw-config — плюс в том, что он ещё проводит дополнительные проверки версии PHP, расширений и т. п.:
    • Зайти на http://server/wiki/mw-config/, ответить на вопросы, исправить недоразумения (если таковые возникнут), выбрать базу MySQL, InnoDB, 4.1/5.0 utf8 binary. Установщик создаст пустую БД и конфиг.
    • Удалить конфиг, сгенерированный установщиком — в нём куча опций, которые все уже прописаны в правильные значения в конфигах MediaWiki4Intranet.
    • Потом создать минимальный конфиг MediaWiki4Intranet (см. ниже)

Потом нужно дополнить созданную БД таблицами расширений. Для этого нужно:

  • Запустить php maintenance/update.php из директории установки вики.

Создать минимальный конфиг

Содержимое минимального конфига (LocalSettings.php):

<?php
require_once 'configs/ServerSettings.php'; # это под UNIX, либо BaseSettings.php для винды
$wgDBname = 'wiki'; # имя БД
$wgDBuser = ''; # логин и пароль с полным доступом к этой БД
$wgDBpassword = '';
$wgDBadminuser = $wgDBuser;
$wgDBadminpassword = $wgDBpassword;
$wgScriptPath = '/wiki';

Старый Windows-образ

Для того, чтобы быстро попробовать MediaWiki4Intranet на локальной Windows-машине, также есть старая Windows-сборка. Фичи там есть не все, обновляться она скорее всего больше не будет (на данный момент версия 2015-09-04), настроена кривовато (ибо Windows) и не очень безопасно (ибо XAMPP). Раньше это был простейший способ попробовать Mediawiki4Intranet. Подробнее: Windows-сборка Mediawiki4Intranet.

Attention niels epting.svg Под Windows не работает следующий функционал MediaWiki4Intranet:

  • Отправка почты в формате HTML
  • По умолчанию отключён Sphinx-поиск
  • По умолчанию отключена поддержка PDF и Djvu
  • По умолчанию отключено слияние при конфликтах редактирования — чтобы включить, нужно установить Windows-версию утилиты diff3, и прописать в LocalSettings.php:
$wgDiff3 = 'путь к diff3';

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

Отправка E-mail

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

По умолчанию она включается только под UNIX’ами, потому что под виндой sendmail’а обычно нет. Однако когда включается, нужно поменять две следующие переменные в LocalSettings.php, иначе почта из вики так и будет приходить от Стаса Фомина:

$wgEmergencyContact = 'admin@your.wiki'; # e-mail
$wgPasswordSender = $wgEmergencyContact;

Также, для отправки почты в формате HTML (а не plaintext) нужны PEAR-пакеты Mail и Net_SMTP:

  • pear install Mail; pear install Net_SMTP, либо
  • apt-get install php-mail php-net-smtp (Debian, Ubuntu).

Короткие URL

Под «короткими URL» в вики понимаются адреса статей без index.php/ и тем более без index.php?title=, например, такой URL — «короткий»: http://wiki.4intra.net/Mediawiki4Intranet.

Настраиваются с помощью конфигурации вики + конфигурации веб-сервера.

LocalSettings.php

$wgUsePathInfo = true;
$wgArticlePath = '/$1';

Если вы при этом хотите использовать API (api.php), то нужно исхитриться следующим образом: $wgUsePathInfo = substr($_SERVER['PHP_SELF'], 0, 10) == '/index.php';. Дело в том, что в MediaWiki принято обычно располагать Script Path в месте, отличном от Rewrite Path. То есть, скрипты класть в yourdomain.com/w/ (index.php, api.php и т. п.), а путь для статей делать yourdomain.com/wiki/. И API рассчитывает на это, и в итоге переданное значение параметра title= в случае равенства путей заменяется на «api.php», что мешает нормально использовать API.

nginx + php-fpm

    root /path/to/wiki;
    location ~ /\.svn\/|\.bzr\/|\.hg\/|\.git\// {
        deny all;
    }
    location / {
        index index.php;
        try_files $uri @index;
    }
    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        include fastcgi_params;
    }
    location @index {
        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root/index.php;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        include fastcgi_params;
    }

Apache 2

Через директивы mod_rewrite:

RewriteCond %{THE_REQUEST} ^\S+\s*/*index.php/
RewriteRule ^index.php/(.*)$ /$1 [R=301,L,NE]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?title=$1 [L,B,QSA]

Всё относительно очевидно, но есть нюансы:

  • В последней строчке обязательно писать именно index.php?title=$1, а не index.php/$1, так как во втором случае при использовании [B] подстраницы (страницы с / в названии) становятся недоступны.
  • Флаг [B] в последней строчке важен. Ибо без [B] mod_rewrite при переписи URL разэкранирует и не экранирует обратно спецсимволы (все, кроме латинских букв и цифр), из-за чего статьи с названиями, содержащими процент (%), становятся недоступны, потому что % в URL-кодировке — спецсимвол, и обязательно должен быть заменён на %25.
  • Флаг [QSA] тоже нужен, ибо без него к ?title=$1 не дописываются остальные параметры URL.
  • Первые две строчки нужны, чтобы с адресов, содержащих в себе index.php/, перенаправить пользователя на «короткие» — это убирает дублирование страниц, которое не любят поисковики.

Sphinx-поиск по вики

Во-первых, нужно установить Sphinx.

Mediawiki4Intranet использует «realtime» индексы Sphinx, то есть, обновляемые индексы. Ответственное расширение - SphinxSearchEngine. Для конфигурирования есть авто-конфигуратор configs/maintenance/configure-sphinx.php. Использовать так:

  • Создаём рядом с ним файл sphinx.wikis.php, в который прописываем что-то вроде:
$wikis = array('HOST' => array(
  array(
    'name' => 'wiki', // имя индекса - должны быть разные для сожительствующих в одном sphinx'е вик
    'user' => '', // имя пользователя БД
    'pass' => '', // пароль к БД
    'db'   => '', // имя БД
  ),
));
  • Вызываем php configure-sphinx.php --hostname HOST --style rt. Под UNIX вместо HOST можно использовать имя из /etc/hostname, и тогда можно будет держать один конфиг на несколько серверов, и вызывать без опции --hostname.
  • Будет создан файл sphinx.conf, который нужно скормить Sphinx’у — под UNIX это обычно означает положить его в /etc/sphinxsearch/.
  • Если конфигуратор предложит инициализировать какие-то индексы и выведет для этого команды — делайте, что говорит.

После чего прописываем в LocalSettings.php (раскомментируйте и подставьте адрес и порт, если у вас он в итоге отличается):

require_once "$IP/extensions/SphinxSearch/SphinxSearch.php";
$wgSphinxQL_index = 'wiki';
//$wgSphinxQL_host = '';
//$wgSphinxQL_port = '/var/run/searchd.sock'; // UNIX сокет, либо номер TCP-порта SphinxQL

Attention niels epting.svg На самом деле старые версии документов при обновлениях в индексе остаются, просто прописываются в «Kill-List» — список ID устаревших документов, которые удаляются из результатов поиска. Поэтому при большом количестве обновлений страниц могут пойти тормоза. И хотя сфинкс очень быстрый и тормоза пойдут не скоро, это всё-таки может случиться. Поэтому время от времени полезно делать оптимизацию индекса, подсоединяясь к Sphinx MySQL-клиентом и отправляя ему SQL-запрос OPTIMIZE INDEX index_name.

TikaMW

Apache Tika - библиотека, позволяющая извлекать текст из бинарных файлов (pdf, офисных и т.п). Она используется для индексации содержимого загруженных файлов.

Тику нужно прописать в автозапуск на сервере как-то так:

java -jar tika-app-1.2-fix-TIKA709-TIKA964.jar -p 127.0.0.1:8072 -t -eutf-8

Более подробная информация в статье расширения: TikaMW.

Антиспам для публичных Wiki

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

Поэтому если ваша Wiki «смотрит» в Интернет и не закрыта от него ПОЛНОСТЬЮ (правами, например, или по IP, или базовой авторизацией), используйте наш конфиг ExternalServerSettings.php. В нём изначально включены ConfirmEdit и WikiKCaptcha, а также прописан 30-дневный срок жизни Cookie и необходимость подтверждения e-mail адреса перед редактированием.

…И ещё один нюанс — спамеры любят регистрироваться и сразу создавать статьи, поэтому можно запретить создавать статьи после регистрации на какой-то период времени (в тяжёлых случаях можно, например, на 4 суток):

// Время, в течение которого запрещено создавать статьи (например, 4 суток * 86400 секунд в сутках)
$wgAutoConfirmAge = 86400 * 4;

OpenID

В MediaWiki4Intranet есть поддержка OpenID, хотя и глючная, как и вообще любая реализация OpenID. Это не наша вина, и даже не вина авторов расширения OpenID — виноваты здесь авторы библиотеки OpenID для PHP.

Чтобы включить её, нужно прописать следующее в LocalSettings.php:

require_once("$IP/extensions/OpenID/OpenID.setup.php");