Capistrano 部署到同一云服务上的多个节点

Capistrano deploy to many nodes on the same Cloud Service

我在 Azure 上有一个包含许多实例的云服务,每个实例都具有相同的地址,例如。 mycloudservice.cloudapp.net 但在随机端口上公开 ssh 服务,以便可以从外部访问任何实例。

问题是 Capistrano 不喜欢这种命名方式,更清楚一点:

使用不同的名称一切正常

server 'myservice0.cloudapp.net', user: 'azureuser', roles: %w{web}
server 'myservice1.cloudapp.net', user: 'azureuser', roles: %w{web}

但是当我使用不同端口的相同名称时,Capistrano 认为我只是重新定义了以前的服务器,所以它最终只使用了最后一个

server 'myservice.cloudapp.net', port: 53458, user: 'azureuser', roles: %w{web}
server 'myservice.cloudapp.net', port: 62434, user: 'azureuser', roles: %w{web}

是否可以解决定义多个同名服务器的问题?

Capistrano 检查唯一的服务器名称。您可以在 ~/.ssh/config 中使用 ssh 别名来解决该问题。

server 'ssh_aliases1', roles: %w{web}
server 'ssh_aliases2', roles: %w{web}

并将其添加到 ~/.ssh/config

Host ssh_aliases1
  HostName myservice.cloudapp.net
  User azureuser
  port 53458

Host ssh_aliases2
  HostName myservice.cloudapp.net
  User azureuser
  port 62434