Capistranoを使用して、PHPアプリケーションの新しいバージョンを本番サーバーにプッシュすることを自動化しています。本番サーバー(本番と呼びます)はパブリックですが、リポジトリサーバー(リポジトリと呼びます)は、自社のマシンとともに企業ファイアウォールの背後にあります。
Capistranoは、デフォルトで構成されているように、本番環境がリポジトリと通信できないため、機能しません。
どういうわけか、capistranoをSSHに設定して最初にリポジトリに接続し、次にSSHを本番環境に設定してポートにトンネルを開き、本番環境からリポジトリにSSHで接続してSCMから変更をプルできるかどうか疑問に思いました。
これを設定する方法や、より良い解決策を見つける方法がわかりません。アイデア?
編集:
私はこれを試しました:
role :web, "deploy.com"
namespace :deploy do
task :remote_tunnel do
run 'Creating SSH tunnel...' do |channel, stream, data|
ssh = channel.connection
ssh.forward.remote(22, 'server.com', 10000, '127.0.0.1')
ssh.loop {!ssh.forward.active_remotes.include?([10000, '127.0.0.1'])}
end
end
end
before "deploy:update_code", "deploy:remote_tunnel"
しかし、私はこのエラーを受け取り続けます:
failed: "sh -c 'Creating SSH tunnel...'" on deploy.com