10

パブリックホストに常駐するアプリケーションを開発していますが、そのソースは企業ファイアウォールの背後にあるGitリポジトリに保持する必要があります。経由でのデプロイ(リポジトリ全体をコピーし、デプロイごとにSSH経由で出荷する)の遅さに非常にうんざりしいて、リモートホストに更新をscp実行してもらいたいと思っています。git pull問題は、ファイアウォールが着信SSH接続を禁止していることです。

コンピューターから展開コンピューターへのSSHトンネルを設定し、リポジトリをソースとして使用することは可能git pullでしょうか?結局のところ、git配布されているので、私のコピーは中央のリポジトリと同じくらい有効なリポジトリです。これが可能な場合、トンネルコマンドとCapistrano構成はどうなりますか?

トンネルはこんな感じになると思います

ssh -R something:deployserver.com:something deploybot@deployserver.com
4

2 に答える 2

7

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

于 2010-10-17T13:18:07.687 に答える
1

このSOの質問からの私の答えを見てください:

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 接続にアクセスする公式の方法を知っている人は、コメントまたは編集してください。

編集: SSHKit の READMEのセクショントンネリングおよびその他の関連する SSH テーマも参照してください。

于 2015-07-23T13:39:28.663 に答える