Как обновить drupal 7 до drupal 8

Как обновить drupal 7 до drupal 8

Переход с Drupal 7 на Drupal 8 – это не просто обновление, а полная миграция. Архитектура ядра изменилась: вместо procedural-кода используется объектно-ориентированный подход, основанный на Symfony. Это требует пересмотра структуры модулей, шаблонов и бизнес-логики сайта. Поэтому процесс нужно планировать как отдельный проект, с бэкапами, тестированием и поэтапной миграцией.

Перед началом обновления необходимо удостовериться, что все модули, используемые в Drupal 7, имеют аналоги или стабильные версии для Drupal 8. Проверка осуществляется через Upgrade Status и Drupal Module Upgrader. Модули, не поддерживаемые в восьмой версии, требуют замены или кастомной реализации. Особое внимание стоит уделить кастомным модулям: их потребуется переписать с нуля, учитывая новую систему плагинов и сервисов.

Миграция контента выполняется с помощью модулей Migrate, Migrate Plus и Migrate Tools. Они позволяют перенести ноды, таксономии, пользователей и поля с минимальными потерями. Однако структура данных должна быть заранее адаптирована к новому формату. Необходимо создать чистую установку Drupal 8, настроить типы материалов вручную, а затем выполнить импорт через конфигурационные YAML-файлы и миграционные скрипты.

Для сохранения конфигурации применяется система Configuration Management. Это означает, что все настройки – от типов материалов до представлений – экспортируются в файл config.yml и могут быть перенесены через Git между средами. Рекомендуется использовать отдельную дев-среду для тестирования миграции, так как откат в случае ошибок в продуктивной среде невозможен без потерь данных.

Drupal 8 больше не поддерживает устаревшие PHP-версии. Минимальная версия PHP – 7.0, но рекомендуется использовать 7.3 или выше. Также требуется MySQL 5.7+ или MariaDB 10.3+. Несоблюдение этих требований приведет к сбоям в установке или миграции.

Подготовка резервной копии сайта и базы данных

Перед обновлением с Drupal 7 до Drupal 8 необходимо создать полную резервную копию файлового хранилища и базы данных. Это обеспечит возможность отката в случае сбоев.

1. Резервное копирование файлов сайта

Выполните архивирование всех файлов в корне сайта, включая директории sites, modules, themes, libraries и скрытые файлы, такие как .htaccess. Используйте команду:

tar -czf drupal7_backup_$(date +%F).tar.gz /var/www/html/drupal7

Если сайт размещён на удалённом сервере, скачайте архив локально через SCP:

scp user@server:/var/www/html/drupal7_backup_*.tar.gz ./

2. Резервное копирование базы данных MySQL

Выполните экспорт базы данных с помощью утилиты mysqldump. Команда должна включать опцию --single-transaction для снижения блокировок:

mysqldump -u drupal_user -p --single-transaction drupal_db > drupal_db_backup_$(date +%F).sql

Проверьте размер файла SQL, убедитесь в наличии команд CREATE и INSERT в начале и по ходу дампа. Для повышения безопасности переместите SQL-файл за пределы веб-директории.

3. Проверка целостности резервных копий

Распакуйте архив в отдельную директорию и удостоверьтесь в наличии всех ключевых файлов. Выполните восстановление базы данных на тестовой среде командой:

mysql -u test_user -p test_db < drupal_db_backup_*.sql

Только после успешного тестового восстановления переходите к следующему этапу обновления.

Проверка совместимости текущих модулей и тем

Проверка совместимости текущих модулей и тем

Перед обновлением необходимо выяснить, какие из используемых модулей и тем имеют версии для Drupal 8. В Drupal 8 архитектура существенно изменилась, поэтому многие модули из Drupal 7 не были перенесены или требуют полной замены.

  • Откройте страницу администратора /admin/modules и составьте список всех включённых модулей.
  • Перейдите на drupal.org и найдите каждый модуль по названию, проверяя наличие версии для Drupal 8 в разделе «Downloads».
  • Обратите внимание на дату последнего коммита и статус проекта. Если модуль помечен как «unsupported» или «no D8 version», необходимо искать альтернативу.
  • Изучите вкладку «Issues» для модуля. Многочисленные открытые баги или отсутствие активности – тревожный сигнал.
  • Проверьте, используется ли модуль в ядре Drupal 8. Например, модули Field UI, RDF и Context были переработаны или интегрированы в ядро.

