Как обновить Drupal 7 и модули используя Drush через SSH на хостинге Beget

Подготовка к обновлению через Drush

На хостинге Beget предустановлен Drush 8, для обновления сайта и модулей на Drupal 7 он в установленном на хостинге варианте не подходит.

Поэтому, вначале установим Drush 7 и для этого через SSH доступ используя, например, программу PuTTY, после авторизации, выполним последовательно следующие команды:

composer global require drush/drush:7.*
alias drush="~/.composer/vendor/drush/drush/drush"
source ~/.bashrc
drush --version

С помощью последней команды мы проверяем текущую версию Drush и теперь нам доступен Drush 7:

Обновление ядра Drupal 7

А теперь непосредственно обновление Drupal 7:

заходим в папку, в которой находится тот сайт на Drupal 7, который хотите обновить: 

cd ваш_сайт.ru/public_html

выполняем команду обновления ядра Drupal до актуальной версии с подтверждением (-y), чтобы не подтверждать каждый запрос согласием: 

drush up drupal -y

во время выполнения команды происходит автоматический бэкап текущей версии drupal в папку на хостинге и в терминале пишется адрес этой папки, его необходимо скопировать и подставить в следующей команде, которая скопирует из бэкапа ваш старый .htaccess файл: 

cp /home/d/ddd_account_name/drush-backups/account_name_site/20200604151009/drupal/.htaccess .htaccess

тоже самое с фалом robots.txt:

cp /home/d/ddd_account_name/drush-backups/account_name_site/20200604151009/drupal/robots.txt robots.txt

затем необязательная команда удаления неиспользуемых тем сайта, выполняйте только если не используете эти темы (Bartik, Garland, Stark):

rm -rf themes/bartik themes/garland themes/stark

затем также необязательная команда удаления текстовых readme файлов из корня сайта и папок themes/profiles/modules, если Вы их не читаете и не желаете, чтобы их читали другие:

rm CHANGELOG.txt COPYRIGHT.txt INSTALL.mysql.txt INSTALL.pgsql.txt INSTALL.sqlite.txt INSTALL.txt LICENSE.txt MAINTAINERS.txt README.txt UPGRADE.txt themes/README.txt profiles/README.txt modules/README.txt

Обновление модулей

следующая команда запускает обновление модулей:

drush up --no-core -y

Если в процессе обновления база данных отвалилась, запускаем процесс снова, если опять отвалилась, но модулей, для которых доступны обновления стало меньше, тогда снова запускаем и так, пока всё не обновится. Если после нескольких запусков количество доступных модулей не уменьшается, то необходимо запускать обновление группами по несколько модулей за раз, группируя несколько лёгких и отдельно обновляя такие тяжёлые, как например views, metatag:

drush up -y modulename1 modulename2

Здесь modulename1 название первого модуля, modulename2 название второго модуля в группе модулей для обновления, перечилять названия модулей через пробел.

Запуск cron и обновление переводов

следующие команды необязательны и скорее всего не понадобятся, т.к. процесс обновления закончен, но дополнительно в некоторых случаях может потребоваться запуск cron, обновление переводов и после этого повторный запуск cron (имейте ввиду, что если на cron у Вас повешены ресурсоёмкие задачи, например импорт данных, генерация карты сайта из тысяч страниц и т.п., то при запуске cron такие задачи также могут быть запущены, т.е. запуск cron через админку сайта и запуск cron через drush может приводить к разным результатам):

drush cron
drush l10n-update-refresh
drush cron

Проверка работоспособности сайта

После обновлений зайдите на сайт в анонимном режиме, например в браузере в режиме инкогнито, проверьте, что сайт работает и основные функции работают так, как должны, затем проверьте работу сайта в админке, проверьте страницу статуса /admin/reports/status и лог ошибок /admin/reports/dblog, если на сайте включен модуль dblog.

Если что-то пошло не так из-за обновления какого-то модуля, то верните старые версии модулей по одному, определив виновника, затем вновь обновив модули, по одному или несколько за раз командой:

drush up modulename1 modulename2

При этом не обновляя проблемный модуль.

На сайте drupal.org на странице модуля, из-за которого произошла ошибка перейдите по ссылке issue и поищите текст ошибки, если ничего не найдёте, можно написать свой запрос к автору модуля по найденной ошибке с просьбой помочь в её решении.

Зачем раздельно обновлять ядро и модули

Несмотря на то, что командой: drush up -y можно обновить сразу и ядро и модули, в нашей инструкции процедуры обновления разделены, одна из причин в том, что иногда модули могут быть тяжёлыми и/или их может быть много и выделенных ресурсов будет недостаточно, в итоге при попытке обновлений база данных может падать и это будет приводить к ошибкам, чтобы уменьшить вероятность этого, лучше разделять процессы обновления ядра и модулей, а также если модулей много, обновлять их небольшими группами по несколько штук за раз.