Міграція сайту з Drupal 7 на Drupal 10/11
Drupal 7 досягла EOL у січні 2025. Прямого upgrade шляху немає — це повноцінна міграція. Drupal 7 та Drupal 10 — архітектурно різні системи: D7 не використовує Composer, OOP, Symfony компоненти. Контент мігрується через Migrate API, код переписується.
Стратегії міграції
Migrate API (рекомендується) — контент мігрується програмно з D7 БД в D10. Налаштовані міграції можна запускати повторно до дня переключення, мінімізуючи downtime.
Ручна міграція контенту — для невеликих сайтів (< 100 нод) експорт через Views + імпорт через Migrate або ручне копіювання. Швидше налаштування, довше виконання.
Big bang — повна зупинка D7, налаштування D10, міграція. Downtime від кількох годин до днів.
Аналіз D7 сайту
# Список активних модулів D7
drush pm-list --status=enabled --type=module
# Типи нод та кількість
drush sql-query "SELECT type, COUNT(*) FROM node GROUP BY type"
# Розмір БД
drush sql-query "SELECT table_name, ROUND(((data_length + index_length) / 1024 / 1024), 2) AS 'MB' FROM information_schema.TABLES WHERE table_schema = DATABASE() ORDER BY (data_length + index_length) DESC"
# Кастомні модулі
ls sites/all/modules/custom/
Налаштування D10 сайту з Migrate API
На новому D10-сервері:
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' => '',
];
Генерація міграцій
# Автоматично сгенерувати конфігурації міграцій з D7
drush migrate:upgrade --legacy-db-key=migrate --legacy-root=/path/to/d7/files
# Посмотреть что сгенерировалось
drush migrate:status
Migrate Upgrade створює YAML-конфігурації для: користувачів, ролей, словників таксономії, термінів, типів контенту, полів, нод, медіафайлів, блоків, меню.
Порядок запуску міграцій
Залежності важливі — не можна мігрувати ноди раніше, ніж словники таксономії та файли:
# 1. Конфігурація (ролі, типи контенту, поля)
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
# 2. Словники таксономії
drush migrate:import upgrade_d7_taxonomy_vocabulary
drush migrate:import upgrade_d7_taxonomy_term
# 3. Користувачі
drush migrate:import upgrade_d7_user
# 4. Файли
drush migrate:import upgrade_d7_file
# 5. Контент (ноди)
drush migrate:import upgrade_d7_node_complete
# 6. Меню та блоки
drush migrate:import upgrade_d7_menu
drush migrate:import upgrade_d7_block
Проблемні зони
CCK/Field API — поля в D7 CCK мігрують добре. Field Collection (аналог Paragraphs в D7) — немає прямої підтримки, потрібен кастомний migrate.
composer require drupal/migrate_field_collection
Вьюхи — Views 3 (D7) мігрують частково. Складні вьюхи з relationships потрібно пересоздавати.
Кастомні модулі D7 — потрібна повна переробка: D7 використовує процедурний код, hook_schema, hook_menu. D10 — класи, анотації, маршрути через YAML.
Медіафайли — міграція файлів з D7 файлової системи:
# Конфігурація для копіювання файлів
source:
plugin: d7_file
source_base_path: 'https://old-d7-site.com' # або локальний шлях
process:
uri:
plugin: file_copy
source:
- '@source_path'
- 'public://'
Переписка кастомних модулів
// D7 (процедурний)
function mymodule_menu() {
return [
'admin/config/mymodule' => [
'title' => 'My Module Settings',
'page callback' => 'drupal_get_form',
'page arguments' => ['mymodule_settings_form'],
],
];
}
// D10 (OOP + YAML маршрути)
// mymodule.routing.yml:
// mymodule.settings:
// path: '/admin/config/mymodule'
// defaults:
// _form: '\Drupal\mymodule\Form\SettingsForm'
Delta-міграція: мінімізація downtime
# Первинна міграція (кілька годин/днів до переключення)
drush migrate:import --all
# У день переключення:
# 1. Включити режим обслуговування на D7
# 2. Обновити змінений контент
drush migrate:import --all --update
# 3. Переключити DNS на D10
# 4. Вимкнути режим обслуговування на D10
Строк виконання
| Тип сайту | Строк |
|---|---|
| Простий (< 100 нод, стандартні типи) | 2–3 тижні |
| Середній (500–5000 нод, кастомні модулі) | 4–8 тижнів |
| Крупний (50k+ нод, складні залежності) | 3–6 місяців |







