Синхронизация Drupal сайтов c помощью Drush

Опубликовано admin - пт, 01/18/2013 - 18:27

Часто в работе приходится синхронизировать версию сайта для разработки с "продакшн" версией сайта. Это можно сделать как например описано в этом посте, но можно и одной командой с помощью Drush. Сегодня ма рассмотрим как можно быстро синхронизировать 2 Drupal сайта с помощью Drush.

Постановка задачи

Необходимо настроить быстрое копирования базы и файлов с сайта для разработки на рабочий сайт и обратно.

Рабочий сайт

Домен: example.ru
Сервер: 192.168.1.1
Папка сайта: /home/webmaster/domains/example.ru/html
Доступ по ssh: webmaster, webpassword
Mysq: база example (пользователь - dbuser, пароль - dbpass)

Сайт для разработки

Домен: dev.example.ru
Сервер: 192.168.1.2
Доступ по ssh: developer, devpassword
Mysql: база devexample (пользователь - devdbuser, пароль - devdbpass)

Хочу отметить, что на обоих серверах должен быть установлен drush, rsync и mysqldump.

Настройка алиасов для drush

На сервере для разработки создаем файл /home/webmaster/.drush/example.aliases.drushrc.php

<?php
//Сайт для разработки
$aliases['example.dev'] = array(
//Путь к папке сайта
  'root' => '/home/developer/domains/dev.example.ru',
//Домен сайта
  'uri' => 'dev.example.ru',
//Параметры подключения к базе данных
  'db-url' => 'mysqli://devdbuser:devdbpass@localhost/devexample',
  'path-aliases' => array(
    '%dump' => '/tmp/devexample.sql',
//путь к папке с файлами
    '%files' => '/home/developer/domains/dev.example.ru/sites/default/files',
  ),
);
//Рабочий сайт
$aliases['example.prod'] = array(
//Путь к папке сайта
  'root' => '/homw/webmaster/domains/example.ru/html',
//Домен сайта
  'uri' => 'example.ru',
// Сервер сайта
  'remote-host' => '192.168.1.1',
// Пользователь для подключения по ssh
  'remote-user' => 'webmaster',
//параметры подключения к базе данных
  'db-url' => 'mysqli://webmaster:webpassword@localhost/example',
  'path-aliases' => array(
    '%dump' => '/tmp/example.sql',
//путь к папке с файлами
    '%files' => '/home/webmaster/domains/example.ru/html/sites/default/files',
  ),
);

?>

Настройка ssh подключения к серверу по ключу

Сервер разработки должен иметь возможность подключения к рабочему серверу без пароля, для этого выполняем следуюущие шаги на сервере для разработки:

  1. генерируем ключ ssh без пароля:
    ssh-keygen -t rsa
    
  2. копируем ключ на сервер с рабочим сайтом
    ssh-copy-id webmaster@192.168.1.1
    
  3. проверка подключения по ssh без ввода пароля
    ssh webmaster@192.168.1.1
    

Копирование базы данных и файлов

Все команды выполняем на сервере для разработки в папке сайта.

cd /home/devepoler/domains/dev.example.ru/html

После проведения всех предыдущих шагов мы можем копировать файлы с сайта для разработки на рабочий сайт одной командой:

drush rsync @example.dev @example.prod

Для копирования базы данных используем следующую команду

drush sql-sync @example.dev @example.prod

Стоит наверно упомянуть, что rsync и sql-sync имеют уйму настроек полезных. Их можно зашить для разного сервера разные в том же aliases.drushrc.php. Например, так:


'command-specific' => array (
'rsync' => array (
'exclude-paths' => '.htaccess',
'delete' => TRUE,
),
),

А для самых ленивых есть ещё и sync_enable.drush.inc:


'target-command-specific' => array(
'sql-sync' => array(
'enable' => array('devel', 'hacked'),
'disable' => array('securepages'),
'permission' => array(
'authenticated user' => array(
'add' => array('access devel information', 'access environment indicator'),
'remove' => 'change own password',
),
'anonymous user' => array(
'add' => 'access environment indicator',
),
),
),
),

Да, он просто делает всё за вас :)

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

Filtered HTML

  • Допустимые HTML-теги: <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd>
  • Строки и абзацы переносятся автоматически.
  • Web page addresses and email addresses turn into links automatically.