Net :: SSH реализует удаленную пересылку . Я просмотрел весь исходный код Capistrano и не увидел ссылок на него в текущем выпуске. Тем не менее это не мешает вам установить удаленную переадресацию перед развертыванием с Capistrano.
То, что вы хотите сделать, это установить пути :local_repository
и :repository
индивидуально. На :local_repository
ссылаются локально, чтобы определить, какой коммит будет использоваться для развертывания до инициации соединения. Это оставляет :repository
для удаленного сервера для извлечения после того, как соединение было инициировано. Здесь вы можете указать путь к хранилищу за брандмауэром.
# deploy.rb
set :local_repository, "ssh://git@serverbehindfirewall/path/to/project.git"
set :repository, "ssh://git@localhost:9000/path/to/project.git"
Перед развертыванием обязательно установите удаленную пересылку. Вам нужно будет повторить это для каждого сервера, на котором вы развертываете.
$ ssh -R 9000:serverbehindfirewall:22 deploybot@deployserver.com
# CTRL + C + A (Screen) or ⌘ + T (Terminal.app) to open new tab
$ cap HOSTFILTER=deployserver.com deploy # HOSTFILTER reduces set to specified host. Only useful if you have multiple servers.
Используя Net :: SSH, это легко можно превратить в задачу, которая выполняется раньше всего, обеспечивая большую гибкость при развертывании на нескольких серверах.
Наконец, если вы используете scp, вы можете установить deploy_via, :remote_cache
, который хранит копию хранилища на удаленном сервере. Это значительно сокращает время развертывания и снижает вероятность повреждения.