После почти года экспериментов, настала пора уезжать от 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
Этот скрипт заходит по очереди во все папки сайтов, пишет где он сейчас, переводит сайт в режим обслуживания, не спрашивая лишнего обновляет модули и бд, включает сайт обратно, чистит кэши, идёт дальше. Неплохо бы сначала сделать бэкап баз и файлов, благо это у адекватных хостеров делается в один клик в админке. После чего остаётся откинуться на спинку кресла и со слезами на глазах наблюдать как за пол-минуты происходит всё то, на что раньше нужно было потратить пол-дня.
Комментарии
Спасибо! Очень полезный пост.
Спасибо! Очень полезный пост.
От здоровья тебе, хороший
От здоровья тебе, хороший человек!
Добавить комментарий