Открыть сервис

MediaWiki

MediaWiki — это свободное программное обеспечение для создания вики-сайтов, написанное на языке PHP и использующее базу данных (обычно MySQL или MariaDB). Является наиболее известным и широко распространённым вики-движком в мире, в первую очередь благодаря тому, что на нём работает интернет-энциклопедия «Википедия» и другие проекты фонда «Викимедиа». MediaWiki распространяется на условиях GNU General Public License версии 2 или более поздней.

История

Разработка MediaWiki началась в 2001 году как ответ на потребности растущей «Википедии». Первоначально «Википедия» работала на движке UseModWiki, написанном на Perl. Однако по мере увеличения объёма контента и числа пользователей возникла необходимость в более функциональном, масштабируемом и специализированном решении.

Создание и первые версии

В 2001 году немецкий программист Магнус Манске начал разработку нового движка на PHP, который изначально назывался «Phase II». 25 января 2002 года новая версия движка была запущена на «Википедии». В июне 2002 года Ли Дэниел Крокер, сотрудник компании Bomis (которая на тот момент спонсировала «Википедию»), начал работу над «Phase III», который впоследствии и получил название MediaWiki. Название «MediaWiki» было придумано как игра слов: оно отсылает к слову «media» (средства массовой информации) и слову «wiki» (быстро, в контексте веб-технологий). Первый публичный релиз под названием MediaWiki (версия 1.1) состоялся 8 декабря 2003 года.

Развитие и ключевые вехи

С 2003 года разработка MediaWiki ведётся фондом «Викимедиа» (Wikimedia Foundationнекоммерческая организация, управляющая проектами «Википедия», «Викисклад», «Викисловарь» и другими). Основные этапы развития включают:

  • 2004 год: Введение пространств имён (Namespace), что позволило отделить служебные страницы (обсуждения, шаблоны) от основного контента.
  • 2005 год: Внедрение системы категоризации, которая стала основой для тематической навигации.
  • 2006 год: Появление расширения «ParserFunctions», значительно расширившего возможности шаблонов и условной логики.
  • 2008 год: Релиз версии 1.13 с поддержкой полнотекстового поиска на основе Lucene.
  • 2010 год: Внедрение патча для поддержки загрузки файлов по URL и улучшенной обработки SVG.
  • 2013 год: Начало перехода на визуальный редактор (VisualEditor), позволяющий редактировать страницы без знания вики-разметки.
  • 2014–2018 годы: Активная работа над производительностью, масштабируемостью и безопасностью. Внедрение системы кэширования (ObjectCache) и улучшенной поддержки memcached.
  • 2019–2024 годы: Переход на современные версии PHP и MySQL, улучшение поддержки мобильных устройств, внедрение Content Security Policy (CSP) для защиты от XSS-атак.

Архитектура и технические характеристики

MediaWiki написана на объектно-ориентированном PHP и следует архитектурному шаблону MVC (Model-View-Controller). Ключевые компоненты включают:

Ядро

Ядро (Core) содержит основные функции: обработку URL, авторизацию, работу с базой данных, парсинг вики-разметки, кэширование и интернационализацию. Оно реализовано в виде набора PHP-классов, организованных в подсистемы.

База данных

По умолчанию MediaWiki использует реляционную базу данных MySQL или MariaDB. Схема базы данных включает несколько десятков таблиц, основные из которых:

  • page — содержит информацию о страницах (заголовок, пространство имён, ID).
  • revision — хранит все версии страниц (текст, автор, дата, комментарий).
  • text — содержит сам текст ревизий (обычно в сжатом виде).
  • userинформация о зарегистрированных пользователях.
  • categorylinks — связи между страницами и категориями.
  • pagelinks — ссылки между страницами.

Расширения

Расширения (Extensions) — это дополнительный код, который может изменять или расширять функциональность ядра. Они делятся на три основных типа:

  • Хуки (Hooks): Позволяют перехватывать события в процессе работы движка (например, перед сохранением страницы, при отображении содержимого).
  • Специальные страницы (Special pages): Служебные страницы с особым функционалом (например, страница загрузки файлов, список последних изменений).
  • Теги (Tags): Новые элементы вики-разметки (например, <math> для математических формул, <syntaxhighlight> для подсветки кода).

Скин

Скины (Skins) определяют внешний вид сайта. Они представляют собой набор шаблонов (на основе PHP-шаблонизатора Mustache) и CSS-стилей. Наиболее популярные скины: Vector (по умолчанию в «Википедии»), MonoBook (исторический), Timeless (адаптивный).

Кэширование

Для повышения производительности MediaWiki поддерживает несколько уровней кэширования:

  • Кэш объектов (ObjectCache): Хранит результаты запросов к базе данных, данные пользовательских сессий и другие временные данные. Может использовать memcached, Redis или файловую систему.
  • Кэш страниц (PageCache): Сохраняет готовый HTML-код страниц для быстрой выдачи. Используется Varnish или Squid.
  • Кэш парсера (ParserCache): Хранит результат парсинга вики-разметки для каждой версии страницы.

Возможности

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

Вики-разметка

