Миграция сайта с Magento 1 на Magento 2

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

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

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Миграция сайта с Magento 1 на Magento 2
Сложная
от 2 недель до 3 месяцев
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1214
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    852
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1041
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    823
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    815

Миграция с Magento 1 на Magento 2

Magento 1 официально не поддерживается с июня 2020 года. Перенос на Magento 2 — не обновление, а полная пересборка: разные архитектуры, разные форматы данных, разная система расширений. Официальный инструмент Data Migration Tool перенесёт данные, но весь код тем и модулей нужно писать заново или искать аналоги.

Что переносится, что нет

Компонент Статус
Товары, категории, атрибуты Переносятся через Data Migration Tool
Клиенты и пароли Клиенты переносятся, пароли — нет (алгоритм хэширования изменился)
Заказы и история Переносятся
CMS-страницы и блоки Переносятся
Темы (шаблоны) Не переносятся — Magento 2 использует PHTML + Knockout.js + LESS
Расширения Не переносятся — Magento 2 API несовместим
Кастомные таблицы БД Требуют ручного переноса
URL rewrites Переносятся с оговорками

Этапы миграции

1. Аудит Magento 1

Инвентаризация расширений — самый важный этап:

# Список установленных расширений
find /var/www/m1 -name "*.xml" -path "*/etc/config.xml" | \
    grep -v "Mage\|Phoenix\|Enterprise" | head -50

# Список кастомного кода в app/local и app/community
ls /var/www/m1/app/code/local/
ls /var/www/m1/app/code/community/

Для каждого расширения найти аналог для Magento 2 или оценить стоимость переписывания.

2. Установка Magento 2 и Data Migration Tool

# Установить Magento 2
composer create-project --repository-url=https://repo.magento.com/ \
    magento/project-community-edition /var/www/m2

# Установить Data Migration Tool
composer require magento/data-migration-tool

# Конфиг: app/etc/env.php (M2 соединение)
# config.xml мигратора
cp vendor/magento/data-migration-tool/etc/opensource-to-opensource/1.9.4.1/config.xml.dist \
    app/etc/migration-config.xml

Редактировать migration-config.xml — указать оба соединения (M1 и M2), версию источника.

3. Настройка маппинга

<!-- app/etc/migration-config.xml -->
<config xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
        xs:noNamespaceSchemaLocation="urn:magento:module:Magento_DataMigrationTool:etc/config.xsd">
    <steps mode="data">
        <step title="Settings Step">
            <integrity>Magento\DataMigration\Step\Settings\Integrity</integrity>
            <run>Magento\DataMigration\Step\Settings\Data</run>
        </step>
    </steps>

    <source>
        <database host="localhost" name="magento1_db" user="root" password="pass"/>
    </source>
    <destination>
        <database host="localhost" name="magento2_db" user="root" password="pass"/>
    </destination>
    <options>
        <bulk_size>100</bulk_size>
        <custom_option_map>false</custom_option_map>
        <source_prefix></source_prefix>
        <dest_prefix></dest_prefix>
    </options>
</config>

4. Запуск миграции настроек

# Проверить настройки (только чтение)
php bin/magento migrate:settings --config=app/etc/migration-config.xml

# Мигрировать конфигурацию магазина
php bin/magento migrate:settings --config=app/etc/migration-config.xml --stage=data

5. Миграция данных

# Проверка целостности (до запуска!)
php bin/magento migrate:check --config=app/etc/migration-config.xml --stage=data

# Если проверка прошла — запуск миграции данных
php bin/magento migrate:data --config=app/etc/migration-config.xml

# Инкрементальная миграция (delta) для синхронизации новых заказов
php bin/magento migrate:delta --config=app/etc/migration-config.xml

Миграция большого каталога (100k+ товаров) занимает часы. Запускать через screen или tmux:

screen -S migration
php bin/magento migrate:data --config=app/etc/migration-config.xml 2>&1 | tee /var/log/migration.log
# Ctrl+A D для detach

6. Маппинг нестандартных атрибутов

Если в M1 были кастомные атрибуты со специфичными кодами или типами:

