Миграция и обновление CMS

Миграция форума с phpBB 3.0.8 на 3.3.17 с сохранением дизайна и функционала

Обновление и модернизация форума Mulke.net: миграция с phpBB 3.0.8 на 3.3.17, сохранение базы, привычного интерфейса и ключевых функций, адаптация под современный PHP и снижение нагрузки на хостинг.

mulke.net
Mulke.net — форум с многолетней историей, большой базой сообщений,
собственным оформлением и набором функций, которые были реализованы ещё на старой версии phpBB.Задача заключалась не просто в обновлении CMS, а в полноценной миграции legacy-проекта:
перевести форум с phpBB 3.0.8 на phpBB 3.3.17, сохранить данные,
привычный интерфейс и основные функции, адаптировать сайт к современному PHP
и одновременно решить проблемы с производительностью и высокой нагрузкой на хостинг.

Исходная ситуация

Форум много лет работал на phpBB 3.0.8. За это время стандартная система была значительно
изменена: использовался старый стиль на базе subsilver2, собственные MOD’ы,
система благодарностей и репутации, быстрый ответ, дополнительные элементы навигации,
портал и другие доработки.

Простое обновление phpBB в такой ситуации было невозможно. Большинство старых MOD’ов
несовместимы с phpBB 3.3, а современная архитектура движка значительно отличается от phpBB 3.0.

  • phpBB 3.0.8;
  • устаревший шаблон на базе subsilver2;
  • большое количество legacy-кода и MOD’ов;
  • многолетняя база пользователей, тем и сообщений;
  • система благодарностей и рейтинга;
  • кастомный быстрый ответ;
  • нестандартная навигация;
  • старые смайлики и элементы интерфейса;
  • необходимость работы на современной версии PHP;
  • высокая нагрузка от поисковых роботов и scraper-ботов.

Основная задача

Обновить техническую платформу форума, но при этом не превратить его в стандартный
phpBB с совершенно новым интерфейсом.

Необходимо было сохранить:

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

1. Создание тестовой площадки и обновление phpBB

Обновление сначала выполнялось на отдельном тестовом домене. Это позволило работать
с копией форума и не проводить рискованные эксперименты непосредственно на основном сайте.

На тестовой площадке были выполнены:

  • перенос файлов и базы данных;
  • обновление phpBB до версии 3.3.17;
  • проверка структуры базы;
  • проверка пользователей и авторизации;
  • проверка форумов, тем и сообщений;
  • проверка вложений;
  • проверка прав доступа;
  • адаптация старого функционала;
  • устранение ошибок совместимости с современным PHP.

Только после проверки тестовой версии обновлённый форум был перенесён на боевой домен
mulke.net.

2. Сохранение старого дизайна форума

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

Для этого был создан отдельный legacy-стиль и набор собственных расширений,
адаптирующих современный phpBB под старое оформление Mulke.net.

Восстанавливались и дорабатывались:

  • цветовая схема;
  • табличное представление форумов;
  • шапка сайта;
  • структура страниц;
  • кнопки управления сообщениями;
  • пагинация;
  • оформление профилей;
  • ширина и расположение колонок;
  • блоки тем и сообщений;
  • элементы старого интерфейса.

Отдельно было исправлено вертикальное выравнивание названий тем и колонок
«Ответов», «Просмотров» и «Последнее сообщение».

3. Восстановление быстрого ответа

Стандартный быстрый ответ phpBB существенно отличался от формы, которую пользователи
видели на старом форуме.

Поэтому форма была расширена и адаптирована.

В ней были восстановлены:

  • поле заголовка;
  • BBCode-панель;
  • жирный и курсивный текст;
  • Quote;
  • Code;
  • List;
  • Img;
  • URL;
  • выбор размера шрифта;
  • выбор цвета текста;
  • старые смайлики Mulke.net;
  • Emoji;
  • применение форматирования к выделенному тексту.

Для этого создавались отдельные шаблоны, CSS, JavaScript и собственные расширения phpBB.

4. Старые смайлики и Emoji

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

быстрый ответ

Был восстановлен старый набор смайликов Mulke.net и добавлена возможность работать
с современными Emoji.

В результате пользователи получили привычный набор смайликов внутри нового phpBB.

5. Благодарности, рейтинг и реакции

В старом форуме активно использовалась система благодарностей и репутации.
После перехода на новую версию phpBB эту механику необходимо было восстановить
с помощью современных расширений и дополнительных доработок.

Были реализованы и адаптированы:

  • благодарность за сообщение;
  • рейтинг сообщений;
  • репутация пользователей;
  • реакции;
  • визуальные индикаторы под сообщениями;
  • звёздочки и другие элементы старой системы оценок.

При этом была сохранена логика форума и привычное отображение оценок.

6. Переход к первому непрочитанному сообщению

