Drush обновление всех сайтов на сервере.

Своевременное обновление ядра сайта и модулей - работа первостепенной важности для безопасности сайта и его стабильной работы. Это рутинная работа, которую следует проделывать регулярно. Как быть в случае, когда сайтов на сервере несколько, и на их обновление уходит много времени, читайте ниже!

04 July, 15:58
Кирилл Миченус
Разработчик
5555
1

CMS Drupal - очень динамичная система, над развитием и доработкой которой работает целое мировое сообщество разработчиков. Для поддержания безопасности сайтов на друпале, защиты от внешних угроз, вирусов и взломов, ядро и все модули сайта регулярно совершенствуются. Следовательно, их необходимо своевременно обновлять.

Задача: Максимально упросить процесс обновления сайтов на Drupal.

Автоматическое обновление, к сожалению, невозможно, поэтому обновление следует проводить вручную, путем замены старых файлов на сервере новыми файлами, и провести обновление базы данных. Следует помнить, что перед тем как начать обновление, нужно обязатльно сделать бекап.

Как же быть в случае, когда на хостинге сайтов, которые нужно обновить, много, и не хочеться тратить время на ввод одних и тех же команд к каждому сайту в отдельности?

Решение: Cделать одну команду для ssh, чтобы обновились все сайты, без затрат времени на переходы между сайтами.

У нас есть доступ к SSH и установленный Drush.

Создаем на сервере файл php, которые будет обрабатывать команды и выполнять все необходимые действия по сайтам.


/**
  This file was created by Emil Acosta
  to keep all drupal sites hosted on this
  account upto date with a minimum effort 
  using the Drush tool.
*/

// Базовая директория работы сайта
$mypath = '/home/NAME/domains';
// командная строка drush (настроенна в .bashrc
$drushpath = 'drush'; 

// Drupal Сайты 
//(папки, гда расположены сайты относительно $mypath)
$mysites = array(
          'site.ru',
         );

// Файлы которые можно удалить
$unwanted = array(
          'CHANGELOG.txt', 
          'INSTALL.mysql.txt', 
          'INSTALL.sqlite.txt', 
          'LICENSE.txt', 
          'README.txt', 
          'UPGRADE.txt', 
          'COPYRIGHT.txt', 
          'INSTALL.pgsql.txt', 
          'INSTALL.txt', 
          'MAINTAINERS.txt',
          );

//Список команд drush
$commands = array(
   // переименуем robots.txt, 
   //чтобы его не затронуло обновлением
   'Rename robots.txt' =--> 'cp robots.txt robots.txt.copy',
   'drush_enable_update' => 'en update -y',
   // обновление не безопасных модулей и самого ядра Drupal
   'drush_update' => 'up --security-only -y',
   // очистить весь кеш
   'drush_clear_cache' => 'cc all', 
   // Вернём старый robots.txt
   'Rename robots.txt.copy' => 'mv robots.txt.copy robots.txt', 
   //'Running cron' => 'cron',
   //'Checking for updates' => 'rf',
);

foreach ($mysites as $site) {
  
  echo "\n*********************************************\n";
  echo "       START UPDATING SITE: ".$site;
  echo "\n*********************************************\n";
  
  echo 'Start in directory: '.getcwd() . "\n";
  chdir($mypath.'/'.$site);
  echo 'Working in directory: '.getcwd() . "\n\n";

  // Start Drush Update Process
  
  foreach ($commands as $steps => $command) {
    echo "   ".$steps."\n";
    echo "----------------------------------------\n";
    $tmp = explode('_', $steps);
    if($tmp[0] == 'drush'){
      $output = shell_exec($drushpath.' '.$command);
    }else{
      $output = shell_exec($command);
    }   
  }
  
  // Remove unwanted files
  
  foreach ($unwanted as $filename) {
    
    if (file_exists($filename)) {
      $output = shell_exec('rm '.$filename);
      echo "File: '$filename' was removed.\n";
    }
  }

  echo "\n\n";
  chdir($mypath);
  echo 'Back to my base directory: '.getcwd() . "\n";

  echo "\n*********************************************\n";
  echo "       END UPDATING SITE: ".$site;
  echo "\n*********************************************\n";

}

Далее заходим в ssh, и запускаем команду php FILE.php - и ждем выполнения скрипта.

Оригинал https://www.drupal.org/node/1926484

P.S. СКРИПТ ОБНОВЛЕН 28.04.2018 Исправлены ошибки

Комментарии (1)

Аватар пользователя Дмитрий Трацевский
Дмитрий Трацевский
28.04.2018
 

Не забываем про файл .htaccess. Там могут быть прописаны дополнительные редиректы.
И редирект с www.example.com на example.com по умолчанию закоментирован...

Добавление комментария:

Подписаться на новые статьи

Подпишитесь на новые статьи и вы будете получать самые свежие новости прямо к вам на почту