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
、リモート サーバーにリポジトリのコピーを保持するものを設定する必要があるかもしれません。これにより、展開時間が大幅に短縮され、破損の可能性が減少します。