Была изменена стандартная логика переходов по темам.

Теперь при клике на название темы:

  • если есть новые сообщения — открывается первое непрочитанное;
  • если все сообщения прочитаны — открывается последнее сообщение темы.

Причём эта логика была реализована не только в разделе непрочитанных сообщений,
а во всех основных списках тем.

7. Блок последних активных тем

Для главной страницы было разработано отдельное расширение
Mulke Recent Topics.

Блок показывает:

  • название темы;
  • автора;
  • дату;
  • раздел форума;
  • количество ответов;
  • просмотры;
  • автора и дату последнего сообщения;
  • страницы длинных тем.

Внешнее оформление блока было приведено к общему стилю форума.

Чтобы блок не создавал лишнюю нагрузку при каждом открытии главной страницы,
данные кэшируются.

8. Исправление проблем с кодировкой

При переносе старого форума возникали типичные для legacy-проектов проблемы
с кодировкой и обработкой старых данных.

Проводилась проверка:

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

В частности, была устранена проблема, при которой вместо текста в новых сообщениях
могли появляться символы ???.

9. Русский язык интерфейса

После обновления часть пользователей продолжала видеть английский интерфейс,
несмотря на изменение языка в административной панели.

Были проверены языковые пакеты, настройки пользователей и язык по умолчанию,
после чего русская локализация была восстановлена.

10. Исправление авторизации после переноса на mulke.net

После переноса готовой тестовой версии на боевой домен появилась ошибка:

«Ошибка отправки формы. Попробуйте ещё раз.»

Ошибка проявлялась при попытке авторизации.

В процессе диагностики проверялись:

  • cookies;
  • домен cookie;
  • SID;
  • PHP-сессии;
  • настройки phpBB;
  • кэш;
  • настройки домена;
  • формы авторизации.

После корректировки конфигурации работа авторизации была восстановлена.

11. Совместимость старых MOD’ов с PHP 8

Значительная часть старого кода форума создавалась для PHP 5 и ранних версий phpBB.

После перехода на современную платформу проявились ошибки:

  • статические вызовы нестатических методов;
  • устаревший CAPTCHA-код;
  • старые вызовы phpBB API;
  • несовместимый код портала;
  • старые UTF-функции;
  • устаревшие PHP-конструкции.

Проблемные компоненты постепенно адаптировались, заменялись либо изолировались
от основной системы.

12. Исправление Twig-шаблонов

Современный phpBB использует Twig, поэтому старый подход к шаблонам невозможно было
перенести напрямую.

Часть интерфейса была перенесена через механизм template events.

В процессе работы диагностировались ошибки вида:

Twig\Error\LoaderError:
Unable to find template
"@mulke_legacyui/event/overall_footer_breadcrumb_append.html"

Для устранения подобных ошибок создавались совместимые шаблоны,
корректировалась структура расширений и очищался Twig-кэш.

13. Анализ базы данных и медленных запросов

После запуска обновлённого форума отдельной задачей стала производительность.

Были проанализированы MySQL slow query log и основные таблицы phpBB.

Проверялись:

  • phpbb_sessions;
  • phpbb_topics;
  • операции обновления счётчиков;
  • создание гостевых сессий;
  • cron-задачи;
  • структура и движки таблиц;
  • возможность перевода старых таблиц на InnoDB.

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

14. Диагностика высокой нагрузки на хостинг

После обновления на хостинге Jino наблюдался высокий расход CPU.

нагрузка на хостинг

Для поиска причины анализировались:

  • access.log;
  • error.log;
  • slow query log;
  • PHP-процессы;
  • cron-задачи phpBB;
  • поисковые роботы;
  • scraper-боты;
  • динамические URL форума.

15. Обнаружение распределённого scraper-бота

В логах был обнаружен бот, который работал с большого количества IP-адресов
и массово обращался к динамическим страницам phpBB.

Характерный User-Agent:

Mozilla/5.0 (X11; Linux aarch64)
AppleWebKit/537.36
(KHTML, like Gecko)
Chrome/139.0.0.0 Safari/537.36

Бот активно открывал:

  • /viewtopic.php;
  • /posting.php?mode=quote;
  • /ucp.php;
  • страницы авторизации;
  • старые сообщения форума.

Блокировка отдельных IP не имела смысла, потому что адреса постоянно менялись.

Поэтому была реализована фильтрация по комбинации характеристик User-Agent
непосредственно через Apache .htaccess.

После установки правила запросы стали отсеиваться с кодом
403 Forbidden до запуска phpBB.

16. Защита от AI-ботов и технических crawler’ов

Дополнительно анализировалась активность различных поисковых и AI-роботов.

В том числе:

  • GPTBot;
  • ClaudeBot;
  • Claude-SearchBot;
  • DotBot;
  • GoogleOther;
  • Baiduspider;
  • 360Spider;
  • Bingbot;
  • YandexBot.

