Difference between revisions of "Mediawiki4Intranet"

From Wiki4Intranet
Jump to: navigation, search
Line 69: Line 69:
 
= Установка =
 
= Установка =
  
Если вы хотите быстро попробовать '''MediaWiki4Intranet''' на своей локальной Windows-машине — скачайте [http://wiki.4intra.net/public/mediawiki4intranet-win.7z Windows-сборку] (примерно 200 МБ). Обновляется она достаточно редко (на данный момент версия {{/WindowsBundleVersion}}), настроена кривовато и не очень безопасно (ибо XAMPP), но зато полностью Standalone и включает в себя все необходимые дополнительные программы. Подробнее: [[Windows-сборка Mediawiki4Intranet]].
+
== Установка через Docker ==
  
{{warning}} Используйте Windows-сборку '''только локально'''. Подробности в статье [[Windows-сборка Mediawiki4Intranet]].
+
Простейший способ установить Mediawiki4Intranet — использовать [https://www.docker.com/ Docker]. Наш репозиторий с образом Docker:
  
== Инструкция по установке ==
+
https://github.com/mediawiki4intranet/docker
  
Чтобы установить '''MediaWiki4Intranet''' к себе на сайт, нужно:
+
Чтобы установить Mediawiki4Intranet через Docker, установите себе в систему Docker, склонируйте данный репозиторий, зайдите в склонированную директорию и запустите команду:
 +
 
 +
<pre>
 +
docker build -t mediawiki4intranet .
 +
</pre>
 +
 
 +
Это соберёт образ системы Mediawiki4Intranet. Чтобы запустить на основе этого образа контейнер, запустите:
 +
 
 +
<pre>
 +
docker run --name mw4i -p 8077:80 -v /home/wiki4intranet/data -t -d mediawiki4intranet
 +
</pre>
 +
 
 +
После чего откройте в браузере адрес http://localhost:8077 и заходите в wiki с логином-паролем WikiSysop/MediaWiki4Intranet.
 +
 
 +
{{Warning}} В Docker образе не сконфигурирована отправка почты, так как она требует либо настроенного MTA, либо SMTP подключения, а это зависит от окружения, в котором вы запускаете контейнер.
 +
 
 +
== Старый Windows-образ ==
 +
 
 +
Для того, чтобы быстро попробовать '''MediaWiki4Intranet''' на локальной Windows-машине, также есть '''старая''' Windows-сборка. Фичи там есть не все, обновляться она скорее всего больше не будет (на данный момент версия {{/WindowsBundleVersion}}), настроена кривовато (ибо Windows) и не очень безопасно (ибо XAMPP). Раньше это был простейший способ попробовать Mediawiki4Intranet. Подробнее: [[Windows-сборка Mediawiki4Intranet]].
 +
 
 +
{{Box|
 +
{{Warning}} Под Windows не работает следующий функционал MediaWiki4Intranet:
 +
* Отправка почты в формате HTML
 +
* По умолчанию отключён Sphinx-поиск
 +
* По умолчанию отключена поддержка PDF и Djvu
 +
* По умолчанию отключено слияние при конфликтах редактирования — чтобы включить, нужно установить Windows-версию утилиты diff3, и прописать в LocalSettings.php:
 +
<code-php>$wgDiff3 = 'путь к diff3';</code-php>
 +
}}
 +
 
 +
== Ручная установка ==
  
 
=== Скачать код ===
 
=== Скачать код ===
Line 86: Line 115:
 
#: {{cmd|cd mediawiki/configs}}
 
#: {{cmd|cd mediawiki/configs}}
 
#: {{cmd|php repo.php install mediawiki4intranet}}
 
#: {{cmd|php repo.php install mediawiki4intranet}}
# Можно извлечь исходники из Subversion-зеркала: {{cmd|svn co http://wiki.4intra.net/svn/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|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 и пустую БД ===
 
=== Создать папку images и пустую БД ===
Line 123: Line 210:
 
$wgScriptPath = '/wiki';
 
$wgScriptPath = '/wiki';
 
</code-php>
 
</code-php>
 
== Системные требования ==
 
 
Минимальные требования — на случай, если кто-то забыл про стандартный веб-стек:
 
* PHP >= 5.3.
 
* Веб-сервер и сервер приложений PHP. Например, [http://httpd.apache.org/ Apache] или [http://nginx.ru/ nginx] + [http://php-fpm.org/ php_fpm]. Другие варианты (IIS?) тоже, скорее всего, поддерживаются.
 
* СУБД MySQL или MariaDB >= 5.1.
 
* Желательна UNIX-система.
 
 
Также нужны следующие расширения PHP:
 
* '''php5-mysql''' обязательно! :-)
 
* Также обязательно наличие '''DOM'''. Расширение весьма базовое и обычно встроено в PHP, но в Некоторых Дистрибутивах выделено в отдельный пакет типа '''php-dom'''.
 
* '''php5-gd''' для обработки картинок.
 
* '''php5-curl''' для загрузки файлов по URL.
 
 
Требования конфигурации PHP (директивы php.ini):
 
* В боевой конфигурации: <tt>error_reporting = E_ALL & ~E_NOTICE</tt>
 
* Если версия PHP < 5.3: <tt>short_open_tag = Off</tt>
 
* <tt>magic_quotes_gpc = Off, register_globals = Off</tt> (должно быть вообще на любом себя уважающем сервере)
 
* Для загрузки скриншотов через [http://supa.sourceforge.net SUPA]: либо отключённый [http://www.hardened-php.net/suhosin/ Suhosin], либо директивы {{Cmd|1=suhosin.post.max_value_length = 8000000}} и {{Cmd|1=suhosin.request.max_value_length = 8000000}}. 8000000 — как пример, можете установить большее значение.
 
 
Опционально:
 
* php5-xcache для ускорения работы MediaWiki.
 
* [[#php5-fss|php5-fss]] тоже для ускорения, см. подробнее [[#php5-fss]].
 
* Для отправки почты — PEAR-пакеты Mail и Net_SMTP, см. подробнее [[#Отправка E-mail]].
 
 
Дополнительно могут понадобиться сторонние программы — их список внушительный, но под дистрибутивами Linux’а многое легко ставится менеджером пакетов, а для Windows есть [[Windows-сборка Mediawiki4Intranet|готовая сборка]]. Здесь представлен общий вид, подробнее — смотрите ниже.
 
* Импорт-экспорт в 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].
 
* FLV/MP4-видео: [http://www.ffmpeg.org/ ffmpeg] ([http://ffmpeg.arrozcru.org/wiki/index.php?title=Main_Page для windows]).
 
* [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].
 
 
Под Windows не работает следующий функционал MediaWiki4Intranet:
 
* Отправка почты в формате HTML
 
* По умолчанию отключён Sphinx-поиск
 
* По умолчанию отключена поддержка PDF и Djvu
 
* По умолчанию отключено слияние при конфликтах редактирования — чтобы включить, нужно установить Windows-версию утилиты diff3, и прописать в LocalSettings.php:
 
<code-php>$wgDiff3 = 'путь к diff3';</code-php>
 
* [[#php5-fss|php5-fss]] собирать скорее всего задолбаетесь, а готовой виндовой версии нет.
 
 
Теперь для тех, кто считает, что MySQL — не база данных: сама-то MediaWiki поддерживает и PostgreSQL, и Sqlite, и Oracle, но, во-первых, не все расширения тоже их поддерживают, а во-вторых, при использовании MediaWiki '''никакого''' смысла в этих СУБД нет, потому что MediaWiki не генерирует сложные запросы. То есть, '''вообще'''.
 
  
 
== Отправка E-mail ==
 
== Отправка E-mail ==
Line 210: Line 249:
 
* Флаг [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.
 
 
Ещё можно поругать авторов XCache в баге http://xcache.lighttpd.net/ticket/228 за некорректные сообщения об ошибках при запуске php со включённым xcache в CLI режиме :) на функционал не влияет, просто смущает. Обычно конфигурацию модулей для командной строки и апача прописывают общую, а XCache, типа, не работает под CLI, но сообщает об этом кучей предупреждений «PHP Warning: xcache_isset(): xcache.var_size is either 0 or too small to enable var data caching».
 
  
 
== php5-fss ==
 
== php5-fss ==
  
Замечательное расширение для PHP, позволяющее ускорить важнейшую для медиавики операцию — замену набора подстрок на набор других подстрок — примерно в 500 раз. «FSS» значит «Fast String Search» на основе алгоритмов Бойера-Мура и Комменца-Вальтера. Посмотреть доклад (мой, ага — [[Участник:VitaliyFilippov|VitaliyFilippov]] 16:21, 30 марта 2011 (MSD)) про это расширение можно здесь: [[lib:PHP-разгон: серебряная пуля из автомата Комменца-Вальтера (Commentz-Walter)]].
+
Полезное для старых версий PHP расширение, позволяющее ускорить важнейшую для медиавики операцию — замену набора подстрок на набор других подстрок — примерно в 500 раз. «FSS» значит «Fast String Search» на основе алгоритмов Бойера-Мура и Комменца-Вальтера. Посмотреть доклад (мой, ага — [[Участник:VitaliyFilippov|VitaliyFilippov]] 16:21, 30 марта 2011 (MSD)) про это расширение можно здесь: [[lib:PHP-разгон: серебряная пуля из автомата Комменца-Вальтера (Commentz-Walter)]].
  
 
Реально это ускоряет работу MediaWiki в разы, особенно на больших статьях с большим количеством разметки (например, включений шаблонов, функций парсера…).
 
Реально это ускоряет работу MediaWiki в разы, особенно на больших статьях с большим количеством разметки (например, включений шаблонов, функций парсера…).
Line 287: Line 320:
 
Во-первых, нужно установить и настроить [http://sphinxsearch.com/ Sphinx].
 
Во-первых, нужно установить и настроить [http://sphinxsearch.com/ Sphinx].
  
Mediawiki4Intranet использует "realtime" индексы Sphinx.
+
Mediawiki4Intranet использует «realtime» индексы Sphinx.
  
 
Для конфигурирования есть авто-конфигуратор <tt>configs/maintenance/configure-sphinx.php</tt>. Использовать так:
 
Для конфигурирования есть авто-конфигуратор <tt>configs/maintenance/configure-sphinx.php</tt>. Использовать так:
Line 330: Line 363:
 
//$wgSphinxQL_port = '/var/run/searchd.sock'; // UNIX сокет, либо номер TCP-порта SphinxQL
 
//$wgSphinxQL_port = '/var/run/searchd.sock'; // UNIX сокет, либо номер TCP-порта SphinxQL
 
</code-php>
 
</code-php>
 
=== Монолитный индекс (немного устаревший вариант) ===
 
 
Работа монолитных (обновляемых из cron) индексов обеспечивалась устаревшим расширением [[SphinxSearch]] и на данный момент более не поддерживается.
 
  
 
=== [[TikaMW]] ===
 
=== [[TikaMW]] ===
Line 368: Line 397:
 
require_once("$IP/extensions/OpenID/OpenID.setup.php");
 
require_once("$IP/extensions/OpenID/OpenID.setup.php");
 
</code-php>
 
</code-php>
 
Также нужно установить PEAR-пакет Auth_OpenID:
 
* Debian: {{cmd|apt-get install php-openid}}
 
* PEAR: {{cmd|pear install Auth_OpenID}}
 

Revision as of 16:07, 22 September 2016

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

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

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

1 Содержимое

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

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

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

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

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

1.1 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 (в репозиториях отсутствует).

1.2 Патчи

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

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

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

1.3 Расширения

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

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

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

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

2 Установка

2.1 Установка через 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 подключения, а это зависит от окружения, в котором вы запускаете контейнер.

2.2 Старый 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';

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

2.3.1 Скачать код

Варианты:

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

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

2.3.2.1 В 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

2.3.2.2 В других ОС

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

  • 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 — 2.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

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

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

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

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

Сначала нужно создать структуру БД для «голой» 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 из директории установки вики.

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

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

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

2.4 Отправка E-mail

По умолчанию она включается только под 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).

2.5 Короткие URL

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

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

И дополнительно — директив 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]

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

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

2.6 php5-fss

Полезное для старых версий PHP расширение, позволяющее ускорить важнейшую для медиавики операцию — замену набора подстрок на набор других подстрок — примерно в 500 раз. «FSS» значит «Fast String Search» на основе алгоритмов Бойера-Мура и Комменца-Вальтера. Посмотреть доклад (мой, ага — VitaliyFilippov 16:21, 30 марта 2011 (MSD)) про это расширение можно здесь: lib:PHP-разгон: серебряная пуля из автомата Комменца-Вальтера (Commentz-Walter).

Реально это ускоряет работу MediaWiki в разы, особенно на больших статьях с большим количеством разметки (например, включений шаблонов, функций парсера…).

На зеркалах дебиана его нет, однако можно собрать из исходников вот отсюда:

Из исходников собирать нужно потому, что пакетов под i386 там нет, только под amd64. Сборка описана для тех, у кого есть под рукой Debian/Ubuntu.

Нужно скачать файлы:

Если нет пакетов php5-dev, debhelper, то поставить:

sudo apt-get install php5-dev
sudo apt-get install debhelper

И далее сказать:

dpkg-source -x php5-fss_0.0.1-3.dsc
cd php5-fss-0.0.1
debian/rules binary
dpkg -i ../php5-fss_0.0.1-3_i386.deb

Либо можно добавить в /etc/apt/sources.list зеркало http://apt.wikimedia.org/wikimedia/ (обязательно с deb-src), и дальше apt-get update; apt-get source php5-fss и дальше всё то же самое.

Для версий PHP >= 5.3 в коде расширения(fss.c, строка 243) также следует изменить строчку

ZVAL_ADDREF(*value);

На строчку

Z_ADDREF_P(*value);

2.7 PDF, DJVU, LaTeX

Поддержка постраничного просмотра PDF и DJVU по умолчанию включается только под UNIX-ами. Если вы хотите включить её под Windows, есть большая вероятность, что вы считаете свой Windows почти UNIX’ом — тогда просто используйте ServerSettings.php вместо BaseSettings.php + добавьте

  • PDF: GhostScript, Poppler — бывший Xpdf (windows)
  • DJVU: djvulibre, netpbm (windows).
  • LaTeX (формулы <m>…</m>): любой дистрибутив TeX’а, например, в Debian обычно TeXLive, под Windows — MiKTeX. Новая фича: векторный рендеринг формул. Для неё нужна также утилита dvisvgm. В пакетах Debian'а её, к сожалению, нет, придётся ставить ручками. В Windows-сборку она включена и так.

Всё это должно быть прописано в системные пути.

Debian: apt-get install texlive-base djvulibre-bin netpbm ghostscript poppler-utils

Ещё один специфический момент: в poppler-utils есть баг — команда pdfinfo не учитывает поворот страниц. Это приводит к убогому качеству и/или кривому соотношению сторон у картинок, сгенерированных из ландшафтных PDF’ок. Чтобы сие пофиксить, нужно, к сожалению, патчить pdfinfo: http://wiki.4intra.net/extensions/PdfHandler/poppler-utils.diff. На это нами поставлен баг 41867 авторам poppler’а — надеемся, что когда-нибудь поправят / примут патч.

2.8 Graphviz, GNUplot, UMLGraph, PlantUML, UMLEt

  • Graphviz желателен версии не меньше 2.27, так как в предыдущих есть различные мелкие баги.
  • GNUPlot.
  • UMLGraph.
  • UMLet.
  • PlantUML ставить необязательно, он есть в составе MediaWiki4Intranet.
  • UMLGraph, UMLet, PlantUML требуют наличия Java.

Всё это, опять-таки, должно быть в путях.

2.9 Поддержка MP4/FLV видео

Здесь требуется ffmpeg (для windows), прописанный в пути.

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

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

Mediawiki4Intranet использует «realtime» индексы Sphinx.

Для конфигурирования есть авто-конфигуратор 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/.
  • Если конфигуратор предложит инициализировать какие-то индексы и выведет для этого команды — делайте, что говорит.
  • Если конфигуратор предложит что-то добавить в /etc/crontab (команды на переиндексацию) — делайте, что говорит.

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

2.10.1 Что такое Realtime индекс

Обновляемый дополняемый индекс. Расширение SphinxSearchEngine.

Плюсы:

  • Появляются документы в индексе мгновенно;
  • Интерфейс поиска остаётся штатный, только подменяется «движок»;
  • Можно использовать 2.10.2 TikaMW для индексации содержимого бинарных (офисных и т. п.) документов, загруженных в вики как файлы;

Но — индекс именно дополняемый — по факту ничего удалять из индекса Sphinx (2.0.x) не умеет!

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

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

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

2.10.2 TikaMW

Для индексации содержимого загруженных файлов нужно установить Apache Tika. Брать тут:

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

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

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

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

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

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

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

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

2.12 OpenID

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

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

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