Основной способ редактирования — использование вики-разметки (wikitext). Она позволяет:

  • Форматировать текст (жирный, курсив, заголовки).
  • Создавать внутренние и внешние ссылки.
  • Вставлять изображения, таблицы, списки.
  • Использовать шаблоны для автоматического включения повторяющегося контента.
  • Применять магические слова (Magic words) для отображения даты, времени, имени страницы.

Управление версиями

Каждое изменение страницы сохраняется как отдельная ревизия. Система позволяет:

  • Просматривать историю изменений.
  • Сравнивать две любые версии (diff).
  • Откатывать изменения к любой предыдущей версии.
  • Отмечать изменения как «патрулированные» (для модерации).

Права доступа

MediaWiki поддерживает гибкую систему прав пользователей. Администраторы могут назначать права для различных групп (участники, автоподтверждённые, бюрократы, администраторы, стюарды). Права включают:

  • чтение/редактирование страниц.
  • загрузку файлов.
  • блокировку пользователей.
  • удаление и восстановление страниц.
  • защиту страниц от редактирования.

Интернационализация

MediaWiki полностью интернационализирована. Она поддерживает более 400 языков, включая языки с письмом справа налево (арабский, иврит) и CJK-языки (китайский, японский, корейский). Интерфейс может быть локализован на любой язык.

Поиск

Встроенная система поиска использует полнотекстовый индекс. В «Википедии» и других крупных проектах используется расширение CirrusSearch, основанное на Elasticsearch, которое обеспечивает быстрый и точный поиск с поддержкой синонимов, автодополнения и фильтрации по пространствам имён.

Применение

MediaWiki используется не только в проектах фонда «Викимедиа». На ней работают тысячи сайтов по всему миру, включая:

Корпоративные и внутренние вики

Многие компании и организации используют MediaWiki для создания внутренних баз знаний, документации и корпоративных порталов. Примеры: Intel, Novell, SAP, а также ряд государственных учреждений.

Образовательные проекты

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

Сообщества и фанатские проекты

Фанатские вики по играм, фильмам, книгам и другим темам часто работают на MediaWiki. Крупнейшие из них размещаются на платформе Fandom (ранее Wikia), которая также использует MediaWiki с собственными расширениями.

Научные и энциклопедические проекты

Помимо «Википедии», на MediaWiki работают такие проекты, как «Викитека», «Викисловарь», «Викицитатник», а также специализированные энциклопедии (например, «Энциклопедия математики»).

Расширения

Экосистема MediaWiki насчитывает тысячи расширений. Наиболее известные и важные:

  • ParserFunctions: Добавляет условные конструкции, циклы и математические операции в вики-разметку.
  • VisualEditor: Визуальный редактор, позволяющий редактировать страницы без знания разметки.
  • Cite: Реализует механизм сносок и примечаний.
  • Math: Отображает математические формулы с использованием LaTeX.
  • SyntaxHighlight: Подсветка синтаксиса для кода на различных языках программирования.
  • CirrusSearch: Улучшенный поиск на основе Elasticsearch.
  • AntiSpoof: Блокирует регистрацию пользователей с похожими именами (например, «l» и «1»).
  • ConfirmEdit: Капча для защиты от спама.

Критика и ограничения

Несмотря на широкую популярность, MediaWiki имеет ряд критических замечаний:

  • Сложность установки и настройки: Для установки требуется знание PHP, MySQL и веб-сервера. Конфигурация через файл LocalSettings.php может быть сложной для новичков.
  • Высокие требования к ресурсам: Для крупных проектов (с миллионами страниц) требуется значительная серверная мощность, особенно для кэширования и поиска.
  • Устаревшая архитектура: Некоторые критики отмечают, что архитектура MediaWiki, разработанная в начале 2000-х, не соответствует современным стандартам (например, отсутствие полноценного REST API в ядре, сложность тестирования).
  • Сложность расширений: Разработка собственных расширений требует глубокого понимания внутреннего устройства движка и PHP.
  • Проблемы с безопасностью: Хотя ядро MediaWiki регулярно обновляется, сторонние расширения могут содержать уязвимости. Известны случаи XSS-атак через устаревшие расширения.

Интересные факты

  • Название «MediaWiki» является игрой слов: «media» (средства массовой информации) и «wiki» (быстро). Оно не имеет отношения к мультимедиа.
  • Самая большая вики на MediaWiki — английская «Википедия», содержащая более 6,8 миллиона статей (на 2024 год).
  • MediaWiki используется не только для текстовых проектов. На ней работают такие проекты, как «Викисклад» (хранилище медиафайлов) и «Викиданные» (структурированная база знаний).
  • В 2015 году фонд «Викимедиа» начал разработку альтернативного движка — «WikiLambda», который предназначен для выполнения кода и создания функций, но он не заменяет MediaWiki.

Источники

  • Документация MediaWiki (mediawiki.org)
  • Официальный сайт MediaWiki (mediawiki.org)
  • Книга «MediaWiki: A User's Guide» (Daniel J. Barrett)
  • Статья «MediaWiki» в английской Википедии
  • Исходный код MediaWiki на GitHub

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →