2

我有一个在 Amazon Web Services EC2 Ubuntu 服务器上运行的 Flask 应用程序。当我更新代码时,我使用 git 将最新代码推送到我的 EC2 实例。但是,由于用户已登录并且很可能正在进行某项操作,因此他们会被注销并转到登录页面。

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

我能做些什么?谢谢。

4

2 回答 2

1

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

于 2015-09-24T19:35:33.657 回答
1

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

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

这里有两个有意义的选项:

  1. 基于 Cookie 的会话。您必须将验证登录会话所需的所有内容放入 cookie 中,这样您就可以在不检查本地状态的情况下验证会话(请输入实际密码以外的内容!)。不安全地执行此操作很容易,并且必须加密 cookie(因此只有您的服务器可以读取它)。
  2. 共享会话存储。使用 memcached、redis 或其他更持久的东西(但速度很快 - 可能使用本地缓存)。将通常本地存储的会话状态存储在共享缓存中。这是使用 Redis 进行会话状态的Flask Snippet 。

您绝对可以使用 CodeDeploy 来帮助管理和部署这些不同的组件,但我认为您需要先查看如何保持会话。

于 2015-09-24T19:53:02.860 回答