Перейти к основному содержанию
Login

Миграция с Drupal 7 на Drupal 10

Denys Kravchenko profile picture
Автор: Denys Kravchenko
Macro picture of drop on a green leaf

Конец жизненного цикла Drupal 7 наконец наступил, и если вы среди тех, кто откладывал обновление из-за ограничений ресурсов или сложного кода, это руководство здесь, чтобы помочь. Вот как вы можете пройти переход к Drupal 10, обеспечивая безопасность и работоспособность вашего сайта.

Как владелец бизнеса или разработчик, вы близко знакомы с сильными и слабыми сторонами вашего сайта. Начните с перечисления того, какие функции необходимы, те, которые можно отбросить, и те, которые могут потребовать переосмысления или упрощения. Кастомные решения из Drupal 7 теперь могут быть реализованы с помощью современных contrib-модулей, потенциально упрощая вашу миграцию.

Audit of Content and Modules

Если ваш сайт эволюционировал с момента запуска Drupal 7 в 2011 году, вероятно, вы накопили некоторый беспорядок. Хорошо посмотрите на вашу структуру контента – подумайте о типах контента, блоках, сущностях – и выявите любые неэффективности. Вы можете рассмотреть возможность реструктуризации вашего контента в Drupal 10, используя новые функции или просто упрощая вещи. Используйте инструменты вроде Excalidraw, чтобы визуально отобразить и оптимизировать ваш контент.

plaintext
drush pm-list --type=Module --status=enabled --format=table
drush pm-list --type=Theme --status=enabled --format=table

Теперь, имея список всех ваших модулей и тем, вы можете проверить их статус на Drupal Modules и Drupal Themes. Если модуль или тема не поддерживается, определите их роль в вашем сайте и поищите современные альтернативы в разделе contrib Drupal 10.

Create Your Local Drupal 10 Environment

Здесь мы настраиваем свежий сайт Drupal 10. Для этого шага вам понадобятся DDEV, Docker или OrbStack и Composer, установленные на вашей локальной машине.

Setting Up the Project
 

plaintext
# Создайте новый проект Drupal с помощью DDEV в новой папке `drupal_11_new_project`
composer create-project drupal/recommended-project:^11 drupal_11_new_project
cd drupal_11_new_project

# Настройте DDEV для проекта Drupal
ddev config --project-type=drupal11 --docroot=web --php-version=8.4
ddev start

Checking Installation Status

plaintext
# Include Drush to your project
ddev composer require drush/drush
# Run drush status to see if the environment is installed correctly
ddev drush status

Эта команда выдаст что-то вроде:

plaintext
Drupal version : 11.1.1
Site URI       : https://new-tobedeleted.ddev.site
DB driver      : mysql
DB hostname    : db
DB port        : 3306
DB username    : db
DB name        : db
PHP binary     : /usr/bin/php8.3
PHP config     : /etc/php/8.3/cli/php.ini
PHP OS         : Linux
PHP version    : 8.3.12
Drush script   : /var/www/html/vendor/bin/drush.php
Drush version  : 13.3.3.0
Drush temp     : /tmp
Drush configs  : /var/www/html/vendor/drush/drush/drush.yml
Drupal root    : /var/www/html/web
Site path      : sites/default

Installing Drupal

plaintext
# Install your Drupal site
ddev drush site:install -y

Добавление Contrib-Модулей и Тем: Теперь мы можем установить contrib-модули и темы. Вот как:

  • Сначала проверьте, совместим ли модуль или тема с Drupal 10, посетив страницу проекта на Drupal.org. Ищите совместимость в разделе загрузок, например, Works with Drupal: ^9.4 || ^10 || ^11.
  • Затем используйте Composer, чтобы добавить их в ваш проект:
plaintext
# Example of how to include contrib modules/themes
ddev composer require 'drupal/pathauto:^1.13'
ddev composer require 'drupal/webform:^6.2'
ddev composer require 'drupal/gin'

После установки эти модули должны появиться в директории web/modules/contrib. Чтобы их включить:

plaintext
# Enable pathauto and webform Modules
ddev drush pm:install pathauto webform
ddev drush theme:install gin -y
# Optional set admin theme with drush
ddev drush config-set system.theme admin gin

Теперь вы можете начать создавать структуру вашего контента через UI Drupal 10. Чтобы получить доступ к вашему локальному окружению, вам понадобится:

plaintext
# Open Site in browser
ddev launch
# Login to Admin UI
ddev drush user:login

Custom Theme Setup

Как только вы закрепите структуру контента, следующий шаг – настройка функциональности вашего сайта под ваши нужды. Давайте разберемся с настройкой новой темы. Когда вы решите создать тему с поддержкой Single-Directory Components (SDC), сначала вам нужно выбрать базовую тему. Если вы используете дочернюю тему, убедитесь, что она уже установлена в вашей системе.

