【发布时间】:2016-10-25 21:09:29
【问题描述】:
我正在使用 Ansible 部署一个使用 Puma 作为 Web 服务器的 Ruby on Rails 应用程序。作为部署的一部分,Puma 配置绑定到端口 8080 上的服务器 IP 地址:
bind "tcp://{{ ip_address }}:8080"
然后在 nginx vhost 配置中使用它来访问应用程序:
upstream {{ app_name }} {
server {{ ip_address }}:8080;
}
所有这些都运行良好。但是,我现在想将应用程序的多个副本(暂存、生产)部署到同一台服务器上,显然在 8080 上有多个绑定会导致问题,因此我需要使用不同的端口。
最简单的解决方案是将端口包含在组 var 中,然后在部署应用程序时将其放入。然而,这需要已经在服务器上运行的应用程序的背景知识,并且感觉部署应该能够“发现”要使用的端口。
相反,我正在考虑通过端口进行某种迭代,从 8080 开始,然后检查每个端口,直到没有一个端口被使用。 netstat -anp | grep 8080 如果端口正在使用,则返回代码 0,所以也许我可以使用该命令进行测试(尽管我不确定如何执行循环位)。
以前有人遇到过这个问题吗?有没有我忽略的更优雅的解决方案?
【问题讨论】:
标签: ruby-on-rails ansible puma