Capistranoに逆SSHトンネルをチェックアウトすることは可能ですか?
-
02-10-2019 - |
質問
私は公開ホストに存在するアプリケーションを開発していますが、そのソースは企業ファイアウォールの後ろのGitリポジトリに保管する必要があります。私は得ています 非常に 展開の遅さにうんざりしています scp
(リポジトリ全体をコピーして、各展開でSSHを介して配送します)。 git pull
更新する。問題は、ファイアウォールが着信SSH接続を禁止することです。
コンピューターから展開コンピューターにSSHトンネルをセットアップし、リポジトリをのソースとして使用することは可能ですか git pull
?結局、 git
配布されるので、私のコピーは中央のコピーと同じくらい有効なリポジトリです。これが可能であれば、トンネルコマンドとカピストラノの構成は何ですか?
トンネルはようなものになると思います
ssh -R something:deployserver.com:something deploybot@deployserver.com
解決
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
リモートサーバーにリポジトリのコピーを保持します。これにより、展開時間が大幅に短縮されると、腐敗の可能性が低下します。
他のヒント
私の答えを見てください これはとても質問です:
Capistrano 3.xを使用して、私のために次のように機能します:
namespace :deploy do
desc "Open SSH Tunnel to GitLab"
task :open_tunnel do
on roles(:app) do
info "Opening SSH Remote Tunnel..."
self.send(:with_ssh) do |ssh|
# ssh -R 9000:192.168.1.123:22
ssh.forward.remote(22, "192.168.1.123", 9000)
end
end
end
before "deploy:check", "deploy:open_tunnel"
end
その点に注意してください ssh.forward.remote
別の順序でパラメーターを期待します ssh -R
, 、上記は同等です ssh -R 9000:192.168.1.123:22
このタスクは、CapistranoのSSH接続をアクセスする公式の方法を知っている場合は、コメントまたは編集してください。
編集: セクションも参照してください トンネルおよびその他の関連するSSHテーマ sshkitのreadmeの