Обновление ядра Drupal и модулей
Drupal использует Composer для управления зависимостями — обновление ядра и модулей происходит через него. Без Composer (установка вручную) — переходите на Composer-based setup, иначе каждое обновление будет ручной операцией.
Подготовка
# Создать бэкап БД
drush sql:dump --result-file=/backups/drupal-$(date +%Y%m%d).sql --gzip
# Бэкап файлов (если нет автоматического)
tar czf /backups/files-$(date +%Y%m%d).tar.gz /var/www/site/web/sites/default/files
# Включить режим обслуживания
drush state:set system.maintenance_mode 1 --input-format=integer
drush cr
Проверка доступных обновлений
# Показать все доступные обновления
composer outdated "drupal/*"
# Только обновления безопасности
drush pm:security
Обновление ядра Drupal
# Обновить до последней совместимой версии
composer update drupal/core-recommended drupal/core-composer-scaffold --with-all-dependencies
# Или до конкретной версии
composer require drupal/core-recommended:^10.3 --update-with-all-dependencies
# Применить обновления БД
drush updatedb
# Обновить экспортированную конфигурацию
drush config:export
git diff config/sync/
Обновление модулей
# Обновить все модули разом
composer update "drupal/*" --with-all-dependencies
# Обновить конкретный модуль
composer require drupal/views:^3.14
# После обновления модулей
drush updatedb
drush cr
Major-версии: Drupal 9 → 10 → 11
Для major-обновления используйте Upgrade Status:
composer require drupal/upgrade_status
drush en upgrade_status -y
drush upgrade_status:analyze
Upgrade Status анализирует все модули на совместимость с целевой версией, показывает deprecated функции в кастомном коде.
# Drupal 9 → 10
composer require drupal/core-recommended:^10 --update-with-all-dependencies
# Устаревшие API: проверить через Rector
composer require --dev palantirnet/drupal-rector
vendor/bin/rector process web/modules/custom
Обновление contrib модулей с breaking changes
Некоторые модули требуют ручных действий при обновлении:
# Проверить CHANGELOG модуля
cat vendor/drupal/webform/CHANGELOG.md | head -100
# Проверить hook_update_N функции
drush php-eval "print_r(drupal_get_schema_versions('webform'));"
# Применить только обновления конкретного модуля
drush updatedb --module=webform
Тестирование после обновления
# Восстановить нормальный режим
drush state:set system.maintenance_mode 0 --input-format=integer
drush cr
# Запустить тесты (если есть)
./vendor/bin/phpunit web/modules/custom
# Проверить логи на ошибки
drush watchdog:show --severity=Error --count=50
CI/CD для автоматических обновлений
# .github/workflows/security-updates.yml
name: Security Updates
on:
schedule:
- cron: '0 9 * * 1' # каждый понедельник
jobs:
update:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Check security updates
run: composer audit
- name: Apply updates
run: composer update --with-all-dependencies
- name: Create PR if changes
uses: peter-evans/create-pull-request@v6
Сроки
Плановое обновление ядра и модулей Drupal с бэкапом и тестированием — 2–4 часа. Major-обновление с анализом совместимости — 1–3 дня.