Темы оформления из Drupal 7 не совместимы с новой системой шаблонов на базе Twig. Требуется либо адаптация под Twig, либо переход на совместимую тему.

  • Определите активную тему через /admin/appearance.
  • Найдите тему на drupal.org и проверьте наличие версии для Drupal 8.
  • Если используется кастомная тема, подготовьте её рефакторинг: замените .tpl.php-файлы на Twig-шаблоны, перепишите функцию theme_* на шаблоны Twig.
  • Проверьте поддержку ландшафтной совместимости с новым API оформления (библиотеки, hook_theme(), YAML-конфигурация).

Удалите неиспользуемые и устаревшие модули до начала миграции. Это уменьшит количество потенциальных ошибок при обновлении.

Установка новой версии Drupal 8 в отдельный каталог

Установка новой версии Drupal 8 в отдельный каталог

Создайте каталог для новой установки, например, drupal8 в корне веб-сервера: mkdir /var/www/html/drupal8.

Скачайте последнюю стабильную версию Drupal 8 с официального сайта или через Composer: composer create-project drupal/recommended-project:8.* /var/www/html/drupal8 --no-interaction.

Убедитесь, что права доступа к файлам и каталогам настроены корректно: веб-сервер должен иметь доступ к каталогу установки. Выполните: chown -R www-data:www-data /var/www/html/drupal8 и find /var/www/html/drupal8 -type d -exec chmod 755 {} \;.

Создайте новый виртуальный хост или настройте поддомен для доступа к установленной версии. Пример конфигурации для Apache:

<VirtualHost *:80>
ServerName drupal8.local
DocumentRoot /var/www/html/drupal8/web
<Directory /var/www/html/drupal8/web>
AllowOverride All
Require all granted
</Directory>
</VirtualHost>

Добавьте запись в файл /etc/hosts: 127.0.0.1 drupal8.local.

Создайте отдельную базу данных, отличную от используемой Drupal 7. Например: CREATE DATABASE drupal8db CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;.

Откройте http://drupal8.local в браузере и следуйте пошаговому установщику. Укажите новый каталог, базу данных и параметры подключения.

Не устанавливайте лишние модули – только необходимые для выполнения миграции. Это снизит вероятность конфликтов при переносе данных.

Настройка среды миграции и установка необходимых модулей

Перед началом миграции необходимо развернуть среду с установленным Drupal 8. Рекомендуется использовать Composer: composer create-project drupal/recommended-project my_site_name_dir. Убедитесь, что установлены PHP версии не ниже 7.0, база данных MySQL версии от 5.7 и веб-сервер Apache или Nginx.

Перейдите в корневую директорию проекта и добавьте модуль миграции: composer require drupal/migrate_plus drupal/migrate_tools drupal/migrate_upgrade. После установки активируйте модули с помощью Drush: drush en migrate_plus migrate_tools migrate_upgrade -y. Если Drush не установлен, добавьте его: composer require drush/drush.

Убедитесь, что в Drupal 8 включены основные модули миграции: migrate и migrate_drupal. Активировать их можно через интерфейс или с помощью команды: drush en migrate migrate_drupal -y.

Создайте копию сайта на Drupal 7, включая базу данных и директорию sites/default/files. Эти данные понадобятся для доступа миграционного механизма к источнику. Укажите параметры подключения к старой базе в файле settings.php через массив $databases. Пример конфигурации:


$databases['migrate']['default'] = [
'database' => 'drupal7',
'username' => 'db_user',
'password' => 'db_pass',
'host' => 'localhost',
'driver' => 'mysql',
'prefix' => '',
];

Для запуска предварительной оценки используйте команду: drush migrate-upgrade --legacy-db-url=mysql://db_user:db_pass@localhost/drupal7 --legacy-root=/путь/к/drupal7 --configure-only. Это создаст конфигурации, но не выполнит миграцию. После проверки структуры можно запускать сам процесс миграции с помощью: drush migrate-import --all.

