Доставка файлов из VCS на shared-хостинг с помощью sshfs
01 октября 2009, обновлена 27 октября 2009
В общем, понадобится sshfs – штука для монтирования ssh-каталогов в локальные. Конечно, она есть в репозитариях Ubuntu.
В смонтированном таким образом каталоге можно выполнять практически любые утилиты, имеющиеся на локальной машине. Например, git pull.
# Монтируем каталог mkdir ssh-export sshfs -o workaround=rename the.deploy.server:/the/deploy/path ssh-export cd ssh-export # Обновляем git pull # Отмонтировываем cd .. fusermount -u ssh-export rm -rf ssh-export
Причина использования workaround=rename описана в Git FAQ.
Замечу, что скорость этого способа все же меньше, чем у rsync, потому что rsync сжимает данные. Зато он гораздо удобнее и позволяет выкладывать код на сервер любым душе угодным образом.
Еще я пробовал использовать git через FTP с помощью curlftpfs, но, увы, git не хочет работать без возможности залочить файл.
Другие способы обойтись без системы контроля версий – в статье «Грамотное разворачивание сайта без VCS».

sshfs позволяет сжимать трафик с помощью -C флага. Но обычно от него пользы маловато. При перекачке, например картинок, он лишь создаст нагрузку на клиента и сервер.
curlftpfs вообще глючная штука.
Интересно, а что мешало воспользоваться модным нынче Capistrano для развертывания ? Насколько я понимаю, проект на РоР ?
Я в предыдущей статье использовал Capistrano. Его тоже надо допиливать, и в данном случае проще написать баш-скрипт из пяти строчек.
sshfs штука весьма полезная (спасибо за обзор), но какое отношение к этому имеет процесс развертывания(deploy)?
вы же не просто копируете файлы на продакшн сервер, верно?
Да, но проблема была именно с доставанием файлов из git на shared-хостинг.
если есть ssh, то и капистрано будет работать.
с каким хостером возникли проблемы, если не секрет?
Хостер hostpro.ua. Капистрано не будет работать по-простому, если на сервере нет git – я об этой ситуации рассказывал <a href=«http://leonid.shevtsov.me/03-09-2009/gramotnoe-razvorachivanie-sajta-bez-vcs/» rel=«nofollow»>тут</a>.