plaintext
# Generate fresh theme
mkdir web/themes/custom
ddev drush generate theme
# Enable your new theme
ddev drush config-set system.theme default [your_theme_name]
# Using Single-Directory Components
ddev drush en sdc
ddev drush generate sdc
# if you follow the steps correctly
# new component should be generated
# in web/themes/custom/[your_theme_name]/components

С SDC компоненты легко включаются или встраиваются в шаблоны Twig с помощью функций include или embed:

plaintext
{% embed 'your_theme_name:your_component_name' with {
title: node.label,
subtitle: node.field_subtitle.value,
image: node.field_image.entity.uri.value|file_url
} %}

Для тех, кто борется с HTML-макетами, рассмотрите использование Display Suite или Layout Builder. Эти модули упрощают управление макетами в Drupal, снижая необходимость в кастомной кодировке:

  • Display Suite позволяет создавать сложные макеты с минимальной кодировкой, предлагая прямой контроль над настройками отображения в Drupal.
  • Layout Builder предоставляет интерфейс перетаскивания для создания кастомных макетов для сущностей без написания кода.
  • Single-Directory Components (SDC), в сочетании с инструментами вроде Storybook, предлагают уникальный подход:
    • Изоляция Компонентов: Вы можете работать над компонентами независимо от полной настройки Drupal, что меняет правила игры для разработки.
    • Библиотека Дизайна: Поддерживайте живую систему дизайна вне Drupal, что бесценно для согласованности на разных платформах или для ссылок команд дизайнеров.

Я экспериментировал с этой настройкой, и должен сказать, что процесс итераций между дизайном в Storybook и реализацией в Drupal был невероятно плавным.

Custom Module Setup

Теперь мы готовы мигрировать ваши кастомные функциональности. Вы можете создать каркас вашего модуля с необходимой структурой и шаблонным кодом, адаптируя к конвенциям Drupal 10 с помощью этих команд:

plaintext
mkdir web/modules/custom
ddev drush generate module
## Scaffold your module with the necessary structure
## remember to include your custom module name
## Generate a Controller
ddev drush generate controller
## Generate a Configuration Form
ddev drush generate form:config
## Generate a Custom Service
ddev drush generate service

Перенесите реальный кастомный код из Drupal 7 в Drupal 10. Это может потребовать переписывания кода из-за изменений в API и структуре.

Migrating Drupal 7 to Drupal 10

Drupal 7

  1. Создайте полную резервную копию вашего сайта Drupal 7
plaintext
ddev drush sql-dump > d7_database_backup.sql
tar -czf files_backup.tar.gz /path/to/d7/sites/default/files
  1. Установите Необходимые Модули Миграции
plaintext
ddev composer require drupal/migrate_plus drupal/migrate_tools drupal/migrate_upgrade
ddev drush pm:install migrate_plus migrate_tools migrate_upgrade -y
  1. Импортируйте в новую базу данных в той же среде MYSQL с базой данных Drupal 10
plaintext
# Import your Drupal 7 database into a new database that Drupal 10 can access
mysql -u root -p d7_source < d7_database_backup.sql
# Use Drush to set up the migration process.
ddev drush migrate:upgrade --configure-only --db-url=mysql://db_user:db_pass@db_host/d7_source
# Check the available migrations and their statuses
ddev drush migrate:status
# Run the migration for all configured groups
ddev drush migrate:import --all
# Run the migration for specific id
ddev drush migrate:import [migration-id]
# Run the migration for specific Group
ddev drush migrate:import --group=[group-name]
# Reverses the changes made by a specific migration. This will remove the content or data imported by the migration.
ddev drush migrate:rollback [migration-id]
# Resets the status of a migration to idle. Use this when a migration is stuck in an "in-progress" or "failed" state
ddev drush migrate:reset-status [migration-id]
# Stops an ongoing migration process. This is useful if a migration is taking too long or causing server issues.

Your Drupal 10

Если все прошло гладко, теперь у вас должен быть новый сайт Drupal 10, готовый к запуску. При работе в команде использование Git с конкретными ветками для функций и основного кода критически важно, чтобы избежать блокировок в рабочем процессе. Вот как это управлять

Content Structure & Style

  • Основная Ветка: Это должен быть ваш стабильный, готовый к производству код. Сливайте сюда только хорошо протестированные функции.
  • Ветки Функций: Используйте их для новых функций или исправлений ошибок. Называйте их описательно, например feature/new-login-system или bugfix/fix-login-issue.
  • Синхронизация Файлов Конфигурации: Регулярная синхронизация ваших файлов конфигурации может помочь предотвратить конфликты слияния. Вот как:
plaintext
# Export Drupal configuration to a directory.
ddev drush config:export
# Import config from the config directory. 
ddev drush config:import

Чтобы успешно установить и импортировать конфигурации, убедитесь, что ваш settings.php включает директорию конфигурации

plaintext
$settings['config_sync_directory'] = dirname(DRUPAL_ROOT) . '/config/sync';
plaintext
# create config directory in you project root
mkdir -p config/sync

Performance Tuning Post-Migration

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

plaintext
ddev composer require drupal/devel drupal/webprofiler 
ddev drush pm:install devel webprofiler