我们正在使用 Capistrano 自动将 PHP 应用程序的新版本推送到生产服务器。生产服务器(我们称之为生产)是公共的,而我们的存储库服务器(我们称之为 repo)与我们自己的机器一起位于我们公司的防火墙后面。
默认配置的 Capistrano 不起作用,因为生产无法与 repo 对话。
我想知道是否有某种方法可以先将 capistrano 设置为 SSH 以进行 repo,然后 SSH 到生产在端口上打开一个隧道,然后我可以使用 SSH 从生产返回 repo 以从 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