Часто в работе приходится синхронизировать версию сайта для разработки с "продакшн" версией сайта. Это можно сделать как например описано в этом посте, но можно и одной командой с помощью 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 подключения к серверу по ключу
Сервер разработки должен иметь возможность подключения к рабочему серверу без пароля, для этого выполняем следуюущие шаги на сервере для разработки:
- генерируем ключ ssh без пароля:
ssh-keygen -t rsa
- копируем ключ на сервер с рабочим сайтом
ssh-copy-id webmaster@192.168.1.1
- проверка подключения по 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',
),
),
),
),
Да, он просто делает всё за вас :)
Спасибо, полезное дополнение;) нужно будет в статью включить.