Проверьте наличие ошибок в логах и устраните их до начала финальной миграции. Используйте drush migrate-status для контроля состояния каждой операции.

Перенос структуры контента с использованием Migrate

Для переноса структуры контента из Drupal 7 в Drupal 8 используется модуль Migrate, входящий в ядро Drupal 8. Необходимо также установить дополнительные модули: Migrate Plus и Migrate Tools.

Начните с экспорта структуры контента из Drupal 7. Используйте Drush-команду drush config-export для сохранения конфигурации. Основное внимание уделите типам материалов (content types), полям (fields), форматам отображения (view modes) и форматам ввода (text formats).

В Drupal 8 создайте кастомный модуль, в который поместите YAML-файлы миграции. Структура: mymodule/migrations/migrate_plus.migration.node_article.yml (где node_article – имя типа материала). В файле определите источник: plugin: d7_node, укажите node_type: article. В блоке process опишите соответствие между полями Drupal 7 и Drupal 8. Например:

field_image:
plugin: get
source: field_image

Обратите внимание: поля, изменённые в структуре (например, field_tags с taxonomy term reference на entity reference), требуют ручной трансформации данных через плагин process, например, migration_lookup с указанием соответствующей миграции терминов таксономии.

Импорт выполняется через Drush: drush migrate-import node_article. Для отката: drush migrate-rollback node_article. Перед импортом обязательно проверьте валидность конфигурации командой drush migrate-status.

Если в структуре используются сложные поля, такие как field_collection или paragraph, потребуется создать отдельные миграции с правильной зависимостью через ключ migration_dependencies.

Рекомендуется использовать подход «структура → справочники → контент», чтобы избежать ошибок связывания сущностей. Начните с миграции таксономий и пользователей, только затем переходите к типам материалов.

Миграция пользовательских данных и таксономии

Для переноса данных пользователей и таксономий используйте модуль Migrate, который входит в стандартную установку Drupal 8 и предоставляет мощные инструменты для выполнения миграции.

Миграция пользователей

В Drupal 8 структура пользователей изменена, включая новый механизм хранения ролей и прав доступа. Для миграции данных пользователей выполните следующие шаги:

  1. Установите и настройте модуль Migrate.
  2. Создайте кастомные миграции с помощью YAML-конфигурации, определяя источники данных из базы Drupal 7.
  3. Используйте поля пользователей, такие как имя, email, роль и статус. Все дополнительные поля можно указать в конфигурации миграции.
  4. Для каждого пользователя создайте уникальный идентификатор. Обычно это поле UID из Drupal 7.
  5. После переноса данных проверьте пользователей на соответствие ролям и правам доступа в новой системе.

Миграция таксономий

Таксономия в Drupal 8 была значительно переработана. Стандартные термины и таксономические vocabularies теперь используют новый механизм для хранения. Процесс миграции выглядит следующим образом:

  1. Определите таксономические vocabularies в Drupal 7, которые необходимо перенести в новую версию.
  2. Для каждой таксономии создайте миграцию, которая будет учитывать ID термина, название и родительские термины.
  3. Настройте соответствие полей, чтобы термины из Drupal 7 корректно отображались в Drupal 8.
  4. После переноса проверьте, что все термины были правильно перенесены, и проверьте работу таксономии с контентом, связав его с новыми терминами.

Рекомендации

  • Перед миграцией создайте резервную копию всех данных, чтобы избежать потерь.
  • Тестируйте миграцию на отдельной тестовой среде, чтобы убедиться в корректности переноса.
  • Используйте консольные команды Drupal для автоматизации процессов и упрощения управления миграциями.
  • После переноса тщательно проверяйте связь между пользователями, таксономиями и контентом, чтобы избежать нарушений в структуре данных.

Ручная настройка нестандартных и кастомных элементов

При обновлении с Drupal 7 на Drupal 8 важно вручную перенастроить кастомные и нестандартные элементы, такие как пользовательские модули, блоки, типы контента и поля. Поскольку структура Drupal 8 существенно изменилась, настройка этих элементов требует внимания к деталям.

