Difference between revisions of "Mediawiki4Intranet"

From Wiki4Intranet
Jump to: navigation, search
(Установка)
 
(35 intermediate revisions by 2 users not shown)
Line 15: Line 15:
 
** Форкнутых, то есть, доработанных значительно, в простом виде гитхаб-репозитория.
 
** Форкнутых, то есть, доработанных значительно, в простом виде гитхаб-репозитория.
 
** Новых, созданных нами.
 
** Новых, созданных нами.
* Скрипта установки «repo.php».
+
* Скрипта установки «[[repo.php]]».
 
* Нескольких готовых конфигураций типа <tt>LocalSettings.php</tt> для быстрой установки.
 
* Нескольких готовых конфигураций типа <tt>LocalSettings.php</tt> для быстрой установки.
 
* Нескольких дополнительных утилит обслуживания.
 
* Нескольких дополнительных утилит обслуживания.
  
Лицензия распространения большинства этого добра: GPLv2, как и у самой MediaWiki. /* Надеемся, что тивоизация нам всё-таки не грозит :) */ Но кое-где и GPLv3.
+
Лицензия на сборку — GNU GPLv3 или новее. Почему? Потому, что:
 +
* MediaWiki и большинство расширений распространяются под GPLv2+.
 +
* Часть расширений — под Permissive лицензиями.
 +
* Часть расширений — под GPLv3+.
 +
Соответственно, на сборку целиком распространяется наиболее жёсткая из этих свободных лицензий, а именно, GPLv3.
  
 
== MediaWiki ==
 
== MediaWiki ==
Line 32: Line 36:
  
 
Историй версий MediaWiki в основе Mediawiki4Intranet:
 
