Mediawiki - Установка расширений MediaWiki для конкретной версии - 2026

Материал из Wiki - Iphoster - the best ever hosting and support. 2005 - 2026
Перейти к:навигация, поиск

MediaWiki — Установка расширений MediaWiki для конкретной версии — 2026

MediaWiki — это свободный вики-движок, написанный на PHP и распространяемый под лицензией GPL. Он является основой Википедии, Викисклада, Викиданных и тысяч других вики-сайтов по всему миру. Ежемесячно сайты на MediaWiki обслуживают миллиарды просмотров страниц, а экосистема расширений насчитывает более 2000 модулей.

Ключевая особенность MediaWiki, отличающая его от многих других CMS — модульная архитектура. Ядро движка содержит только базовый функционал: управление страницами, пользователями, правами доступа и базами данных. Все дополнительные возможности реализуются через [[1]] (extensions) и [[2]] (skins).

Расширения могут кардинально менять функциональность вики: добавлять поддержку семантических запросов (Semantic MediaWiki), визуальное редактирование (VisualEditor), интеграцию с LDAP, спам-фильтры, кэширующие механизмы, поддержку математических формул (Math), сложные диаграммы (Graph), многоязычную поддержку (Translate), и многое другое.

Однако с такой гибкостью приходит и ответственность. Неправильный выбор версии расширения — одна из самых частых проблем, с которой сталкиваются администраторы MediaWiki. Использование расширения из неподходящей ветки Git может привести к фатальным ошибкам, неработающим страницам и даже повреждению базы данных. В этой статье мы подробнейшим образом разберём, как правильно устанавливать расширения MediaWiki с учётом версионной совместимости.

История экосистемы: Система расширений MediaWiki эволюционировала за два десятилетия. Ранние расширения (до 2008 года) представляли собой простые PHP-файлы, которые подключались через require_once. С появлением extension.json в MediaWiki 1.25 (2015 год) процесс регистрации стал декларативным и унифицированным. Сегодня каждое расширение — это полноценный модуль со своими зависимостями, автозагрузкой классов, конфигурацией и локализацией.

Кто разрабатывает расширения: Расширения создаются как Фондом Викимедиа (для нужд Википедии и сопутствующих проектов), так и независимыми разработчиками. Наиболее популярные и стабильные расширения проходят ревью в [[3]] и получают официальную поддержку. Расширения, не прошедшие ревью, могут быть опубликованы на GitHub или других платформах, но их установка несёт дополнительные риски.

Как выбрать расширение: При выборе расширения для вашей вики обратите внимание на следующие факторы:

  • Активность поддержки: когда было последнее обновление? Есть ли ответы на вопросы на странице обсуждения?
  • Количество установок: указано на странице расширения в Special:ExtensionDistributor. Чем больше установок, тем стабильнее расширение.
  • Наличие REL-веток: если расширение не имеет REL-веток, это может означать, что оно не поддерживается официально.
  • Зависимости: какие ещё расширения или внешние библиотеки требуются? Учтите это при планировании.
  • Совместимость с PHP и БД: проверьте требования в инфобоксе расширения.
  • Лицензия: убедитесь, что лицензия совместима с вашими требованиями (GPL-2.0+, MIT, BSD).

Структура страницы расширения на mediawiki.org: Каждая страница расширения содержит стандартный инфобокс с ключевой информацией:

  • Название и иконка расширения
  • Статус (stable, beta, experimental, unmaintained)
  • Тип расширения (parserhook, specialpage, skin, api и т.д.)
  • Описание и авторы
  • Версия и дата последнего обновления
  • Совместимость с версиями MediaWiki
  • Политика совместимости (master, rel, ltsrel)
  • Лицензия
  • Ссылка на скачивание и Git-репозиторий

Внимательное изучение этой информации перед установкой — залог успешной и беспроблемной интеграции расширения в вашу вики.

Типы расширений: Различают несколько типов расширений в зависимости от их функции:

  • parser hooks: добавляют новые теги парсера (например, <math>, <syntaxhighlight>);
  • special pages: добавляют служебные страницы (Special:Upload, Special:Import, Special:Export);
  • skins: изменяют внешний вид вики (Vector, MonoBook, Timeless);
  • API modules: добавляют новые точки доступа к API;
  • maintenance scripts: добавляют скрипты командной строки для обслуживания;
  • editor plugins: расширяют возможности редактора (WikiEditor, CodeEditor);
  • data providers: интегрируют внешние источники данных (LDAP, OAuth, Elasticsearch).

Важность соответствия версий

MediaWiki выпускает новые стабильные версии примерно три раза в год. Каждый релиз вносит изменения в API, добавляет новые хуки, удаляет устаревшие функции и меняет внутренние механизмы. Расширения, написанные под одну версию, могут быть полностью несовместимы с другой.

