Міграція сайту з Drupal 7 на Drupal 10/11

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.
Розробка та обслуговування будь-яких видів сайтів:
Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Міграція сайту з Drupal 7 на Drupal 10/11
Складна
від 2 тижнів до 3 місяців
Часті питання
Наші компетенції:
Етапи розробки
Останні роботи
  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Міграція сайту з 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 місяців