Drush на timeweb или любом другом shared хостинге c ssh доступом.

После почти года экспериментов, настала пора уезжать от amazon ec2. В облаке, конечно, хорошо - но слишком много времени тратится на администрирование, всё таки микроинстанс это тестовая площадка, держать там хостинг - некая разновидность извращения, которая перестала меня радовать. Итак, мультисайтинг на друпале переехал на новый хостинг, базы перенесены, всё хорошо, но... Пришла пора обновляться.

Подзапустил я всё это дело, установка у меня довольно стандартная - в папке sites/all живут все модули, кастомные темы раскиданы по директориям сайтов, и всё как то живёт. Поняв что всё это хозяйство живёт на 7.18 а пришёл уже Drupal 7.22 c несколькими критичными обновлениями, да и модули пора обновить, я решил начать обновляться. Для начала - core. Скачав ядро, залив его, и зайдя на update.php более 10 сайтов, я понял что что-то делаю не так. А впереди ещё обновление модулей. Каждый скачать вручную... бред в общем. Вспомнил что как-то читал про Drush - консольную silver-bullet для Друпала.

Установка Drush подробно расписана в его мануале не гитхабе.

Доступ к pear на шаред хостингах традиционно закрыт, да и ssh редкость, хотя последние два моих хостинга - diphost и timeweb оба их предоставляют. Будем устанавливать.

в корне хостинга создал папку drush, закачал туда архив и распаковал - 

mkdir drush
cd drush
wget http://ftp.drupal.org/files/projects/drush-7.x-5.9.zip
unzip drush-7.x-5.9.zip
cd drush
chmod u+x drush

Отлично. Теперь добавим drush в окружение -

cd ~/
touch .bash_profile

Внутрь пишем - export PATH="$PATH:~/drush/drush"
Сохраняемся, отключаемся, подключаемся обратно. Проверяем наши настройки - 

drush status
 PHP configuration     :  /usr/local/Zend/etc/php.ini 
 Drush version         :  5.9                         
 Drush configuration   :   

Отлично. Теперь идём в sites и будем делать магию. У меня там живёт несколько проектов в статусе "когданибудь доделать", т.е. папка есть, а проекта реально нет - я решил скрывать их от скрипта обновления скрытием самой папки - т.е. например /sites/.niph.info не будет виден моим скриптом, так же как и папки all и defaults, думаю если у вас в defaults кто-то живёт - вы знаете что вычеркнуть из скрипта. итак, сам скрипт проще всего положить в /sites/ - 

touch ~/public_html/sites/drushupd

Внутрь кладём это:

#!/bin/bash

sites=`find . -maxdepth 1 -type d -print | grep -v '/all$' | grep -v '/\..*$' | grep -v '/default$' | grep -v '\.$'`

for site in $sites
do
  cd $site
pwd
drush vset maintenance_mode 1 --yes drush pm-update -y drush vset maintenance_mode 0 --yes drush cc all echo '
'; cd ../ done

Этот скрипт заходит по очереди во все папки сайтов, пишет где он сейчас, переводит сайт в режим обслуживания, не спрашивая лишнего обновляет модули и бд, включает сайт обратно, чистит кэши, идёт дальше. Неплохо бы сначала сделать бэкап баз и файлов, благо это у адекватных хостеров делается в один клик в админке. После чего остаётся откинуться на спинку кресла и со слезами на глазах наблюдать как за пол-минуты происходит всё то, на что раньше нужно было потратить пол-дня. 

 

 

Комментарии

Спасибо! Очень полезный пост.

От здоровья тебе, хороший человек!

Добавить комментарий

Plain text

  • No HTML tags allowed.
  • Строки и параграфы переносятся автоматически.

Последние комментарии

Вход в систему

Powered by Drupal