在AWS上部署Flask应用程序而无需停机

时间:2015-09-24 18:51:38

标签: git amazon-web-services amazon-ec2 flask aws-code-deploy

我在Amazon Web Services EC2 Ubuntu服务器上运行了Flask应用程序。当我更新代码时,我使用git将最新的代码推送到我的EC2实例。但是,由于用户已登录并且很可能处于中间位置,因此他们会退出并转到登录页面。

由于我倾向于经常部署到我的应用程序,这可能是一个问题。有没有办法在ubuntu服务器上使用AWS或Flask来防止这个问题?我听说过亚马逊的CodeDeploy,但它看起来只适用于Elastic Beanstalk实例。

我该怎么办?感谢。

2 个答案:

答案 0 :(得分:1)

您应该使用两个弹性beanstalk环境:development&生产。将所有即时更改推送到开发环境以进行测试。当您准备好更新生产环境(可能每天一次)时,请使用弹性beanstalk的交换环境URL功能。这将指导所有用户进入新更新的环境,同时最大限度地减少停机时间。

答案 1 :(得分:1)

CodeDeploy适用于常规EC2实例,实际上不适用于Elastic Beanstalk实例。尝试阅读CodeDeploy user guide,了解有关如何使用CodeDeploy的更多信息。

这仍然无法解决您的实际问题,即您将会话数据存储在Web服务器的本地内存中。如果您需要在负载均衡器后面开始使用多个主机,即使您设法在进程之间保存并重新加载状态,也会遇到同样的问题。

这里有两个有用的选项:

  1. 基于Cookie的会话。您必须在cookie中放置验证登录会话所需的一切,以便您可以在不检查本地状态的情况下验证会话(请不要使用实际密码!)。不安全地执行此操作很容易并且加密cookie(因此只有您的服务器才能读取它)是必须的。
  2. 共享会话存储。使用memcached,redis或更持久的东西(但速度很快 - 可能使用本地缓存)。存储您通常在本地存储在共享缓存中的会话状态。这是使用Redis进行会话状态的Flask Snippet
  3. 您绝对可以使用CodeDeploy来帮助管理和部署这些不同的组件,但我认为您需要先了解如何保持会话。