capistrano 通过代理部署到没有 public IP 的服务器

capistrano deployment to a server without public IP through a proxy

我需要部署到的服务器在专用网络中(没有 public IP)。我可以通过 VPN 从该网络外部访问服务器,但遇到困难,每次使用 capistrano 进行部署都会中断。

我可以访问该专用网络中具有 public IP 的另一台计算机。

是否可以设置 capistrano 部署脚本,以便部署通过该“代理”服务器?

除了解决我无法控制的 VPN 问题之外,您能否针对我的情况提出一些其他解决方案。

我想到了设置一个 github 钩子,它会在服务器上触发一个脚本,然后拉出分支,但这比 capistrano 做的要少得多:没有迁移、修订、包更新、服务器重启等...

Capistrano 通过 SSH 与目标服务器通信 - 如果您通过“bastion”服务器设置 SSH 连接到代理并登陆适当的最终主机,那么 Capistrano - 通过该连接 -也会这样做。

最简单的设置方法之一是使用 ~/.ssh/config 块,描述您想要结束的位置,以及能够到达它的代理。

具体如何配置取决于您如何设置网络。

这是一个(针对主机名编辑的).ssh/config 文件我刚刚创建到 SSH 从:home 通过 public 然后是 final:

Host internalvia
    HostName final.hostname.com
    User secretdeployuser
    IdentityFile ~/.ssh/id_rsa
    ProxyCommand ssh public-server.com -W %h:%p

然后我可以 ssh internalvia,然后登陆名为 final.hostname.com 的机器,但我经历了 public-server.com(首先以我自己的身份登录,然后然后,final 为 'secretdeployuser'。public 和 final 都有我常用的 id_rsa 密钥允许登录,标准转发允许我登录两者,甚至通过彼此登录。

当这让您能够从命令行 ssh 进入最终位置时,您可以将 internalvia 作为 Capistrano 设置中的主机。

role :app, %w{ secretdeployuser@internalvia }