是否有可能让Capistrano通过反向SSH隧道进行结账?

Jam*_*sen 10 deployment ssh capistrano ruby-on-rails ssh-tunnel

我正在开发一个驻留在公共主机上的应用程序,但其源代码必须保存在公司防火墙后面的Git存储库中.我得到非常疲倦通过部署的缓慢的scp(复制整个仓库和运输过来SSH每个部署),并希望有远程主机只是做了git pull更新.问题是防火墙禁止传入SSH连接.

我是否可以设置从我的计算机到部署计算机的SSH隧道,并使用我的存储库作为git pull?毕竟,git是分发的,所以我的副本与中央副本一样有效.如果可以,那么tunnel命令和Capistrano配置是什么?

我认为隧道看起来像

ssh -R something:deployserver.com:something deploybot@deployserver.com
Run Code Online (Sandbox Code Playgroud)

Tat*_*son 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"
Run Code Online (Sandbox Code Playgroud)

在部署之前,请确保建立远程转发.您需要为部署到的每个服务器重复此操作.

$ 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.
Run Code Online (Sandbox Code Playgroud)

使用Net :: SSH可以很容易地将其转换为在部署到多个服务器之前提供更大灵活性的任务之前执行的任务.

最后,鉴于您一直在使用scp,您可能希望设置deploy_via, :remote_cache 哪个保留远程服务器上的存储库副本.这大大减少了您的部署时间,减少了腐败的可能性.