Нежелательные роботы были ограничены через .htaccess и
robots.txt.

17. Оптимизация robots.txt

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

Был закрыт обход служебных страниц:

  • /posting.php;
  • /search.php;
  • /ucp.php;
  • /memberlist.php;
  • /cron.php;
  • /mcp.php;
  • /report.php;
  • /go.php;
  • служебных разделов app.php;
  • системных каталогов phpBB.

Также закрывались типичные URL-дубли:

  • sid=;
  • view=print;
  • view=next;
  • view=previous;
  • hilit=.

При этом основные индексируемые страницы форума остались открыты:

  • /index.php;
  • /viewforum.php;
  • /viewtopic.php.

18. Оптимизация обхода Яндексом

Анализ access.log показал, что YandexBot иногда за несколько секунд загружал большое
количество динамических страниц форума.

Особенно активно обходились:

  • отдельные сообщения;
  • старые страницы больших тем;
  • view=next;
  • view=previous;
  • URL с параметрами поиска и подсветки.

Для Яндекса была создана отдельная секция robots.txt с ограничением технических URL
и более аккуратным режимом обхода.

При этом основной контент форума оставался доступным для индексации.

19. Кэширование статических файлов

Для снижения повторной нагрузки на сервер было настроено браузерное кэширование
статических ресурсов.

Кэшируются:

  • CSS;
  • JavaScript;
  • GIF;
  • PNG;
  • JPEG;
  • WebP;
  • SVG;
  • favicon;
  • WOFF и WOFF2.

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

20. Дополнительные доработки

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

  • выравнивание таблиц форумов;
  • изменение ширины колонок;
  • восстановление старых кнопок;
  • исправление пагинации;
  • доработка ссылок тем;
  • кнопка «Наверх»;
  • быстрые цитаты;
  • цитирование выделенного текста;
  • адаптация профилей пользователей;
  • восстановление элементов репутации;
  • доработка списка непрочитанных сообщений;
  • восстановление элементов старого форума;
  • сохранение памятного блока, посвящённого основателю форума.

Собственные расширения и технические инструменты

В процессе проекта было создано и доработано несколько собственных компонентов phpBB.

Среди них:

  • Mulke Legacy UI;
  • Mulke Recent Topics;
  • модули быстрого ответа;
  • модули старых смайликов и Emoji;
  • расширения для репутации и рейтинга;
  • быстрое цитирование;
  • навигация по непрочитанным сообщениям;
  • профилировщик нагрузки;
  • инструменты диагностики MySQL;
  • performance-hotfix’ы;
  • crawler-shield для защиты от ботов.

Результат проекта

В результате старый форум был перенесён с phpBB 3.0.8 на современную
phpBB 3.3.17.

При этом удалось сохранить:

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

Одновременно проект получил современную техническую основу, совместимую с актуальной
версией PHP и новой архитектурой phpBB.

Дополнительно была проведена оптимизация базы и серверной части,
настроено кэширование, выполнен анализ нагрузки и создана многоуровневая защита
от агрессивных crawler’ов и scraper-ботов.

Почему этот проект был сложнее обычного обновления CMS

В данном случае недостаточно было установить новую версию phpBB.

Фактически выполнялась реконструкция legacy-системы, где необходимо было одновременно:

  • сохранить многолетние данные;
  • перенести старую пользовательскую логику;
  • переписать несовместимые MOD’ы;
  • воспроизвести старый дизайн;
  • адаптировать код к современному PHP;
  • разработать собственные расширения;
  • исправить ошибки после миграции;
  • оптимизировать MySQL;
  • диагностировать серверную нагрузку;
  • защитить сайт от распределённого бот-трафика.

Поэтому проект объединил сразу несколько направлений:
backend-разработку, frontend, работу с MySQL, DevOps,
анализ логов, оптимизацию производительности и legacy-разработку.

Использованные технологии

CMS / форум phpBB 3.3.17
Исходная версия phpBB 3.0.8
Backend PHP
Шаблонизатор Twig
База данных MySQL / MariaDB
Frontend HTML, CSS, JavaScript
Web-сервер Apache, .htaccess
Хостинг Jino
Диагностика access.log, error.log, MySQL slow query log
SEO / Crawling robots.txt, crawler filtering, URL duplicate control

Итог

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

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

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

Нужно обновить старый сайт или форум?

Работаю с legacy-проектами, которые нельзя просто удалить и установить заново:
старые CMS, форумы, базы данных, нестандартные модули и многолетние пользовательские данные.

Могу провести аудит проекта, разработать безопасный план миграции,
перенести функционал и поэтапно обновить систему без потери важных данных.

Есть похожая задача?

Пришлите ссылку на сайт и опишите желаемый результат.

Обсудить в Telegram