Миграция сайта с 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.

Manual content migration — для небольших сайтов (< 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 месяцев