Пока не закончились новогодние праздники нужно успеть сделать одно хорошее дело. А именно, обновить движок сайта с Drupal 9 на Drupal 10. Посетителей не много, все отдыхают. Так что самое время. Два года назад я уже занимался чем-то подобным:
Обновление Drupal 8 до Drupal 9 в Windows
Тогда я делал всё ручками, на этот раз буду использовать Composer. Частично.
Надеюсь, не нужно напоминать сделать резервную копию базы данных и сайта?
Посмотрим доступные обновления.
Текущая версия движка 9.5.9. Обновляться будем на 10.2.0.
Sites must update to at least Drupal 9.4.4 before upgrading to Drupal 10
Минимальная версия, с которой можно перейти на десятку: 9.4.4.
Подготовка к обновлению
Сайт работает на PHP 8.0. Заглянем в табличку совместимости.
Drupal 10 requires at least PHP 8.1. PHP 8.1.6 is recommended.
Для Drupal 10 потребуется минимум PHP 8.1, так что для начала обновим PHP. Начиная с PHP 8.1 установка сильно усложнилась. Microsoft Web Platform Installer (WebPI), которым раньше я пользовался для установки PHP больше не работает, так что устанавливать приходится вручную. Возня с дополнительными расширениями тоже приключение. Очень печально, что для Windows Server 2016 нет нормальных способов установки. Установку PHP 8.1 вынес в отдельную статью.
Drupal 10 поддерживает БД:
- MariaDB 10.3.7+
- MySQL/Percona 5.7.8+
Этим требованиям мой проект удовлетворяет.
Устаревшие модули
Модули, которые больше не поддерживаются в Drupal 10:
- Aggregator
- CKEditor 4
- Color
- HAL
- Quick Edit
- RDF
Часть модулей я удалил, типа Color, Quick Edit и RDF.
Остался CKEditor 4.
Если очень нужна работа в CKEditor 4, то его можно установить как отдельный модуль:
https://www.drupal.org/project/ckeditor
Но я уже буду сразу переходить на CKEditor 5. Устанавливаю его.
Нужно изменить текстовые редакторы, использующие CKEditor 4, переключить их на CKEditor 5.
Переключаю у базового редактора.
Кнопочки на панели автоматически мигрировали.
Переключаю у полного редактора.
Одна кнопка какая-то лишняя добавилась, отредактировал вручную.
Текстовые редакторы переключены на CKEditor 5.
Теперь можно удалить модуль CKEditor 4.
Обновление расширений
Все модули обновляю до последних версий.
Устаревшие темы
Темы, которые больше не поддерживаются в Drupal 10:
- Bartik
- Classy
- Seven
- Stable
С темами тоже нужно разобраться, переключить их на новые, к примеру. Но это позже.
Upgrade Status
Модуль Upgrade Status поможет проверить ваш сайт на совместимость с Drupal 10.
Вручную он у меня не захотел ставиться, пришлось использовать Composer.
composer require drupal/upgrade_status
Смотрим отчёт совместимости.
Проект ещё не совместим.
Имеются несовместимые темы. Заменим их на совместимые.
Заменил темы на совместимые.
Отчёт стал лучше, но проект всё ещё не совместим.
Не нравится тема Stable, которая используется в основной теме сайта. Её нельзя удалить, тем более что она входит в ядро. Но эту тему можно установить отдельно.
https://www.drupal.org/project/stable
composer require "drupal/stable":"^2.0"
Composer в помощь, обращаем внимание на кавычки, в Windows только так сработает.
Проверяем совместимость.
Совместимо. Но рекомендуют сначала обновить Drupal 9 до последней версии.
Обновление Drupal 9
composer update drupal/core --with-dependencies
composer update "drupal/core-*" --with-all-dependencies
Обновилось.
Ядро Drupal обновилось до версии 9.5.11.
Обновление до Drupal 10
composer update
Редактируем файл composer.json. Меняем у модулей ядра версию на 10.2.
"drupal/core-composer-scaffold": "^10.2",
"drupal/core-project-message": "^10.2",
"drupal/core-recommended": "^10.2",
"drupal/core-vendor-hardening": "^10.2",
composer update "drupal/core-*" --with-all-dependencies
Не получилось. Внимательно читаем что написано и исправляем ошибки. У меня две проблемы: во-первых, я забыл удалить временный модуль Upgrade Status, во-вторых, у меня включена minimum-stability с версией alpha, откуда я установил один из модулей CKEditor Anchor Link.
Удаляю ненужный мне модуль CKEditor Anchor Link.
Возвращаю параметр minimum-stability в значение по умолчанию.
"minimum-stability": "stable"
Удаляю модуль Upgrade Status.
composer remove drupal/upgrade_status
Пробую снова обновиться.
composer update "drupal/core-*" --with-all-dependencies
Обновление проходит успешно. Запускаем update.php для обновления базы данных.
Применяем ожидающие обновления.
Обновления применены.
Чистим кэш.
Ядро Drupal обновлено до версии 10.2.0.