Историй версий MediaWiki в основе Mediawiki4Intranet:
* 2012-11-20 &rarr; текущая: '''1.18.5'''.
+
* 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'''.
 
* 2012-02-22 &rarr; 2012-11-20: '''1.18.1'''.
 
* 2011-02-08 &rarr; 2012-02-22: '''1.16.2'''.
 
* 2011-02-08 &rarr; 2012-02-22: '''1.16.2'''.
Line 51: Line 62:
  
 
Описание всех расширений, входящих в сборку MediaWiki4Intranet, читайте на странице: [[Mediawiki4Intranet/Расширения]].
 
Описание всех расширений, входящих в сборку MediaWiki4Intranet, читайте на странице: [[Mediawiki4Intranet/Расширения]].
 +
 +
== Список изменений ==
 +
 +
Изменения в версии Mediawiki4Intranet 1.26 (по сравнению с 1.21): [[Mediawiki4Intranet/1.26]]
  
 
= Установка =
 
= Установка =
  
Если вы хотите быстро попробовать '''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.
 +
 
 +
{{Box|{{Warning}} В Docker образе не сконфигурирована отправка почты, так как она требует либо настроенного MTA, либо SMTP подключения, а это зависит от окружения, в котором вы запускаете контейнер. Чтобы это исправить, либо пропишите в LocalSettings.php конфигурацию [https://www.mediawiki.org/wiki/Manual:$wgSMTP $wgSMTP] (для использования внешнего SMTP-сервера), либо установите внутрь контейнера sendmail/postfix и настройте его (это, к сожалению, пока надо делать вручную).}}
 +
 
 +
=== Сборка с VisualEditor ===
 +
 
 +
В репозитории есть два Dockerfile'а: базовый без VisualEditor и отдельный с оным. Соответственно, чтобы использовать сборку с VisualEditor, вместо одной команды build нужно запустить две:
 +
 
 +
<pre>
 +
docker build -t mediawiki4intranet .
 +
docker build -t mediawiki4intranet/ve -f ve.Dockerfile .
 +
</pre>
 +
 
 +
После чего запускать полученный образ аналогично:
 +
 
 +
<pre>
 +
docker run --name mw4i -p 8077:80 -v /home/wiki4intranet/data -t -d mediawiki4intranet/ve
 +
</pre>
 +
 
 +
== Ручная установка ==
  
 
=== Скачать код ===
 
=== Скачать код ===
Line 66: Line 112:
 
Варианты:
 
Варианты:
  
# Можно скачать [http://wiki.4intra.net/public/mediawiki4intranet.7z архив с исходниками] (примерно 13 МБ)
+
# Можно скачать [http://wiki.4intra.net/public/mediawiki4intranet.7z архив с исходниками] (примерно 25 МБ)
# Можно использовать '''repo.php''' для автоматизированного скачивания с помощью системы контроля версий [[rupedia:Git|Git]] (она должна быть установлена):
+
# Можно использовать [[repo.php]] для автоматизированного скачивания с помощью системы контроля версий [[rupedia:Git|Git]] (что, разумеется, требует установленного git-клиента):
 
#: {{cmd|git clone https://github.com/mediawiki4intranet/configs mediawiki/configs}}
 
#: {{cmd|git clone https://github.com/mediawiki4intranet/configs mediawiki/configs}}
 
#: {{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]]. Для 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 81: Line 185:
 
=== Инициализировать БД ===
 
=== Инициализировать БД ===
  
Сначала нужно создать структуру БД для "голой" MediaWiki:
+
Сначала нужно создать структуру БД для «голой» MediaWiki:
  
 
# Либо просто накатить дамп <tt>maintenance/tables.sql</tt>:
 
# Либо просто накатить дамп <tt>maintenance/tables.sql</tt>:
Line 88: Line 192:
 
# Либо запустить вики-установщик из папки <tt>mw-config</tt> — плюс в том, что он ещё проводит дополнительные проверки версии PHP, расширений и т. п.:
 
# Либо запустить вики-установщик из папки <tt>mw-config</tt> — плюс в том, что он ещё проводит дополнительные проверки версии PHP, расширений и т. п.:
 
#* Зайти на <tt>http://server/wiki/mw-config/</tt>, ответить на вопросы, исправить недоразумения (если таковые возникнут), выбрать базу MySQL, InnoDB, 4.1/5.0 utf8 binary. Установщик создаст пустую БД и конфиг.
 
#* Зайти на <tt>http://server/wiki/mw-config/</tt>, ответить на вопросы, исправить недоразумения (если таковые возникнут), выбрать базу MySQL, InnoDB, 4.1/5.0 utf8 binary. Установщик создаст пустую БД и конфиг.
#* ''Удалить'' конфиг, сгенерированный установщиком — в нём куча опций, которые все уже прописаны в правильные значения в конфигах MediaWiki4Intranet.
+
#* ''Удалить'' конфиг, сгенерированный установщиком — в нём куча опций, которые все уже прописаны в правильные значения в конфигах MediaWiki4Intranet.
 
#* ''Потом'' создать минимальный конфиг MediaWiki4Intranet (см. ниже)
 
#* ''Потом'' создать минимальный конфиг MediaWiki4Intranet (см. ниже)
  
Line 100: Line 204:
 
<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 109: Line 213:
 
</code-php>
 
</code-php>
  
== Системные требования ==
+
== Старый Windows-образ ==
  
Минимальные требования — на случай, если кто-то забыл про стандартный веб-стек:
+
Для того, чтобы быстро попробовать '''MediaWiki4Intranet''' на локальной Windows-машине, также есть '''старая''' Windows-сборка. Фичи там есть не все, обновляться она скорее всего больше не будет (на данный момент версия {{/WindowsBundleVersion}}), настроена кривовато (ибо Windows) и не очень безопасно (ибо XAMPP). Раньше это был простейший способ попробовать Mediawiki4Intranet. Подробнее: [[Windows-сборка Mediawiki4Intranet]].
* PHP версии 5 или выше.
+
* <span style="color: red">Примечание: пока что Mediawiki4Intranet может в разных местах ругаться Notice’ами, поэтому пропишите <tt>error_reporting = E_ALL & ~E_NOTICE</tt> в <tt>php.ini</tt>. Да, в MediaWiki так не принято — скоро исправим, будет полная тишина и под E_STRICT’ом.</span>
+
* Веб-сервер. Проще всего использовать [http://httpd.apache.org/ Apache], хотя теоретически должны поддерживаться и [http://iis.net/ IIS], и [http://nginx.ru/ nginx] + [http://php-fpm.org/ php_fpm].
+
* СУБД MySQL, желательно, версии 5 или выше.
+
* Желательна UNIX-система.
+
  
Также нужны следующие расширения PHP:
+
{{Box|
* '''php5-mysql''' обязательно! :-)
+
{{Warning}} Под Windows не работает следующий функционал MediaWiki4Intranet:
* Также обязательно наличие '''DOM'''. Расширение весьма базовое и обычно встроено в PHP, но в Некоторых Дистрибутивах выделено в отдельный пакет типа '''php-dom'''.
+
* '''php5-gd''' для обработки картинок.
+
* '''php5-curl''' для загрузки файлов по URL.
+
 
+
Требования конфигурации PHP (директивы php.ini):
+
* Пока что <tt>error_reporting = E_ALL & ~E_NOTICE</tt>
+
* Если версия PHP &lt; 5.3: <tt>short_open_tag = Off</tt>
+
* <tt>magic_quotes_gpc = 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
 
* Отправка почты в формате 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 173: Line 245:
 
== Короткие 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 180: 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 191: Line 296:
  
 
Всё относительно очевидно, но есть нюансы:
 
Всё относительно очевидно, но есть нюансы:
* Если вы при этом хотите использовать 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.
 
 
* В последней строчке обязательно писать именно <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.
 
 
Ещё можно поругать авторов 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 ==
 
 
Замечательное расширение для 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/p/php5-fss/
 
 
Из исходников собирать нужно потому, что пакетов под i386 там нет, только под amd64. Сборка описана для тех, у кого есть под рукой Debian/Ubuntu.
 
 
Нужно скачать файлы:
 
* http://apt.wikimedia.org/wikimedia/pool/main/p/php5-fss/php5-fss_0.0.1.orig.tar.gz
 
* http://apt.wikimedia.org/wikimedia/pool/main/p/php5-fss/php5-fss_0.0.1-3.dsc
 
* http://apt.wikimedia.org/wikimedia/pool/main/p/php5-fss/php5-fss_0.0.1-3.diff.gz
 
 
Если нет пакетов php5-dev, debhelper, то поставить:
 
<code-bash>
 
sudo apt-get install php5-dev
 
sudo apt-get install debhelper
 
</code-bash>
 
И далее сказать:
 
<code-bash>
 
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
 
</code-bash>
 
 
Либо можно добавить в <tt>/etc/apt/sources.list</tt> зеркало <tt>http://apt.wikimedia.org/wikimedia/</tt> (обязательно с deb-src), и дальше {{cmd|apt-get update; apt-get source php5-fss}} и дальше всё то же самое.
 
 
Для версий PHP >= 5.3 в коде расширения(fss.c, строка 243) также следует изменить строчку
 
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://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]. <span style="color:red">Новая фича:</span> векторный рендеринг формул. Для неё нужна также утилита [http://dvisvgm.sourceforge.net/ dvisvgm]. В пакетах Debian'а её, к сожалению, нет, придётся ставить ручками. В Windows-сборку она включена и так.
 
 
Всё это должно быть прописано в системные пути.
 
 
Debian: {{cmd|apt-get install texlive-base djvulibre-bin netpbm ghostscript poppler-utils}}
 
 
Ещё один специфический момент: в <tt>poppler-utils</tt> есть баг — команда <tt>pdfinfo</tt> не учитывает поворот страниц. Это приводит к убогому качеству и/или кривому соотношению сторон у картинок, сгенерированных из ландшафтных PDF’ок. Чтобы сие пофиксить, нужно, к сожалению, патчить pdfinfo: http://wiki.4intra.net/extensions/PdfHandler/poppler-utils.diff. На это нами поставлен [https://bugs.freedesktop.org/show_bug.cgi?id=41867 баг 41867] авторам poppler’а — надеемся, что когда-нибудь поправят / примут патч.
 
 
== Graphviz, GNUplot, UMLGraph, PlantUML, UMLEt ==
 
 
* [http://www.graphviz.org/ Graphviz] желателен версии не меньше 2.27, так как в предыдущих есть различные мелкие баги.
 
* [http://www.gnuplot.info/ GNUPlot].
 
* [http://www.umlgraph.org/ UMLGraph].
 
* [http://www.umlet.com/ UMLet].
 
* [http://plantuml.sourceforge.net/ PlantUML] ставить необязательно, он есть в составе MediaWiki4Intranet.
 
* UMLGraph, UMLet, PlantUML требуют наличия [http://java.sun.com Java].
 
 
Всё это, опять-таки, должно быть в путях.
 
 
== Поддержка MP4/FLV видео ==
 
 
Здесь требуется [http://www.ffmpeg.org/ ffmpeg] ([http://ffmpeg.arrozcru.org/wiki/index.php?title=Main_Page для windows]), прописанный в пути.
 
  
 
== Sphinx-поиск по вики ==
 
== Sphinx-поиск по вики ==
  
Во-первых, нужно установить и настроить [http://sphinxsearch.com/ Sphinx].
+
Во-первых, нужно установить [http://sphinxsearch.com/ Sphinx].
  
Дальше есть два способа (см. ниже) — Realtime индекс и монолитный индекс.
+
Mediawiki4Intranet использует «realtime» индексы Sphinx, то есть, обновляемые индексы. Ответственное расширение - [[SphinxSearchEngine]]. Для конфигурирования есть авто-конфигуратор <tt>configs/maintenance/configure-sphinx.php</tt>. Использовать так:
 
+
Для обоих способов есть авто-конфигуратор <tt>sphinxsearch/configure.sphinx.php</tt>. Использовать так:
+
  
 
* Создаём рядом с ним файл <tt>sphinx.wikis.php</tt>, в который прописываем что-то вроде:
 
* Создаём рядом с ним файл <tt>sphinx.wikis.php</tt>, в который прописываем что-то вроде:
Line 288: Line 318:
 
));
 
));
 
</code-php>
 
</code-php>
* Вызываем <tt>php configure.sphinx.php --hostname HOST --style STYLE</tt>, где STYLE = «rt» (обновляемый индекс) или «local» (обычный индекс). Под UNIX вместо HOST можно использовать имя из <tt>/etc/hostname</tt>, и тогда можно будет держать один конфиг на несколько серверов, и вызывать без опции <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> (команды на переиндексацию) — делайте, что говорит.
+
  
{{red|Внимание:}} автогенерённые конфиги, скорее всего, непригодны для использования под виндами. Вообще, мы под виндами сфинкса не используем и гарантировать работу тоже не можем.
+
После чего прописываем в <tt>LocalSettings.php</tt> (раскомментируйте и подставьте адрес и порт, если у вас он в итоге отличается):
 
+
=== Realtime индекс ===
+
 
+
<s>Обновляемый</s> дополняемый индекс. Расширение [[SphinxSearchEngine]].
+
 
+
{{green|Плюсы:}}
+
* Появляются документы в индексе мгновенно;
+
* Интерфейс поиска остаётся штатный, только подменяется «движок»;
+
* Можно использовать [[#TikaMW|TikaMW]] для индексации содержимого бинарных (офисных и т. п.) документов, загруженных в вики как файлы;
+
 
+
Но — индекс именно дополняемый — по факту ничего удалять из индекса Sphinx (2.0.x) '''не умеет!'''
+
 
+
То есть, он только делает вид, что умеет — на самом деле в индексе старые версии документов остаются, просто прописываются в «Kill-List» — список ID устаревших документов, которые удаляются из результатов поиска. Поэтому при большом количестве обновлений страниц могут пойти тормоза. И хотя сфинкс ''очень'' быстрый и тормоза пойдут не скоро, это всё-таки может случиться, и тогда время от времени всё равно будет нужно делать переиндексацию:
+
* Остановить демон сфинкса: {{cmd|/etc/init.d/sphinxsearch stop}}
+
* Удалить файлы индекса: {{cmd|rm /var/lib/sphinxsearch/data/yourwiki.*}}
+
* Запустить демон обратно: {{cmd|/etc/init.d/sphinxsearch start}}
+
* Запустить {{cmd|php extensions/SphinxSearchEngine/rebuild-sphinx.php}}
+
 
+
<tt>LocalSettings.php</tt> (раскомментируйте и подставьте адрес и порт, если у вас он в итоге отличается):
+
  
 
<code-php>
 
<code-php>
Line 321: Line 331:
 
</code-php>
 
</code-php>
  
=== Монолитный индекс (немного устаревший вариант) ===
+
{{Warning}} На самом деле старые версии документов при обновлениях в индексе остаются, просто прописываются в «Kill-List» — список ID устаревших документов, которые удаляются из результатов поиска. Поэтому при большом количестве обновлений страниц могут пойти тормоза. И хотя сфинкс ''очень быстрый'' и тормоза пойдут не скоро, это всё-таки может случиться. Поэтому время от времени полезно делать оптимизацию индекса, подсоединяясь к Sphinx MySQL-клиентом и отправляя ему SQL-запрос '''OPTIMIZE INDEX index_name'''.
 
+
Индекс монолитный, то есть, необновляемый. Расширение называется просто [[SphinxSearch]]. Работает так: держим два индекса — один полный, другой за последний день. Ночью полная переиндексация, а каждый час/полчаса/5 минут, кому как нравится — переиндексация данных за последний день.
+
 
+
{{red|Минусы:}}
+
* Не используется штатный интерфейс поиска MediaWiki;
+
* Данные появляются в поиске не мгновенно;
+
* Ночная переиндексация может занимать приличное время, если данных много;
+
* С таким поиском не получится использовать [[TikaMW]].
+
 
+
<tt>LocalSettings.php</tt> (раскомментируйте и подставьте адрес и порт, если у вас он в итоге отличается):
+
 
+
<code-php>
+
require_once "$IP/extensions/SphinxSearch/SphinxSearch.php";
+
$wgSphinxSearch_index = 'main_wiki, inc_wiki';
+
//$wgSphinxSearch_host = 'localhost';
+
//$wgSphinxSearch_port = 3112;
+
</code-php>
+
 
+
=== TikaMW ===
+
  
[[TikaMW]] — наше расширение MediaWiki, подключающее для индексации загруженных в Wiki файлов библиотеку [http://tika.apache.org/ Apache Tika]. Tika умеет извлекать текст из бинарных документов различных форматов — MS Office, Open Office, PDF и так далее.
+
=== [[TikaMW]] ===
  
Нужна Java и собственно, сама tika (tika-app.jar). Оную брать лучше тоже у нас, так как в нашей версии поправлен один баг и добавлена возможность слушать порт не на всех интерфейсах, а только на заданном (например, на 127.0.0.1).
+
[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://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
 
* Или тут: http://wiki.4intra.net/public/tika-app-1.2-fix-TIKA709-TIKA964.jar
 
Ссылки на баги, поставленные в апстрим по Тике: [https://issues.apache.org/jira/browse/TIKA-709 TIKA-709], [https://issues.apache.org/jira/browse/TIKA-964 TIKA-964].
 
  
 
Тику нужно прописать в автозапуск на сервере как-то так:
 
Тику нужно прописать в автозапуск на сервере как-то так:
Line 354: Line 343:
 
<pre>java -jar tika-app-1.2-fix-TIKA709-TIKA964.jar -p 127.0.0.1:8072 -t -eutf-8</pre>
 
<pre>java -jar tika-app-1.2-fix-TIKA709-TIKA964.jar -p 127.0.0.1:8072 -t -eutf-8</pre>
  
Если вы используете наш ServerSettings.php, то прописывать Тику дополнительно не нужно — она уже там. А под виндами у нас и сфинкс пока отключён :)
+
Более подробная информация в статье расширения: [[TikaMW]].
 
+
Ну и, разумеется, если в вики до этого уже были файлы, а вы по ним хотите искать — индекс нужно будет перестроить с помощью <tt>extensions/SphinxSearchEngine/rebuild-sphinx.php</tt>.
+
  
 
== Антиспам для публичных Wiki ==
 
== Антиспам для публичных Wiki ==
Line 362: 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/ConfirmEdit/ConfirmEdit.php');
+
require_once('extensions/ConfirmEdit/ReCaptcha.php');
+
// Sign up for these at http://recaptcha.net/api/getkey
+
$recaptcha_public_key = '';
+
$recaptcha_private_key = '';
+
 
+
// Требовать подтверждение email-адреса для редактирования
+
$wgEmailConfirmToEdit = true;
+
</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>:
Line 404: Line 366:
 
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");