capistrano 是使用方便,功能强大的自动化部署工具,它已经成为 Ruby 部署事实上的标准,薄荷项目自动化部署一直使用 capistrano。以前薄荷的服务器基本上是物理机,这些物理机都直接连接外网,最近租用了一些了云主机,为了更好的安全性,同时也为了节约成本,绝大大部分云主机并没有连接外网,只能通过一台连接外网的中转机连接。我们需要把应用部署到这些内部服务器上,最初我们使用了在中转机进行端口转发的方式,最近使用 capistrano deploy via gateway(姑且把它称为网关中转)方式,十分方便。
服务器部署示意图如下所示:
端口转发方式
端口转发方式要对中转服务器端口转发做设置,在 iptables 中配置例子如下:
1
|
|
端口转发实质上和 capistrano 没有直接关系,是在网络层面对中转服务器和内网实际部署服务器做了设置,让 capistrano 通过一个特定的端口与内网服务器通信,在 capistrano 看起来,内网服务器和中转服务器是一样的,只是端口不同而已。
网关中转方式
网关中转方式下,部署客户机首先和中转服务器建立连接,中间服务器再和内网服务器建立连接,部署工作站和内网服务器通过这两个连接通信。网关中转方式通过 capistrano 设置 deploy via gateway 选项完成,不需要对中转服务器做转发设置。
需要注意的是,使用网关中转方式时,capistrano 2.x 和 capistrano 3.x 差异很大,两种并不兼容。
capistrano 2.x 设置很简单,只要设置 gateway 选项就行了,如下所示:
1 2 |
|
capistrano 2.x 的设置在 capistrano 3.x 下不能工作,原因是 cap3 对网络连接做了非常大得重构,原来一些特性使用接口有变化。 capistrano 3.x 设置如下:
1 2 3 4 5 |
|
总结:capistrano 可以通过简单的设置完成向内网服务器部署应用,有端口转发和网关中转两种方式,推荐使用网关中转方式。