Обновление файлов на сайте с помощью rsync

December 24, 2009 rsync SSH

Продолжаю цикл статей о взаимодествии с архаичными сайтами и их же поддержке.

Пришел к выводу, что удобнее всего производить изменения (крупные, ибо мелкие удобнее в 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. Потом – сделать ветку, вытянуть в нее текущее состояние сайта, накатить сверху свои изменения, закоммитить и вылить обратно. Просто.

Buy Me a Coffee at ko-fi.com