Для переноса контента с удаленного компьютера на локальный (или наоборот) очень помогут команды drush sql-sync и drush rsync, соответственно.
Перед тем как перейти к непосредственной настройке этих команд, настроим доступ с локальном компьютера на удаленный через SSH без ввода пароля - с помощью пары ключей:
Настройка SSH аутентификации с помощью публичного ключа
Теперь можно переходить к непосредственной настройки drush.
1) Создаём директорию ~/.drush:
mkdir ~/.drush
2) В данной директории создаём файл настроек синонимов, в котором мы укажем синонимы и настройки для простого обращения к удаленному и локальному компьютерам:
touch ~/.drush/aliases.drushrc.php
3) Теперь прописываем в файле что-то подобное:
<?php $local_sites = '/home/stingmu/localserver/'; // путь к локальной директории с сайтом $aliases['sitename.local'] = array( 'root' => $local_sites . 'sitename.loc', 'path-aliases' => array( '%dump-dir' => $local_sites . 'drush.dbdumps', '%files' => $local_sites . 'sitename.loc/sites/default/files' ) ); $remote_sites = '/var/www/username/data/www/'; $aliases['sitename.remote'] = array ( 'root' => $remote_sites . 'sitename.ru', 'remote-host' => '46.254.21.41', 'remote-user' => 'islamrostov', 'ssh-options' => "-p 22", 'path-aliases' => array( '%dump-dir' => $remote_sites . 'drush.dbdumps', '%files' => $remote_sites . 'sitename.ru/sites/default/files' ) );
4) Теперь всё готово к загрузке БД или файлов с удаленного сервера на локальный (или наоборот). Специальное свойство --no-cache необходимо если БД загружается чаще чем раз в сутки, иначе будет браться старый дамп вместо свежей БД.
drush -y sql-sync --no-cache @sitename.remote @sitename.local
drush -y rsync @sitename.remote:%files @sitename.local:%files --omit-dir-times --no-p
5) Для ускорения процесса синхронизации БД следует исключить таблицы с кешем. А также, чтобы не происходило "разлогинивания" на локальном сайте следует исключить таблицу сессий. Для этого создадим файл ~/.drush/drushrc.php со следующим содержимым:
<?php // Tables to exclude from sql-sync $options['skip-tables']['common'] = array('cache', 'cache_filter', 'cache_menu', 'cache_page', 'history', 'sessions', 'watchdog'); $custom_cache = array ('cache_admin_menu','cache_block','cache_bootstrap','cache_features','cache_field','cache_form','cache_image','cache_l10n_update','cache_libraries','cache_path','cache_token','cache_update','cache_views','cache_views_data'); $options['skip-tables']['common'] = array_merge($options['skip-tables']['common'], $custom_cache); $command_specific['sql-sync'] = array('skip-tables-key' => 'common');
6) Для упрощения выполнения обеих этих команд - можно придумать для них короткие синонимы, которые будет просто запомнить (sitename-sync, sitename-rsync). Для этого добавим в файл ~/.drush/drushrc.php следующие строки:
$options['shell-aliases']['sitename-sync'] = '-y sql-sync --no-cache @remote @local'; $options['shell-aliases']['sitename-rsync'] = '-y rsync @remote:%files/ @local:%files --omit-dir-times --no-p';