// Engineering Log
Как я похоронил Drupal и не потерял пятнадцать лет истории небольшого города
Опубликовано 07.07.2026
// Быстрый маршрут
Эта статья относится к теме Серверы и инфраструктура.
Есть у меня один проект, к которому я отношусь особенно трепетно. Пятнадцать лет назад я сделал новостной портал для небольшого города — обычный региональный сайт, который несколько лет исправно работал, публиковал новости и потихоньку обрастал контентом. Потом проект как медиа закрылся: команда разошлась, новости перестали выходить, а сайт остался висеть в интернете немым свидетелем того времени.
Ценность его давно не в новостях — кому интересна заметка о ремонте теплотрассы десятилетней давности. Ценность в другом: это слепок целого периода жизни города, зафиксированный так, как его больше никто не зафиксирует. А современный интернет вообще не умеет хранить память — сайты закрываются, домены не продлеваются, и целые пласты локальной истории просто исчезают без следа. Бросать такое рука не поднималась.
Когда старый движок начинает мстить
Беда в том, что время безжалостно к техническому долгу. Движок сайта — Drupal шестой ветки — не обновлялся уже много лет, потому что обновляться там особо некуда: ветка мертва, сообщество давно ушло вперёд. А сайт при этом оставался довольно объёмным и старым, а значит — лакомым куском для поисковых ботов, скрейперов и прочей автоматической живности, которая обожает именно такие архивные ресурсы с богатой историей ссылок.
И вот тут начинался замкнутый круг. Боты долбили сайт нон-стоп, база кеша разбухала до неприличных размеров, таблица сессий переполнялась, сервер время от времени ложился под нагрузкой — и я в очередной раз шёл чинить то, что сломалось само по себе, без единого моего действия. Логика подсказывала простой вывод: содержать это дальше в прежнем виде — дорого, бессмысленно и с каждым годом только хуже. Но и просто бросить сайт умирать тоже не хотелось.
Почему очевидные решения не подходили
Раз обновлений не предвидится, значит, движок вообще не нужен — нужна статика. Логично. Но как её получить — вопрос не такой тривиальный, как кажется.
Самый простой путь — выкачать сайт целиком как есть, страница за страницей. Быстро, но криво: на старом Drupal обязательно накопилась гора дублей — одни и те же материалы доступны по нескольким адресам, с разными параметрами, через таксономии и без. При таком подходе поиск по сайту просто перестанет работать, а любая мелкая правка в будущем — если вдруг понадобится — с высокой вероятностью что-нибудь сломает, потому что структура окажется непрозрачной кашей из сграбленного HTML.
Второй вариант — перенести контент на новый движок целиком, с базой, с таксономиями, с нормальной моделью данных. Звучит правильно, но по трудозатратам это отдельный полноценный проект, а не вечер работы. И главное — риск потерять самое ценное: структуру ссылок. На такой архив годами вели ссылки из соцсетей, форумов, других сайтов и даже поисковой выдачи. Сломать урлы — значит обнулить именно ту память, ради которой всё затевалось.
Решение нашлось на стыке анализа и автоматизации
В итоге я поручил Claude Code разобрать сайт по частям: проанализировать шаблоны отображения, структуру базы данных и логику формирования адресов, а затем перевести всё это на Hugo — лёгкий статический генератор без сервера, базы и php под капотом.
Работа заняла несколько часов в полуавтоматическом режиме: модель разбирала дамп базы, вытаскивала материалы, восстанавливала связи между сущностями, генерировала шаблоны, максимально близкие к оригинальным, и раскладывала всё в структуру, которая один в один повторяет старые адреса. После первого прохода прошлось несколько итераций правок — то там верстка поехала, то здесь таксономия отобразилась не так, как надо, — но это уже было похоже на обычную вычитку, а не на разработку с нуля.
Что получилось на выходе
Результат превзошёл ожидания. Вместо тяжёлой связки MySQL и древнего php-кода — лёгкий и быстрый сайт, внешне почти неотличимый от старого. Нагрузка на сервер по памяти и процессору упала на порядки - быстрый nigix отдаёт статику и всё. Объём данных сократился на порядок: вместо гигабайтов малопонятного кеша Drupal в базе теперь просто набор лёгких html-файлов, которые можно скопировать на флешку и хранить хоть двадцать лет — им для жизни не нужен ни один живой процесс.
Мораль тут довольно простая. Иногда несколько часов работы стоит потратить именно для того, чтобы сэкономить ресурсы на годы вперёд и не потерять то, что действительно хочется сохранить. И это ровно тот случай, когда AI не заменяет инженерное мышление, а снимает с него рутину: думать над архитектурой переноса и сохранением ссылочной структуры всё равно пришлось человеку, а вот механическую часть — разбор дампа, генерацию шаблонов, раскладку файлов — можно было смело отдать модели и заняться вычиткой результата, а не написанием кода построчно.
// Похожая задача
Если у вас похожая ситуация
Эта статья относится к одной из рабочих тем. Можно продолжить чтение по теме, перейти на главную, чтобы понять, чем я занимаюсь, или сразу открыть услуги.
Тема статьи
Серверы и инфраструктура
VPS, Linux, веб-стек, миграции, хостинг, базы данных и базовая эксплуатация.
Часто с этим приходят
- Перенести сайт или сервис на новый сервер
- Настроить Linux, Nginx, базу данных и бэкапы
- Разобраться, почему всё работает нестабильно
// Следующий шаг
Если вам нужна не только статья, а помощь по этой теме, удобнее сразу перейти в услугу. Главная и подборка материалов остаются рядом.
Открыть услуги// Contact
Нужна помощь?
Свяжись со мной и я помогу решить проблему
Написать в TelegramОтвечаю в течение рабочего дня (03:00–13:00 GMT)
Или оставьте заявку здесь: