Drupal 7 больше не получает обновлений безопасности. Сайт под угрозой атак, а прямого пути к Drupal 10 нет — только полноценная миграция. Мы провели 20+ таких проектов: от 50 до 200 000 нод. Наш опыт позволяет обойти типичные ловушки и уложиться в минимальный downtime.
Migrate API ускоряет перенос контента в 3–5 раз по сравнению с ручной выгрузкой. Но миграция — это не только контент: кастомные модули и темы приходится переписывать полностью. Drupal 7 — процедурный и без Composer, Drupal 10 — OOP на Symfony с YAML-роутингом. Разница архитектур неизбежно приводит к полному рефакторингу кода.
Миграция с Drupal 7 на Drupal 10: пошаговая инструкция
Архитектурные различия: почему это не апгрейд
Drupal 7 и Drupal 10 — архитектурно разные системы. D7 не использует Composer, OOP, Symfony компоненты. Контент мигрируется через Migrate API, код тем и модулей переписывается полностью. Это полноценный рефакторинг, а не обновление. Например, hook_menu в D7 превращается в YAML-маршруты, а процедурные функции — в сервисы Dependency Injection.
Стратегии миграции: как выбрать?
| Стратегия | Описание | Downtime | Когда подходит |
|---|---|---|---|
| Migrate API | Программная миграция контента из D7 БД в D10. Многократный запуск до переключения. | Минуты | Большинство проектов |
| Manual content migration | Экспорт через Views, импорт через Migrate или вручную. | Часы | Сайты до 100 нод |
| Big bang | Полная остановка D7, настройка D10, миграция за один раз. | Дни | Простые сайты, когда downtime допустим |
Migrate API — рекомендуемый вариант. Он позволяет запускать миграции многократно, добавляя только изменившийся контент. Разница в трудозатратах между Migrate API и ручной миграцией составляет 3–5 раз в пользу автоматизации. Экономия бюджета при использовании Migrate API достигает 60-80%.
Как работает Migrate API под капотом?
Migrate API использует плагины source, process, destination для каждой сущности. Source читает данные из D7 БД, process преобразует поля, destination сохраняет в D10. Это позволяет переиспользовать плагины и легко настраивать маппинг.Как перенести кастомные модули?
Кастомные модули Drupal 7 нужно полностью переписывать под архитектуру Drupal 10. Например, hook_menu заменяется на YAML-файл mymodule.routing.yml, а процедурные функции — на классы с аннотациями. Сложность переписывания зависит от размера модуля. Часто требуется рефакторинг всей бизнес-логики. Закажите аудит вашего сайта, чтобы оценить трудоёмкость.
Как мы проводим миграцию: пошагово
Сначала проводим полный аудит текущего сайта. Заходим на сервер D7 и собираем метрики: список активных модулей, типы нод, размер БД. Затем на новом сервере разворачиваем Drupal 10 и устанавливаем пакеты миграции.
composer create-project drupal/recommended-project drupal10-site cd drupal10-site composer require drupal/migrate_plus drupal/migrate_tools drupal/migrate_upgrade drupal/migrate_source_csv drush en migrate migrate_plus migrate_tools migrate_upgrade -y Подключаем базу D7 как дополнительную в settings.php:
$databases['migrate']['default'] = [ 'driver' => 'mysql', 'database' => 'drupal7_db', 'username' => 'db_user', 'password' => 'db_pass', 'host' => '127.0.0.1', 'port' => '3306', 'prefix' => '', ]; Команда drush migrate:upgrade генерирует YAML-конфигурации для пользователей, таксономии, типов контента, полей, нод, файлов, блоков и меню. Затем миграции запускаются в порядке зависимостей: сначала роли, потом типы контента, поля, таксономия, пользователи, файлы, ноды, меню и блоки.
drush migrate:import upgrade_d7_user_role drush migrate:import upgrade_d7_node_type drush migrate:import upgrade_d7_field drush migrate:import upgrade_d7_field_instance drush migrate:import upgrade_d7_taxonomy_vocabulary drush migrate:import upgrade_d7_taxonomy_term drush migrate:import upgrade_d7_user drush migrate:import upgrade_d7_file drush migrate:import upgrade_d7_node_complete drush migrate:import upgrade_d7_menu drush migrate:import upgrade_d7_block Проблемные зоны и их решения
- CCK/Field API: Field Collection в D7 не мигрируется напрямую — нужен модуль
migrate_field_collection. - Views: Views 3 (D7) переносятся частично. Сложные представления с relationships придется пересоздавать вручную.
- Медиафайлы: Файлы копируются через
file_copyплагин, источник указывается какsource_base_path.
Получите консультацию — мы оценим сложность вашего проекта и предложим оптимальный план.
Как минимизировать downtime?
Используем дельта-миграцию. За несколько дней до переключения запускаем первичную миграцию всего контента. В день переключения сначала включаем режим обслуживания на D7, затем запускаем инкрементальное обновление: drush migrate:import --all --update. После этого переключаем DNS на D10 и отключаем режим обслуживания. Весь downtime — 15-30 минут. Свяжитесь с нами для оценки вашего проекта.
Что входит в работу?
- Полный аудит текущего D7-сайта (модули, темы, контент, DB)
- Миграция контента через Migrate API с гарантией целостности
- Переписка кастомных модулей и тем на OOP/Symfony
- Настройка SEO-модулей (metatag, redirect, pathauto)
- Тестовая миграция и приемочное тестирование
- Документация по новой архитектуре, доступы к серверу и админке
- Пост-миграционная поддержка на 2 недели
Закажите аудит D7-сайта, чтобы получить точные сроки и стоимость.
Сроки и стоимость
| Тип сайта | Срок |
|---|---|
| Простой (< 100 нод, стандартные типы) | 2-3 недели |
| Средний (500-5000 нод, кастомные модули) | 4-8 недель |
| Крупный (50k+ нод, сложные зависимости) | 3-6 месяцев |
Стоимость рассчитывается индивидуально после аудита. Свяжитесь с нами, чтобы обсудить детали.