1. Модули и расширения

После обновления необходимо заново проверить все кастомные модули. Для этого откройте файл MODULE_NAME.module и адаптируйте его под новые API. Особенно это касается использования хуков, которые изменились или были заменены на сервисы в Drupal 8. Например, функции hook_menu() заменены на роутинг через routing.yml, а хуки типа hook_block_info() – на сервисы для работы с блоками через BlockPluginInterface.

2. Перенос кастомных блоков

В Drupal 8 блоки управляются через систему плагинов. Кастомные блоки, созданные в Drupal 7, требуют переноса в новый формат. Для этого необходимо создать плагин блока, который будет использовать объектный подход. Все блоки, связанные с кастомной логикой, требуют создания нового PHP-класса с использованием интерфейса BlockPluginInterface. Также стоит внимательно обновить теги и маршруты для блоков в routing.yml.

3. Типы контента и поля

Типы контента в Drupal 8 теперь определяются через конфигурационные сущности. При обновлении следует проверить все поля и их типы в разделе «Настройки» -> «Типы контента». Поля, созданные в Drupal 7, возможно, потребуется пересоздать, так как конфигурации полей изменились. Например, поля, которые в Drupal 7 имели тип text, могут быть заменены на text_long или text_with_summary в Drupal 8.

4. Кастомные шаблоны и темы

После обновления важно перенести кастомные шаблоны (например, page.tpl.php) в формат Twig, который используется в Drupal 8. Шаблоны в Twig имеют другую структуру и синтаксис. Вместо использования PHP внутри шаблонов необходимо использовать фильтры и переменные Twig, а также проверить совместимость стилей с новой системой.

5. Обновление маршрутов и маршрутизации

В Drupal 8 маршруты и их конфигурация теперь задаются в routing.yml, а не в коде модулей, как было в Drupal 7. Необходимо обновить все старые пути и маршруты, создавая новые записи в файле routing.yml для кастомных страниц и действий. Также нужно учитывать новые параметры, такие как defaults, requirements, options.

6. Права доступа и роли

Роли и права доступа в Drupal 8 имеют улучшенную систему конфигурации. После обновления проверяйте все права доступа для кастомных модулей и блоков, чтобы убедиться, что пользователи с определенными ролями имеют правильные разрешения. Важно также перепроверить настройки доступа к контенту, если использовались старые кастомные разрешения в Drupal 7.

7. Кэширование и производительность

После переноса данных и настроек важно проверить настройки кэширования в новых версиях блоков, сущностей и представлений. Используйте встроенные механизмы кеширования, такие как cache_tags и cache_contexts, для улучшения производительности и правильного обновления данных в интерфейсе.

Тестирование, отладка и переключение на новый сайт

Тестирование, отладка и переключение на новый сайт

После завершения переноса контента и настройки сайта на Drupal 8 наступает этап тестирования и отладки. На этом этапе важно проверить, как работает сайт в новом окружении, и убедиться в корректности всех функций.

Первым шагом является тестирование производительности. Используйте инструменты, такие как New Relic или Blackfire, для анализа времени загрузки страниц и выявления узких мест. Особое внимание следует уделить кешированию, так как в Drupal 8 внедрены новые механизмы кеширования. Убедитесь, что настроены и работают кэширование на уровне страниц, блоков и данных, а также правильная настройка кеширования для анонимных пользователей.

Затем протестируйте функциональность сайта, включая формы, фильтры и модульные компоненты. В Drupal 8 модуль Views используется для создания сложных запросов и отображения контента, поэтому важно проверить все представления. Протестируйте интеграции с внешними сервисами, такими как платежные системы или API, и убедитесь, что данные синхронизируются корректно.

Также не забывайте про проверку совместимости с браузерами и мобильными устройствами. Используйте инструменты для тестирования мобильной адаптивности, такие как Google Mobile-Friendly Test, и проверьте отображение на разных разрешениях экранов.

Когда тестирование завершено, и все ошибки исправлены, можно переходить к отладке. Проверьте логи ошибок в Drupal и сервере, чтобы исключить возможные проблемы с производительностью или безопасностью. Для этого в настройках Drupal активируйте подробный режим журналирования. Параллельно следите за серверными логами, чтобы обнаружить возможные конфликты с настройками PHP или веб-сервера.