<!-- vendor/magento/data-migration-tool/etc/opensource-to-opensource/1.9.4.1/map-eav.xml -->
<map>
    <source>
        <field_rules>
            <ignore>
                <field>catalog_product/my_custom_attr_old_name</field>
            </ignore>
        </field_rules>
    </source>
    <destination>
        <field_rules>
            <transform>
                <field>catalog_product/new_attr_name</field>
                <handler class="Magento\DataMigration\Handler\SetValue">
                    <param name="value" value="default_value"/>
                </handler>
            </transform>
        </field_rules>
    </destination>
</map>

Миграция кастомных таблиц

Data Migration Tool не знает о кастомных таблицах расширений. Для них — ручной SQL-скрипт:

<?php
// migrate_custom_data.php
$m1 = new PDO('mysql:host=localhost;dbname=magento1', 'root', 'pass');
$m2 = new PDO('mysql:host=localhost;dbname=magento2', 'root', 'pass');

// Пример: перенести кастомные отзывы
$stmt = $m1->query("SELECT * FROM custom_reviews WHERE status = 1");
$reviews = $stmt->fetchAll(PDO::FETCH_ASSOC);

$insert = $m2->prepare(
    "INSERT INTO custom_reviews (product_id, customer_id, text, rating, created_at)
     VALUES (:product_id, :customer_id, :text, :rating, :created_at)
     ON DUPLICATE KEY UPDATE text = :text"
);

foreach ($reviews as $review) {
    $insert->execute($review);
}

Проблема паролей клиентов

M1 использует MD5-хэш паролей, M2 — bcrypt. После миграции клиентам нужно сбросить пароль. Варианты:

  1. Принудительный сброс — отправить всем email со ссылкой на сброс пароля
  2. Lazy migration — при первом входе проверять старый MD5, если совпадает — перехэшировать через bcrypt и сохранить
// Plugin для CustomerAuthenticationService
public function aroundAuthenticate($subject, callable $proceed, $username, $password)
{
    try {
        return $proceed($username, $password); // Попробовать стандартный bcrypt
    } catch (AuthenticationException $e) {
        // Проверить legacy MD5
        $customer = $this->customerRepository->get($username);
        $legacyHash = md5($password); // упрощённо, M1 использовал соль
        if (hash_equals($customer->getLegacyPasswordHash(), $legacyHash)) {
            // Обновить на bcrypt
            $this->customerRepository->save(
                $customer->setPasswordHash($this->encryptor->getHash($password, true))
            );
            return $customer;
        }
        throw $e;
    }
}

Переход с OCMOD/Connect на Composer

Все M1-расширения установлены через Magento Connect или файловые патчи. В M2 — только Composer. Для каждого расширения:

  1. Найти аналог на marketplace.magento.com или Packagist
  2. Если аналога нет — написать модуль заново под M2 API
# Установка расширения через Composer
composer require vendor/module-name

# Активировать модуль
php bin/magento module:enable Vendor_ModuleName
php bin/magento setup:upgrade

SEO: сохранение URL

M1 и M2 имеют разные форматы URL. Нужно сгенерировать 301-редиректы:

-- Получить старые URL из M1
SELECT request_path, target_path, options
FROM core_url_rewrite
WHERE store_id = 1
  AND id_path NOT LIKE 'product/%' -- исключить автогенерированные
ORDER BY request_path;

После генерации URL в M2 — сравнить и создать редиректы в Nginx или через M2 URL Rewrites.

Финальная синхронизация (delta migration)

Пока M1 работает в production, новые заказы продолжают поступать. После переключения DNS:

# Остановить M1, запустить финальную дельта-миграцию
php bin/magento migrate:delta --config=app/etc/migration-config.xml

# Переиндексация
php bin/magento indexer:reindex

# Деплой статики
php bin/magento setup:static-content:deploy ru_RU en_US -f
php bin/magento cache:flush

Сроки

Миграция данных с Magento 1 (до 50k товаров) — 2–3 дня. Весь проект с переработкой темы, портингом расширений и тестированием — 2–4 месяца в зависимости от объёма кастомного кода в M1.