Сегодня 1 января 2022 года, и я начну заниматься тем, что долго откладывал. А именно обновлю движок сайта с Drupal 8 на Drupal 9. Посетителей не много, все отдыхают. Так что самое время.
Имеется инструкция:
Обновление с помощью composer это, конечно, круто, но у меня сайт хостится на домашнем Windows сервере, так что обновлять будем по старинке, ручками.
Для начала обновим Drupal 8 до последней минорной версии 8.9.20. Можно обновиться до 8.8. Но лучше уж до последней.
Смотрим доступные обновления.
Текущая версия 8.9.20 уже не поддерживается. Будем обновляться на 9.3.0.
Минимальные требования
Убедимся, что система удовлетворяем минимальным требованиям:
https://www.drupal.org/docs/system-requirements
Базы данных
У меня MySQL. Требуется версия MySQL/Percona 5.7.8+. У меня MySQL 8.0.27, обновляться не требуется. Хотя инструкция имеется:
Обновление MySQL 8 на Windows Server 2016
Web сервер
У меня IIS 10. Drupal 9 работает на IIS 5, IIS 6, IIS 7, IIS 8 или IIS 10, нужно только чтобы PHP был нормально установлен.
PHP
Drupal 9 работает на PHP 7.3, так что обновляться тоже не требуется.
Система удовлетворяет минимальным требованиям.
Совместимость модулей
Для проверки совместимости модулей предлагают установить Upgrade Status, однако, он у меня не захотел включаться.
Поэтому я просто обновляю модули до последних версий. Некоторые модули уже не поддерживаются, например, Synapse Image Formatter. От таких модулей придётся отказаться и удалить их. Вспоминаю, что устанавливал этот модуль для вставки картинок в текстовом редакторе, чтобы они открывались в Colorbox. Убираю в текстовом редакторе эту кнопку и удаляю неподдерживаемый модуль.
Продолжаю ковырять модули. Для Metatag доступно обновление, но его можно установить только на Drupal 9. С такими модулями ничего не делаем, обновим после установки нового ядра.
Я так долго тянул с обновлением именно для того, чтобы все используемые модули стали поддерживать Drupal 9. К примеру, модуль Яндекс Метрики тоже пришлось снести и заменить обычным пользовательским блоком с кодом метрики, размещенным внизу страницы.
Дистрибутив
Скачиваю ZIP архив с дистрибутивом Drupal 9.3.0.
https://www.drupal.org/project/drupal/releases/9.3.0
Распаковываю архив.
Обновление Drupal 8 до Drupal 9
Перед началом обновления сделайте резервную копию сайта и базы данных.
Останавливаю сайт в IIS. Drupal любит зажимать файлы, поэтому после остановки сайта можно перезапустить IIS:
iisreset
Удаляем из корня своего сайта папки core, vendor и все файлы корневой директории кроме web.config и ваших собственных файлов, которые не относятся к drupal.
Из скачанного дистрибутива копируем в корень своего сайта с заменой всё содержимое, кроме файла web.config.
Теперь сравниваем фалы web.config своего сайта и дистрибутива. Для сравнения содержимого я использую Total Commander.
Сравнить файлы с помощью Total Commander
В моём случае я не нашёл каких-то важных изменений, так что оставил свой конфигурационный файл без изменений.
Вручную или с помощью того же Total Commander сравниваем и синхронизируем файлы конфигурации drupal8\sites\default\default.settings.php и drupal8\sites\(ваш сайт)internet-lab.ru\settings.php. Я здесь не рассматриваю вопросы настройки поддержки мультисайтов на одном движке. Подразумевается, что у вас всё уже было настроено ранее.
Запускаем сайт на IIS. После запуска традиционно запускаем update.php.
Применяем обновления.
Если обновления не применяются, то инсталлятор покажет ошибки. У меня, к примеру, отобразилась несовместимая тема, что решилось прописыванием совместимостей в конфигурационном файле темы. Ещё отобразилась жалоба на отсутствие конфигурационного параметра $settings['config_sync_directory'], который пришлось указать.
Обновление завершено.
Установлена последняя версия Drupal 9.3.0. Теперь можно обновить остальные модули, которые требовали девятой версии, но это уже другая история.