部署和configuration复杂的python应用程序scheme

挑战

我们新的应用程序使用几种服务

  • 自定义构buildpostgresql,
  • Redis的,
  • 芹菜,
  • RabbitMQ的,
  • HAProxy的,
  • nginx的,
  • uwsgi,
  • 大约4我们的内部过程(主要是python),
  • AngularJS的webaplication,

我将以SaS模式发布它,这意味着所有这些服务都将托pipe在我们的云中(现在在AWS中,后来是OpenStack)。 每个客户将获得自己的实例。 安装将取决于客户需求/规模 – 在某些情况下,所有服务都将在单个虚拟机上运行,​​在某些情况下,每个服务将有多个虚拟机。 服务configuration取决于客户(如附加function)。 我希望有一个简单的方法来创build“演示”实例 – 只是让未来的客户玩我们的应用程序。

要求

我寻找一个能帮助我的解决scheme:

  • 设置一个或一堆虚拟机(aws,openstack),
  • configuration它们的通用规则,
  • 从git master分支构build我们的软件(运行grunt for webaplication,twitter.pants for python),
  • 部署服务,
  • 扩展安装(添加更多虚拟机与选定的服务),
  • 经过一段时间升级服务选定的版本,

build议的解决scheme

我已经看到了多变的看起来不错,但它的发展不是为了生产。 我已经看到docker这更好,但我不确定是否足够有弹性来支持每个客户不同的容器configuration。 无论如何,我仍然需要一个工具来创build这些容器…

我build议使用ansible作为工具来创build虚拟机,configuration公共部分,然后在主机上部署服务。 我会保持每个客户/实例单独的库存。 Ansible清单组将允许在一个虚拟机上安装所有angular色(服务),或者将其安装在单独的虚拟机上。 我相信这也能帮助我们升级服务。

问题

我有一些问题:

  1. 您在我的设置中看到的任何问题?
  2. 在什么情况下可能是不够的,所以我希望有像docker这样的东西?
  3. 如何跟踪单独的实例? 如果我改变剧本,如何确保它在每个主机上运行?
  4. 是否有机会根据angular色和可靠的库存自动为每个虚拟机创build防火墙规则?
  5. 还有其他build议吗?

我非常感谢所有的反馈。

我会试一试你的一些问题,但是如果你能缩小你的问题,那么这会更有帮助。

您在我的设置中看到的任何问题?

看起来不错,但这取决于应用程序在做什么以及瓶颈可能在哪里。

在什么情况下Ansible可能是不够的,所以我希望有像docker这样的东西?

即使您使用Docker,Ansible也应该可以做到所有自动化。 我没有使用Docker,但Docker本质上是lxc的一个包装,而Ansible允许你在完整的Linux机器或者lxc容器上运行命令。

如何跟踪单独的实例? 如果我改变剧本,如何确保它在每个主机上运行?

每当你改变你的Ansible游戏手册时,如果你使用的是Docker,你将必须更新你的Docker容器。 然后从Docker中,您可以使用推送您的更改。 如果您不使用Docker,则每次更改时都必须在所有受影响的服务器上重新运行您的Ansible操作手册。 你可能要考虑错开你的剧本的运行。 您可以在每台服务器上本地运行这些手册,也可以从客户端工作站远程运行。 请记住,如果从单个客户端工作站运行很多节点,则可能是不可行的,因为来自客户端的networking和CPU限制。

是否有机会根据angular色和可靠的库存自动为每个虚拟机创build防火墙规则?

是。 如果您使用Ansible,则可以使用模板在每个虚拟机上说configure iptables。