Обновление файлов на сайте с помощью rsync
December 24, 2009 in DevopsПродолжаю цикл статей о взаимодествии с архаичными сайтами и их же поддержке.
Пришел к выводу, что удобнее всего производить изменения (крупные, ибо мелкие удобнее в GEdit по gvfs) посредством rsync. То есть, слил код сайта себе на машину, доработал, залил обратно. Когда-то я это делал вручную, по одному файлу, что было сложно и опасно. Тем, кто делает так до сих пор, посвящается статья.
Нужен будет ssh-доступ на искомый сайт.
Выбор того, что нужно копировать
Сначала узнаем размер сайта:
# ssh mysite.com cd /var/www/mysite.com du -hs .
Если сайт достаточно небольшой, чтобы его можно было скачать целиком – отлично. Если нет – ищем каталоги, которые можно будет пропустить.
# временные папки, наверно, не пригодятся find -type d -name tmp find -type d -name cache # определяем самые объемные каталоги du -hs *
Дальше командой du
можно углубляться в каталоги, пока не обнаружишь тот самый uploads
(или что там еще может занимать много места).
du -hs app/* du -hs app/webroot/* # ...
Результатом этой деятельности должен быть список папок – кандидатов на включение в файл фильтров.
Написание файла фильтров для rsync
Да его просто писать.
# Папки, которые не нужно копировать - /phpmyadmin - /app/webroot/uploads - /app/tmp - /app/config # все остальные папки - \*/ # тут можно фильтровать по типу файлов, например - \*.avi
Важно помнить, что правила применяются сверху вниз и что справка доступна по команде man rsync
.
Собственно процесс синхронизации
# а это уже локально mkdir mysite rsync -azv --filter "merge my-filters-file" mysite.com:/var/www/mysite.com/ mysite
-a
скопирует все содержимое папки, -z
будет сжимать файлы перед передачей, а -v
будет подробнее описывать процесс.
Если страшно – у rsync
есть ключ -n
, который выполняет все операции, кроме реального копирования файлов. Еще таким образом можно посмотреть объем файлов, которые будут передаваться, что удобно.
Готово? Сливаем дамп базы (mysqldump-ом или dumper-ом), настраиваем локальную копию сайта, работаем.
Команда для заливки файлов обратно:
rsync -azv --filter "merge my-filters-file" mysite mysite.com:/var/www/mysite.com/
Прелесть в том, что rsync
самостоятельно выберет измененные файлы и заливать будет только их.
Контроль версий
Естественно, существует риск того, что кто-нибудь возьмет да и поменяет исходники, пока ты их редактируешь. Чтоб избежать проблем с затертыми исходниками, свою копию можно положить под git. Потом – сделать ветку, вытянуть в нее текущее состояние сайта, накатить сверху свои изменения, закоммитить и вылить обратно. Просто.
Понравился пост? Купи мне кофе