Пример из реальной практики: Вы обновили MediaWiki с 1.43 до 1.46, но забыли обновить расширение ParserFunctions. При попытке открыть страницу с условными конструкциями {{#if:}} возникает Fatal error: Call to undefined method Parser::getFunctionLang(). Причина: в новой версии MediaWiki метод был переименован и перемещён в другой класс.

Чтобы избежать подобных ситуаций, все официальные расширения MediaWiki, размещённые в [Gerrit], следуют единой системе ветвления — REL1_XX. Для каждой версии MediaWiki создаётся соответствующая ветка во всех поддерживаемых расширениях.

Версия MediaWiki Дата релиза Ветка Git Статус
1.39.x Ноябрь 2023 REL1_39 LTS (поддержка завершена в ноябре 2025)
1.40.x Март 2024 REL1_40 Устаревшая
1.41.x Июнь 2024 REL1_41 Устаревшая
1.42.x Сентябрь 2024 REL1_42 Устаревшая
1.43.x Декабрь 2024 REL1_43 LTS (поддержка до 2028)
1.44.x Март 2025 REL1_44 Старая стабильная
1.45.x Октябрь 2025 REL1_45 Предыдущая стабильная
1.46.x Июнь 2026 REL1_46 Текущая стабильная

Источник: [notes — MediaWiki]

Жизненный цикл версий MediaWiki: Понимание жизненного цикла версий помогает планировать обновления. MediaWiki придерживается следующего графика:

  • Каждые 4–5 месяцев выходит новая стабильная версия (1.44 → 1.45 → 1.46).
  • Каждый третий-четвёртый релиз объявляется LTS (Long Term Support) с периодом поддержки 3 года.
  • Последние LTS-версии: 1.31 (выпущена 2018, поддержка завершена 2021), 1.35 (2020–2023), 1.39 (2023–2025), 1.43 (2024–2028).
  • Версии, не входящие в LTS, поддерживаются до выхода следующей стабильной версии плюс примерно месяц на патчи безопасности.

Когда ожидать REL1_47: Следующая версия MediaWiki 1.47 ожидается в конце 2026 года. Ветка REL1_47 будет создана для ядра и всех расширений одновременно, что отражено в задаче Phabricator, которая будет создана по окончании цикла 1.46.

Как узнать версию MediaWiki

Первый шаг перед установкой любых расширений — точное определение версии MediaWiki на вашем сервере. Ошибка на этом этапе сведёт на нет все дальнейшие усилия.

Способ 1: страница Special:Version Это самый простой и наглядный способ. Откройте в браузере:

https://ваш-домен/mediawiki/index.php/Special:Version

Здесь отображается:

  • Версия MediaWiki (например, 1.46.0)
  • Версия PHP
  • Тип и версия базы данных (MySQL, PostgreSQL, SQLite)
  • Список всех установленных расширений с их версиями
  • URL для загрузки Git-веток

Способ 2: командная строка (скрипт eval) Для MediaWiki 1.40 и новее:

php maintenance/run.php eval 'echo MW_VERSION . PHP_EOL;'

Для старых версий (до 1.40):

php maintenance/eval.php 'echo MW_VERSION;'

Способ 3: файл DefaultSettings.php В файле includes/DefaultSettings.php найдите переменную:

$wgVersion = '1.46.0';

Способ 4: API-запрос Отправьте GET-запрос к API вашей вики:

curl -s "https://ваш-домен/mediawiki/api.php?action=query&meta=siteinfo&format=json" | jq '.query.general.version'

Способ 5: файл RELEASE_NOTES В корневой директории MediaWiki находится файл RELEASE_NOTES, в первой строке которого указана версия.

Что такое ветки REL1_XX и как они работают

Система ветвления REL1_XX — это основа управления версиями в экосистеме MediaWiki. При подготовке каждого стабильного релиза MediaWiki инженеры Фонда Викимедиа создают новую ветку во всех репозиториях Gerrit.

Процесс создания ветки:

  1. Из ветки master создаётся ответвление REL1_XX.
  2. В эту ветку включаются только стабильные изменения, прошедшие ревью.
  3. Ветка master продолжает развиваться в сторону следующей версии.
  4. В ветку REL1_XX портируются только критические исправления безопасности и багов.

Пример для MediaWiki 1.46: Согласно [T423259 в Phabricator], ветка REL1_46 была создана для ядра MediaWiki и всех расширений в рамках процесса релиза 1.46.0.

Важно: Ветка master — это нестабильная ветка разработки. Она содержит изменения, которые могут войти в следующую мажорную версию. Использовать master на рабочих сайтах категорически не рекомендуется, за исключением случаев, когда политика совместимости расширения (master policy) явно это допускает.

Политики совместимости расширений

Не все расширения следуют модели строгих REL-веток. На странице каждого расширения на mediawiki.org в инфобоксе указана его политика совместимости. Всего существует три политики:

master (ключ: master): Главная ветка расширения совместима с текущей и несколькими предыдущими версиями MediaWiki. Разработчики добавляют хаки обратной совместимости прямо в код. Это снижает нагрузку на администраторов (не нужно думать о ветках), но увеличивает сложность кода и может ограничивать использование новых возможностей ядра.

Примеры расширений с политикой master: [[4]], [[5]].

rel (ключ: rel): Для каждого релиза MediaWiki существует соответствующая ветка расширения. Это самая распространённая политика. Если вы используете MediaWiki 1.46, вы должны использовать ветку REL1_46 расширения.

Примеры: [[6]], [[7]], [[8]].

ltsrel (ключ: ltsrel): Ветки создаются только для LTS-выпусков MediaWiki. Если вы используете не-LTS версию, то обычно используется ветка предыдущей LTS-версии.

Пример: некоторые расширения экосистемы Викиданных (Wikidata).

Чтобы узнать политику конкретного расширения, найдите поле compatibility policy в инфобоксе на странице расширения на mediawiki.org.

Метод 1: установка через Git (рекомендованный)

Git-установка — золотой стандарт для администраторов MediaWiki. Она обеспечивает простоту обновления, возможность переключения между ветками и полный контроль над версиями.

Базовая команда:

cd /var/www/mediawiki/extensions
git clone -b REL1_46 https://gerrit.wikimedia.org/r/mediawiki/extensions/ИмяРасширения.git

Где REL1_46 замените на вашу ветку, а ИмяРасширения — на точное название расширения (регистр имеет значение).

Примеры для наиболее популярных расширений (MediaWiki 1.46):

cd /var/www/mediawiki/extensions

# Работа с цитированием
git clone -b REL1_46 https://gerrit.wikimedia.org/r/mediawiki/extensions/Cite.git

# Условный парсинг страниц
git clone -b REL1_46 https://gerrit.wikimedia.org/r/mediawiki/extensions/ParserFunctions.git

# Подсветка синтаксиса кода
git clone -b REL1_46 https://gerrit.wikimedia.org/r/mediawiki/extensions/SyntaxHighlight_GeSHi.git

# Визуальный редактор
git clone -b REL1_46 https://gerrit.wikimedia.org/r/mediawiki/extensions/VisualEditor.git

# Карты изображений
git clone -b REL1_46 https://gerrit.wikimedia.org/r/mediawiki/extensions/ImageMap.git

# Поле ввода (InputBox)
git clone -b REL1_46 https://gerrit.wikimedia.org/r/mediawiki/extensions/InputBox.git

# Редактор кода (CodeEditor)
git clone -b REL1_46 https://gerrit.wikimedia.org/r/mediawiki/extensions/CodeEditor.git

# Всплывающие подсказки (Popups)
git clone -b REL1_46 https://gerrit.wikimedia.org/r/mediawiki/extensions/Popups.git

# Математические формулы (Math)
git clone -b REL1_46 https://gerrit.wikimedia.org/r/mediawiki/extensions/Math.git

# PDF-экспорт (PDFExport)
git clone -b REL1_46 https://gerrit.wikimedia.org/r/mediawiki/extensions/PdfExport.git

# Таблицы сортировки (SortableTables)
git clone -b REL1_46 https://gerrit.wikimedia.org/r/mediawiki/extensions/SortableTables.git

Примеры для MediaWiki 1.45:

cd /var/www/mediawiki/extensions
git clone -b REL1_45 https://gerrit.wikimedia.org/r/mediawiki/extensions/Cite.git
git clone -b REL1_45 https://gerrit.wikimedia.org/r/mediawiki/extensions/ParserFunctions.git
git clone -b REL1_45 https://gerrit.wikimedia.org/r/mediawiki/extensions/VisualEditor.git

Примеры для MediaWiki 1.43 (LTS):

cd /var/www/mediawiki/extensions
git clone -b REL1_43 https://gerrit.wikimedia.org/r/mediawiki/extensions/Cite.git
git clone -b REL1_43 https://gerrit.wikimedia.org/r/mediawiki/extensions/ParserFunctions.git
git clone -b REL1_43 https://gerrit.wikimedia.org/r/mediawiki/extensions/VisualEditor.git
git clone -b REL1_43 https://gerrit.wikimedia.org/r/mediawiki/extensions/SyntaxHighlight_GeSHi.git

Примеры для MediaWiki 1.39 (LTS, устаревшая):

cd /var/www/mediawiki/extensions
git clone -b REL1_39 https://gerrit.wikimedia.org/r/mediawiki/extensions/Cite.git
git clone -b REL1_39 https://gerrit.wikimedia.org/r/mediawiki/extensions/ParserFunctions.git
git clone -b REL1_39 https://gerrit.wikimedia.org/r/mediawiki/extensions/SyntaxHighlight_GeSHi.git

Клонирование всех расширений сразу: Если вы хотите получить все расширения, размещённые в Gerrit:

cd /var/www/mediawiki
git clone https://gerrit.wikimedia.org/r/mediawiki/extensions --branch REL1_46

Это займёт значительное время (репозиторий содержит сотни расширений), но гарантирует, что все расширения будут из одной ветки. После этого для активации конкретных расширений достаточно добавить wfLoadExtension() в LocalSettings.php.

Метод 2: установка через Composer

Composer — это менеджер зависимостей для PHP. Он особенно полезен, когда расширение имеет внешние PHP-зависимости.

Настройка Composer для MediaWiki: MediaWiki поставляется с собственным файлом composer.json, который нельзя редактировать напрямую. Для добавления расширений используется файл composer.local.json.

Скопируйте шаблон:

cd /var/www/mediawiki
cp composer.local.json.sample composer.local.json

Пример composer.local.json для популярных расширений:

{
  "require": {
    "mediawiki/semantic-media-wiki": "~4.0",
    "mediawiki/semantic-result-formats": "~4.0",
    "mediawiki/maps": "~10.0",
    "mediawiki/semantic-compound-queries": "~2.0"
  }
}

Затем выполните:

composer update --no-dev

Установка расширений, не зарегистрированных на Packagist: Многие расширения MediaWiki не опубликованы на Packagist, но их можно установить через Composer, указав VCS-репозиторий:

{
  "repositories": [
    {
      "type": "vcs",
      "url": "https://gerrit.wikimedia.org/r/mediawiki/extensions/Echo"
    },
    {
      "type": "vcs",
      "url": "https://gerrit.wikimedia.org/r/mediawiki/extensions/Flow"
    }
  ],
  "require": {
    "mediawiki/echo": "dev-REL1_46",
    "mediawiki/flow": "dev-REL1_46"
  }
}

Важно: Composer устанавливает расширения в каталог vendor/, а не extensions/. Однако современные расширения с extension.json автоматически регистрируются. После установки через Composer всё равно необходимо добавить wfLoadExtension() в LocalSettings.php.

Метод 3: ручная установка (tarball)

Если у вас нет доступа к Git или Composer (например, на виртуальном хостинге с ограниченным shell-доступом), расширения можно установить вручную.

Шаг 1: Найдите правильную версию расширения. Перейдите на страницу расширения на mediawiki.org. В инфобоксе есть ссылка "Download". Альтернативно, используйте [— сервис сборки расширений].

Шаг 2: Скачайте архив.

cd /tmp
wget https://extdist.wmflabs.org/dist/extensions/Cite-REL1_46-0e7f8e2.tar.gz

Шаг 3: Распакуйте в каталог extensions.

cd /var/www/mediawiki/extensions
tar -xzf /tmp/Cite-REL1_46-0e7f8e2.tar.gz

Шаг 4: Проверьте права доступа.

chown -R www-data:www-data /var/www/mediawiki/extensions/Cite
chmod -R 755 /var/www/mediawiki/extensions/Cite

Шаг 5: Активируйте расширение (см. следующий раздел).

Активация расширения в LocalSettings.php

После того как файлы расширения размещены в каталоге extensions/, необходимо активировать его в конфигурационном файле LocalSettings.php.

Современный метод — wfLoadExtension() (рекомендуется):

wfLoadExtension( 'Cite' );
wfLoadExtension( 'ParserFunctions' );
wfLoadExtension( 'SyntaxHighlight_GeSHi' );
wfLoadExtension( 'VisualEditor' );

Этот метод появился в MediaWiki 1.25. Расширение должно содержать файл extension.json с метаданными. Преимущества:

  • автоматическое определение зависимостей;
  • загрузка необходимых PHP-файлов;
  • управление очередью загрузки.

Устаревший метод — require_once:

require_once "$IP/extensions/Cite/Cite.php";
require_once "$IP/extensions/ParserFunctions/ParserFunctions.php";

Используется только для очень старых расширений, которые не имеют extension.json (написаны до 2014 года).

Порядок добавления: Вызовы wfLoadExtension() следует добавлять в конец файла LocalSettings.php. Если расширение поддерживает конфигурационные параметры, их нужно добавлять после вызова wfLoadExtension():

wfLoadExtension( 'VisualEditor' );

// Настройки VisualEditor
$wgVisualEditorEnableWikitext = true;
$wgDefaultUserOptions['visualeditor-enable'] = 1;

Исключение для скриптов обслуживания: Некоторые расширения плохо работают в контексте командной строки. Для таких случаев используйте условную загрузку:

if ( !$wgCommandLineMode ) {
    wfLoadExtension( 'ExtensionWithCLIProblems' );
}

Обновление базы данных

После установки нового расширения или обновления существующего необходимо проверить, не требует ли оно изменений схемы базы данных.

MediaWiki отслеживает версии схемы в таблице updatelog. Скрипт update сравнивает текущую схему с ожидаемой и применяет недостающие изменения (создание таблиц, добавление индексов, изменение полей).

Для MediaWiki 1.40 и новее:

php maintenance/run.php update

Для MediaWiki 1.39 и старше:

php maintenance/update.php

Скрипт можно запускать многократно — он идемпотентен. Рекомендуется всегда запускать его после установки любого расширения, даже если вы не уверены, нужны ли изменения БД. Это не навредит, но может предотвратить будущие ошибки.

Обновление установленных расширений

Регулярное обновление расширений — важная часть администрирования MediaWiki. Старые версии могут содержать уязвимости безопасности или быть несовместимыми с новыми версиями PHP.

Обновление одного расширения через Git:

cd /var/www/mediawiki/extensions/SyntaxHighlight_GeSHi
git fetch origin
git checkout REL1_46
git pull

Обновление всех расширений через Git:

cd /var/www/mediawiki/extensions
for dir in */; do
    if [ -d "$dir/.git" ]; then
        (cd "$dir" && git fetch origin && git checkout REL1_46 && git pull)
    fi
done

Обновление всех расширений через git submodule: Если ваша установка MediaWiki инициализирована через submodules:

cd /var/www/mediawiki
git submodule foreach 'git fetch origin && git checkout REL1_46 && git pull'

Обновление расширений, установленных через Composer:

cd /var/www/mediawiki
composer update --no-dev

После обновления всегда выполняйте:

php maintenance/run.php update

Обновление MediaWiki вместе с расширениями

Переход на новую версию MediaWiki — ответственный процесс. Правильная последовательность действий:

Шаг 1: Обновите все расширения до ветки новой версии.

cd /var/www/mediawiki/extensions
for dir in */; do
    if [ -d "$dir/.git" ]; then
        (cd "$dir" && git fetch origin && git checkout REL1_46 && git pull)
    fi
done

Шаг 2: Сделайте резервную копию.

mysqldump -u root -p my_wiki > /backup/pre_upgrade_$(date +%Y%m%d).sql
tar -czf /backup/mediawiki_$(date +%Y%m%d).tar.gz /var/www/mediawiki

Шаг 3: Скачайте новую версию MediaWiki ядра.

cd /var/www
mv mediawiki mediawiki_old
git clone -b REL1_46 https://gerrit.wikimedia.org/r/mediawiki/core.git mediawiki

Шаг 4: Скопируйте каталоги расширений, скинов и файл конфигурации.

cp -r mediawiki_old/extensions mediawiki/
cp -r mediawiki_old/skins mediawiki/
cp mediawiki_old/LocalSettings.php mediawiki/
cp -r mediawiki_old/images mediawiki/

Шаг 5: Запустите обновление базы данных.

cd /var/www/mediawiki
php maintenance/run.php update

Шаг 6: Проверьте работоспособность. Откройте несколько страниц, проверьте Special:Version и выполните ключевые действия (редактирование, поиск, загрузка файлов).

Внутреннее устройство расширений

Понимание структуры типичного расширения помогает в диагностике проблем. Современное расширение MediaWiki (с extension.json) имеет следующую структуру:

ExtensionName/
├── extension.json          # Манифест расширения (обязателен)
├── composer.json           # Для Composer-установки (опционально)
├── README.md               # Документация
├── CHANGELOG.md            # История изменений
├── includes/               # PHP-классы
│   ├── ExtensionName.php   # Основной класс
│   ├── Hooks.php           # Обработчики хуков
│   └── Special.php         # Служебные страницы
├── i18n/                   # Файлы локализации
│   ├── en.json
│   ├── ru.json
│   └── qqq.json            # Документация к сообщениям
├── modules/                # JavaScript и CSS
│   ├── ext.extensionName.js
│   └── ext.extensionName.css
├── tests/                  # Тесты
│   ├── phpunit/
│   └── qunit/
└── sql/                    # SQL-скрипты для создания таблиц
    └── extensionName.sql

Файл extension.json содержит важнейшие метаданные:

{
  "name": "MyExtension",
  "version": "2.0.0",
  "author": "Developer Name",
  "url": "https://www.mediawiki.org/wiki/Extension:MyExtension",
  "descriptionmsg": "myextension-desc",
  "license-name": "GPL-2.0-or-later",
  "type": "parserhook",
  "requires": {
    "MediaWiki": ">= 1.43.0",
    "php": ">= 8.1.0"
  },
  "AutoloadNamespaces": {},
  "Hooks": {},
  "hook-handlers": [],
  "config": {},
  "manifest_version": 2
}

Поле requires задаёт минимальные версии MediaWiki и PHP, необходимые для работы расширения. Если эти требования не выполнены, MediaWiki выдаст ошибку ExtensionDependencyError.

Расширенные примеры установки

Semantic MediaWiki (полнотекстовый семантический поиск)

Semantic MediaWiki — одно из самых мощных расширений. Оно добавляет семантические аннотации, запросы и вывод данных.

Установка для MediaWiki 1.46:

cd /var/www/mediawiki/extensions
git clone -b REL1_46 https://gerrit.wikimedia.org/r/mediawiki/extensions/SemanticMediaWiki.git
git clone -b REL1_46 https://gerrit.wikimedia.org/r/mediawiki/extensions/SemanticResultFormats.git
git clone -b REL1_46 https://gerrit.wikimedia.org/r/mediawiki/extensions/SemanticCompoundQueries.git
git clone -b REL1_46 https://gerrit.wikimedia.org/r/mediawiki/extensions/Maps.git

Активация:

wfLoadExtension( 'SemanticMediaWiki' );
wfLoadExtension( 'SemanticResultFormats' );
wfLoadExtension( 'SemanticCompoundQueries' );
wfLoadExtension( 'Maps' );

// Настройка хранилища
$smwgDefaultStore = 'SMWSQLStore3';
$smwgSemanticsEnabled = true;

Обновление базы данных:

php maintenance/run.php update

SMW требует дополнительных PHP-расширений: intl, mbstring, curl. Убедитесь, что они установлены:

php -m | grep -E 'intl|mbstring|curl'

VisualEditor (визуальный редактор)

VisualEditor требует дополнительного сервиса Parsoid (или плагина Parsoid для MediaWiki 1.43+). Начиная с MediaWiki 1.43, Parsoid встроен в ядро, что значительно упрощает установку.

Установка для MediaWiki 1.46:

cd /var/www/mediawiki/extensions
git clone -b REL1_46 https://gerrit.wikimedia.org/r/mediawiki/extensions/VisualEditor.git

Активация:

wfLoadExtension( 'VisualEditor' );

// Включение визуального редактирования для всех пользователей
$wgDefaultUserOptions['visualeditor-enable'] = 1;

// Ограничение визуального редактора определёнными пространствами имён
$wgVisualEditorNamespaces = array_merge(
    $wgContentNamespaces,
    [ NS_USER, NS_CATEGORY ]
);

Translate (система перевода страниц)

Расширение Translate превращает MediaWiki в полноценную платформу для локализации.

Установка:

cd /var/www/mediawiki/extensions
git clone -b REL1_46 https://gerrit.wikimedia.org/r/mediawiki/extensions/Translate.git

Активация:

wfLoadExtension( 'Translate' );

$wgTranslateLanguages = [
    'en' => 'English',
    'ru' => 'Русский',
    'de' => 'Deutsch',
    'fr' => 'Français',
];

// Разрешить перевод страниц в основном пространстве имён
$wgTranslateTranslationDefaultns = 'page';
$wgGroupPermissions['user']['translate'] = true;
$wgGroupPermissions['user']['translate-review'] = true;

Translate требует php-mbstring и php-intl.

Установка скинов (skins)

Скины — это те же расширения с типом skin. Они устанавливаются и активируются аналогично. Скины находятся в каталоге skins/, а не extensions/.

Установка скина Vector (современный стандартный скин MediaWiki):

cd /var/www/mediawiki/skins
git clone -b REL1_46 https://gerrit.wikimedia.org/r/mediawiki/skins/Vector.git

Установка скина MonoBook (классический скин Википедии):

cd /var/www/mediawiki/skins
git clone -b REL1_46 https://gerrit.wikimedia.org/r/mediawiki/skins/MonoBook.git

Активация скина в LocalSettings.php:

wfLoadSkin( 'Vector' );
wfLoadSkin( 'MonoBook' );

// Установка скина по умолчанию
$wgDefaultSkin = 'vector-2022';

Обратите внимание на функцию wfLoadSkin() вместо wfLoadExtension(). В остальном процесс идентичен: та же система REL-веток, те же методы установки (Git, Composer, ручной), те же правила обновления.

Популярные скины для MediaWiki 1.46:

git clone -b REL1_46 https://gerrit.wikimedia.org/r/mediawiki/skins/Vector.git
git clone -b REL1_46 https://gerrit.wikimedia.org/r/mediawiki/skins/MonoBook.git
git clone -b REL1_46 https://gerrit.wikimedia.org/r/mediawiki/skins/Timeless.git
git clone -b REL1_46 https://gerrit.wikimedia.org/r/mediawiki/skins/MinervaNeue.git
git clone -b REL1_46 https://gerrit.wikimedia.org/r/mediawiki/skins/Modern.git

Типичные ошибки и их решение

Ошибка Причина Решение
ExtensionDependencyError Используется расширение, несовместимое с версией MediaWiki Скачать ветку REL1_XX, соответствующую вашей версии MediaWiki
Class '...' not found Не установлена необходимая зависимость (расширение или PHP-библиотека) Установить требуемое расширение или выполнить composer install
Call to undefined method Несовместимые версии ядра и расширения (метод был удалён или переименован) Использовать соответствующую ветку Git
Database schema outdated Не выполнен скрипт обновления БД после установки/обновления расширения Запустить php maintenance/run.php update
ParseError: syntax error, unexpected token Версия PHP ниже минимально требуемой (например, PHP 7.4 вместо 8.1) Обновить PHP до версии, указанной в requirements расширения
Warning: require_once(...): failed to open stream Неправильный путь к расширению или файл .php отсутствует Проверить, что каталог расширения находится в extensions/ и назван правильно
MWException: Extension registration failed Конфликт имён расширений или неверный extension.json Проверить наличие дублирующихся расширений и целостность extension.json
HTTP 500 Internal Server Error Критическая ошибка PHP в коде расширения Включить отладку: $wgShowExceptionDetails = true; в LocalSettings.php
Special page not found Служебная страница расширения не зарегистрирована Проверить extension.json на наличие секции SpecialPages
The page title contains invalid characters Конфликт тегов парсера или неправильная регистрация Проверить, что теги XML не пересекаются с уже установленными расширениями

Часто задаваемые вопросы (FAQ)

Вопрос: Можно ли использовать расширение из ветки master? Короткий ответ: не рекомендуется. Ветка master — это нестабильная ветка разработки. Исключение — расширения, следующий политике совместимости master, которые сознательно поддерживают обратную совместимость.

Вопрос: Что делать, если расширение не имеет ветки для моей версии MediaWiki? Проверьте страницу расширения на mediawiki.org. Если расширение устарело или не поддерживает вашу версию, рассмотрите альтернативы. Можно попробовать установить master или предыдущую REL-ветку, но без гарантий совместимости.

Вопрос: Как часто нужно обновлять расширения? Рекомендуется проверять обновления не реже одного раза в месяц. Для безопасности — следить за объявлениями о уязвимостях на MediaWiki.org. Перед обновлением всегда делайте резервную копию.

Вопрос: Что такое LTS и почему это важно? LTS (Long Term Support) — версии MediaWiki с трёхлетним сроком поддержки. На июль 2026 года актуальной LTS является 1.43 (поддержка до 2028). LTS-версии получают обновления безопасности дольше, чем обычные. Для крупных проектов рекомендуется использовать LTS.

Вопрос: Как откатить расширение, если после его установки сайт перестал работать?

  1. Удалите строку wfLoadExtension() из LocalSettings.php.
  2. Удалите каталог расширения из extensions/.
  3. Если расширение изменяло БД, выполните миграцию вручную или восстановите из резервной копии.

Вопрос: Могу ли я установить расширение без доступа к SSH? Да. Скачайте архив расширения (tarball) через браузер, загрузите через FTP/SFTP в каталог extensions/ и добавьте wfLoadExtension() в LocalSettings.php. Однако обновление будет сложнее — придётся повторять процесс вручную.

Вопрос: Почему расширение не отображается в Special:Version? Самая частая причина — неправильное имя расширения в wfLoadExtension(). Имя должно точно соответствовать названию каталога в extensions/. Другая причина — отсутствие файла extension.json.

Вопрос: Что такое ExtDist? [[9]] — это сервис, который автоматически собирает архивы расширений из указанных Git-веток. Удобен для ручной установки, когда нет доступа к Git. Вы получаете zip/tar.gz архив, готовый к распаковке.

Вопрос: Все ли расширения бесплатны? Медиавики — это проект с открытым исходным кодом. Подавляющее большинство расширений распространяются под лицензиями GPL-2.0+, MIT, BSD и другими свободными лицензиями. Однако некоторые расширения могут быть проприетарными.

Совместимость с PHP

Версия PHP — один из важнейших факторов при установке расширений. MediaWiki 1.46 требует PHP 8.3.0–8.5.x. Старые версии (1.43 LTS) поддерживают PHP 8.1–8.4.

MediaWiki Минимальная версия PHP Максимальная версия PHP
1.39 LTS 7.4.3 8.2.x
1.43 LTS 8.1.0 8.4.x
1.44 8.1.0 8.4.x
1.45 8.2.0 8.5.x
1.46 8.3.0 8.5.x

Проверка версии PHP:

php -v
php -m | grep -i -E 'intl|mbstring|curl|xml|gd|mysql|pgsql|sqlite'

Расширения могут требовать дополнительные модули PHP. Наиболее часто требуемые: intl (интернационализация), mbstring (многобайтовые строки), curl (HTTP-запросы), gd (обработка изображений), xml (XML-парсер), fileinfo (определение MIME-типов). Отсутствие этих модулей — одна из самых частых причин ошибки Class not found после установки расширения.

Безопасность при установке расширений

Установка расширений из непроверенных источников может представлять угрозу безопасности. Соблюдайте следующие правила:

  • Устанавливайте расширения только из официальных источников: Gerrit Wikimedia, mediawiki.org, Packagist.
  • Проверяйте лицензию перед установкой. Избегайте расширений с неизвестной лицензией.
  • Регулярно обновляйте расширения — старые версии могут содержать известные уязвимости.
  • Минимизируйте количество расширений: каждое расширение увеличивает поверхность атаки. Не устанавливайте то, что не нужно.
  • Используйте staging-окружение: перед установкой на рабочий сайт протестируйте расширение на копии вики.
  • Следите за рекомендациями PHP: используйте поддерживаемую версию PHP. На июль 2026 — это PHP 8.3–8.5 для MediaWiki 1.46.

Производительность и расширения

Расширения могут значительно влиять на производительность MediaWiki. Учитывайте следующие факторы:

  • Сложные парсер-хуки: расширения типа Semantic MediaWiki и ParserFunctions обрабатываются при каждом рендеринге страницы. Чем больше таких расширений, тем дольше время генерации страницы.
  • Дополнительные запросы к БД: расширения, добавляющие новые таблицы и интенсивно использующие их, могут замедлять работу.
  • JavaScript и CSS: расширения, добавляющие скрипты и стили, увеличивают время загрузки страницы в браузере пользователя. Используйте ResourceLoader для оптимизации.
  • Кэширование: настройте кэширование MediaWiki (Redis, Memcached) для смягчения нагрузки от расширений.

Для мониторинга производительности используйте расширение [[10]] или внешние инструменты (New Relic, Blackfire.io).

Расширения для разработчиков

Если вы разрабатываете собственные расширения, вот несколько рекомендаций:

  1. Используйте extension.json для регистрации (manifest_version 2).
  2. Следуйте [кодирования MediaWiki].
  3. Тестируйте расширение с несколькими версиями MediaWiki, если планируете политику master.
  4. Создавайте REL-ветки при выходе новых стабильных версий, если следуете политике rel.
  5. Публикуйте расширение в Gerrit и на mediawiki.org для широкой аудитории.

Создание extension.json:

{
  "name": "MyExtension",
  "version": "1.0.0",
  "author": "Your Name",
  "url": "https://example.org/myextension",
  "license-name": "GPL-2.0-or-later",
  "type": "other",
  "requires": {
    "MediaWiki": ">= 1.43.0",
    "platform": {
      "php": ">= 8.1.0"
    }
  },
  "AutoloadClasses": {
    "MyExtensionHooks": "includes/MyExtensionHooks.php"
  },
  "Hooks": {
    "BeforePageDisplay": "MyExtensionHooks::onBeforePageDisplay"
  },
  "config": {
    "MyExtensionSetting": {
      "value": "default_value",
      "description": "Description of the setting"
    }
  },
  "manifest_version": 2
}

Заключение

Установка расширений MediaWiki — задача, с которой сталкивается каждый администратор вики-сайта. Ключевой принцип, который нужно усвоить: версия расширения должна соответствовать версии MediaWiki. Это простое правило избавляет от большинства проблем.

Мы подробно рассмотрели:

  • Как определить версию MediaWiki (Special:Version, командная строка, API).
  • Систему ветвления REL1_XX (полная таблица соответствий).
  • Три политики совместимости расширений: master, rel, ltsrel.
  • Три метода установки: Git, Composer, ручной.
  • Активацию расширений через wfLoadExtension.
  • Обновление базы данных и расширений.
  • Процесс миграции на новую версию MediaWiki.
  • Типичные ошибки и их решение.
  • Вопросы безопасности и производительности.

Дополнительные ресурсы для администраторов: Администраторам крупных вики-проектов рекомендуется также изучить:

  • [for developers] — рекомендации по безопасной разработке расширений;
  • [guidelines] — оптимизация производительности расширений;
  • [Manager] — экспериментальное расширение для управления расширениями через веб-интерфейс;
  • [farming] — управление расширениями на вики-фермах.

Распространённые сценарии использования расширений:

  • Корпоративные вики: Semantic MediaWiki + Semantic Result Formats + LDAP Authentication + PDF Export.
  • Образовательные проекты: Math + Score (нотная запись) + Quiz + Education Program.
  • Вики-сообщества: VisualEditor + Thanks + Echo (уведомления) + Flow (обсуждения) + SocialProfile.
  • Многоязычные сайты: Translate + UniversalLanguageSelector + cldr + CleanChanges.

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

Следуя этим рекомендациям, вы сможете поддерживать стабильную, безопасную и функциональную вики на MediaWiki независимо от её размера и сложности.

Резюме

Данная статья представляет собой исчерпывающее руководство по установке расширений MediaWiki с учётом обязательного соответствия версий. Рассмотрены следующие ключевые аспекты:

  • Версионная совместимость: почему использование неподходящей ветки REL1_XX ведёт к ошибкам, и как этого избежать.
  • Определение версии: пять способов узнать текущую версию MediaWiki на сервере.
  • Система REL1_XX: полная таблица соответствия всех актуальных версий MediaWiki и веток Git.
  • Политики совместимости: подробное описание master, rel и ltsrel с примерами расширений.
  • Установка через Git: команды для клонирования популярных расширений под различные версии (1.39, 1.43, 1.45, 1.46).
  • Установка через Composer: настройка composer.local.json, установка расширений с зависимостями.
  • Ручная установка: использование ExtDist и tarball-архивов.
  • Активация: wfLoadExtension и устаревший require_once с примерами конфигурации.
  • Обновление БД: php maintenance/run.php update — когда и зачем.
  • Обновление расширений: регулярное обслуживание и миграция между версиями.
  • Ошибки: таблица типичных проблем с причинами и решениями.
  • FAQ: ответы на 11 наиболее частых вопросов администраторов.
  • Безопасность: рекомендации по защите сайта при установке расширений.
  • Производительность: влияние расширений на скорость работы и методы оптимизации.

Материал ориентирован на системных администраторов, веб-разработчиков и владельцев вики-сайтов любого уровня — от небольших частных проектов до крупных корпоративных вики и вики-ферм.

×
Реклама
ИКС