После исправления всех ошибок и завершения тестов подготовьте сайт к переключению. Для этого создайте резервную копию текущей версии сайта, чтобы иметь возможность восстановить его в случае непредвиденных проблем. Затем переключитесь на новый сайт, обновив DNS-записи или изменив настройки сервера, если сайт размещен на другом хостинге.

Наконец, после переключения тщательно мониторьте работу сайта. Особенно важно проверить работу на новых страницах, форму взаимодействия с пользователями, а также убедиться в корректной индексации поисковыми системами.

Вопрос-ответ:

Каковы основные этапы обновления сайта с Drupal 7 до Drupal 8?

Обновление сайта с Drupal 7 до Drupal 8 можно разбить на несколько основных этапов. Во-первых, нужно провести аудит текущей версии сайта, определить используемые модули и темы, которые могут не поддерживаться в Drupal 8. Далее, необходимо обновить ядро Drupal 7 до последней доступной версии и создать резервную копию всех данных. После этого следует провести обновление всех установленных модулей, а затем перейти к обновлению самой темы сайта. Важно протестировать работоспособность всех компонентов после обновлений, чтобы убедиться в корректности функционирования сайта в новой версии. Завершающий этап — это перенос данных, если это необходимо, и тестирование производительности.

Какие модули, использующиеся в Drupal 7, могут быть не совместимы с Drupal 8?

При переходе с Drupal 7 на Drupal 8 важно учитывать, что не все модули, использующиеся в старой версии, будут совместимы с новой. Например, такие популярные модули как Panels, Features или CTools, которые активно использовались в Drupal 7, требуют дополнительной адаптации или новых версий для работы с Drupal 8. Также следует обратить внимание на модули, которые не обновляются, так как они могут быть удалены или заменены на другие. Перед началом обновления рекомендуется проверить наличие актуальных версий нужных вам модулей в официальном репозитории или на сайте разработчиков.

Как провести резервное копирование перед обновлением Drupal 7 до Drupal 8?

Для безопасного обновления всегда рекомендуется сделать полную резервную копию сайта. В первую очередь, нужно создать резервную копию базы данных. Это можно сделать через панель управления хостингом, используя такие инструменты, как phpMyAdmin, или через командную строку, используя mysqldump. Кроме того, нужно сохранить все файлы сайта, включая темы, модули, изображения и настройки. Лучше всего создать архив с полным содержимым директории с сайтом. Также не забудьте о резервном копировании конфигураций, если вы используете решения для работы с конфигурацией в Drupal, такие как Features или Configuration Management.

Как проверить совместимость темы с Drupal 8 при обновлении?

При обновлении темы сайта с Drupal 7 на Drupal 8, важно проверить совместимость темы с новой версией. Для этого можно начать с проверки, использует ли ваша тема Drupal 7 специфические функции, которые были удалены или изменены в Drupal 8. В Drupal 8 значительно изменился подход к шаблонам и стилям, так что для старой темы возможно потребуется переписать некоторые части. Чтобы проверить совместимость, лучше всего использовать инструменты, такие как Theme Developer module или просто обновить тему и посмотреть, как она работает в новой версии. В случае необходимости, потребуется переработать тему с учетом новых принципов работы с темами в Drupal 8.

Какие действия необходимо предпринять после обновления Drupal 7 до Drupal 8 для тестирования сайта?

После завершения процесса обновления, важно провести тщательное тестирование сайта. Прежде всего, нужно проверить функциональность всех страниц, включая создание и редактирование контента, работу форм и комментариев. Затем проверяется совместимость всех установленных модулей, так как некоторые из них могут требовать дополнительной настройки. Особое внимание стоит уделить производительности сайта, так как обновление может повлиять на его скорость и отклик. Также важно проверить безопасность, убедившись, что все настройки выполнены правильно, а уязвимости, характерные для старой версии, устранены. Не забудьте проверить работоспособность мобильной версии сайта и отзывчивость интерфейса.

Ссылка на основную публикацию