Настройка модуля Migrate для миграции контента в Drupal

Представьте: вы переносите интернет-магазин с 80 000 товаров, историей заказов и пользовательскими профилями из старого Drupal 7 на Drupal 10. Категории перестроены, изображения хранятся по нестандартным путям, а в comments — 300 000 записей с вложенными ответами глубиной до 10 уровней. Вручную тако

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
Настройка модуля Migrate для миграции контента в Drupal
Сложный
~3-5 дней

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1414
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1285
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    980
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1240
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    982
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    994

Представьте: вы переносите интернет-магазин с 80 000 товаров, историей заказов и пользовательскими профилями из старого Drupal 7 на Drupal 10. Категории перестроены, изображения хранятся по нестандартным путям, а в comments — 300 000 записей с вложенными ответами глубиной до 10 уровней. Вручную такой объём займёт месяцы, а ошибки неизбежны. Мы используем встроенный ETL-фреймворк Drupal — модуль Migrate, который извлекает, трансформирует и загружает данные. За пять лет мы провели 50+ миграций, гарантируя целостность данных и полное соответствие новой структуре. При грамотной настройке Migrate обрабатывает 10 000 записей за 15–20 минут. Свяжитесь с нами — проведём аудит вашего проекта и предложим оптимальный план миграции.

Архитектура Migrate

Модуль состоит из трёх логических компонентов, которые настраиваются через YAML-конфиги:

  • Source — источник данных: CSV, SQL, JSON, старый Drupal 7, WordPress, любые API.
  • Process — трансформация: маппинг полей, конвертация форматов, обогащение через плагины.
  • Destination — куда записываем: Node, Term, User, File, Config.

Каждая миграция описывается в файле config/install/migrate_plus.migration.*.yml. Мы используем Migrate Plus, Migrate Tools и дополнительные source-плагины. Все миграции наследуют базовый класс Migration.

Критерий Migrate Ручной перенос
Скорость Часы для 10 000 записей Дни или недели
Трансформации Встроенные плагины Вручную скрипты
Ошибки Логирование, continue-on-failure Нет контроля
Повторное использование YAML конфиги Каждый раз заново

Migrate обычно в 10 раз быстрее ручного переноса при сравнении времени разработки и выполнения.

Как настроить миграцию в Drupal?

Процесс включает шесть шагов:

  1. Анализ исходных данных: структура, типы, связи, объём. Например, определяем, что категории хранятся в отдельной таблице, а изображения — по внешним URL.
  2. Проектирование миграций: маппинг полей, выбор source-плагинов, определение зависимостей (например, сначала миграция категорий, потом статей).
  3. Реализация: написание YAML, кастомных плагинов, тестирование на выборке из 10–20 записей.
  4. Тестирование: проверка целостности, регрессия, исправление ошибок — запускаем на полной копии.
  5. Запуск: поэтапный импорт с мониторингом, откат при необходимости.
  6. Поддержка: доработка под новые источники, обновление после релизов Drupal.

Какие источники данных поддерживаются?

Модуль Migrate из коробки поддерживает CSV, JSON, XML, SQL-базы через PDO, а также старые версии Drupal (6, 7). Для WordPress есть готовый source-плагин, для произвольных API — кастомные плагины. Таблица ниже показывает популярные варианты:

Источник Плагин Пример использования
CSV csv Импорт из экспорта Excel
JSON json REST API стороннего сервиса
WordPress wordpress Перенос блога из WP
Drupal 7 d7_node Обновление до Drupal 10
Произвольный API кастомный source Интеграция с CRM

Пример: миграция из CSV

Конфигурация миграции статей из CSV-файла:

id: articles_from_csv label: 'Статьи из CSV' migration_group: content_import source: plugin: csv path: 'public://import/articles.csv' ids: - external_id header_row_count: 1 column_names: - external_id - title - body - category - publish_date - image_url process: title: title 'body/value': body 'body/format': plugin: default_value default_value: full_html created: plugin: format_date source: publish_date from_format: 'd.m.Y' to_format: 'U' status: plugin: default_value default_value: 1 field_category: plugin: migration_lookup migration: categories_from_csv source: category field_image: plugin: download source: - image_url - '@filename' destination: plugin: 'public://images' rename: true destination: plugin: 'entity:node' default_bundle: article migration_dependencies: required: - categories_from_csv 

Пример кастомного source-плагина для API:

<?php // src/Plugin/migrate/source/ExternalApiSource.php namespace Drupal\mymodule\Plugin\migrate\source; use Drupal\migrate\Plugin\migrate\source\SourcePluginBase; /** * @MigrateSource( * id = "external_api", * source_module = "mymodule" * ) */ class ExternalApiSource extends SourcePluginBase { public function getIds(): array { return ['id' => ['type' => 'integer']]; } public function fields(): array { return [ 'id' => 'ID записи', 'title' => 'Заголовок', 'content' => 'Содержимое', 'tags' => 'Теги (через запятую)', ]; } protected function initializeIterator(): \Iterator { $page = 0; do { $response = \Drupal::httpClient()->get( 'https://api.external.com/posts?page=' . $page, ['headers' => ['Authorization' => 'Bearer ' . $this->configuration['api_key']]] ); $data = json_decode($response->getBody(), true); $items = $data['items']; foreach ($items as $item) { yield $item; } $page++; } while (!empty($items) && $page < $data['total_pages']); } } 

Как избежать дубликатов при повторной миграции?

Используйте highwater mark или track_changes: true в конфигурации источника. Тогда мигрируются только новые или изменённые записи. Это особенно полезно при инкрементальном обновлении после первичного импорта. Пример настройки:

highwaterProperty: name: updated_at alias: u 

Миграция медиафайлов и инкрементальный импорт

Изображения и файлы мигрируются отдельным YAML-конфигом, затем привязываются к сущностям через migration_lookup. Пример миграции файлов:

id: files_migration source: plugin: csv path: 'public://import/files.csv' process: filename: plugin: callback callable: basename source: file_url uri: plugin: download source: - file_url - '@filename' destination: plugin: 'public://migrated' destination: plugin: 'entity:file' 

В миграции нод поле field_image использует migration_lookup для ссылки на загруженный файл.

Что входит в наши услуги по миграции контента?

В рамках работы под ключ мы предоставляем:

  • Документацию по структуре миграций
  • Доступы к репозиторию с конфигурацией
  • Оптимизацию производительности: настройка batch size, highwater mark, parallel processing
  • Обучение ваших разработчиков работе с Migrate
  • Поддержку в течение месяца после запуска
  • Гарантию безостановочной работы сайта во время миграции

Сроки

Простая миграция из CSV (500–5000 записей) — 2–3 дня. Сложная миграция из нескольких источников с кастомными плагинами и трансформациями — 1–2 недели. Точные сроки определяем на бесплатном аудите.

Почему миграция на Migrate выгоднее ручного переноса?

Миграция через Migrate — это не только скорость, но и гарантия целостности. Мы используем best practices: highwater mark, track_changes, continue-on-failure. Наши инженеры имеют сертификаты Drupal и опыт работы с проектами, где объём контента превышает 500 000 записей. Свяжитесь с нами, чтобы обсудить вашу задачу. Получите консультацию по миграции бесплатно.