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

Git 在AWS上部署Flask应用程序而无需停机,git,amazon-web-services,amazon-ec2,flask,aws-code-deploy,Git,Amazon Web Services,Amazon Ec2,Flask,Aws Code Deploy,我在AmazonWebServicesEC2Ubuntu服务器上运行了一个Flask应用程序。当我更新代码时,我使用git将最新的代码推送到我的EC2实例。然而,当用户签入并且最有可能在某个中间时,他们被签出并被带到登录页面。 由于我经常倾向于部署到我的应用程序,这可能是一个问题。有没有办法在ubuntu服务器上使用AWS或Flask来防止这个问题?我听说过Amazon的CodeDeploy,但是,它似乎只适用于弹性Beanstalk实例 我能做什么?谢谢。您应该使用两种弹性豆茎环境:开发和生产

我在AmazonWebServicesEC2Ubuntu服务器上运行了一个Flask应用程序。当我更新代码时,我使用git将最新的代码推送到我的EC2实例。然而,当用户签入并且最有可能在某个中间时,他们被签出并被带到登录页面。

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


我能做什么?谢谢。

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

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

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

这里有两种选择是有意义的:

  • 基于Cookie的会话。您必须将验证登录会话所需的所有内容都放在cookie中,以便在不检查本地状态的情况下验证会话(请不要检查实际密码!)。这很容易做到不安全,加密cookie(只有您的服务器才能读取)是必须的
  • 共享会话存储。使用memcached、redis或更持久的东西(但速度很快,可能是本地缓存)。将通常在本地存储的会话状态存储在共享缓存中。下面是一个使用Redis进行会话状态的示例

  • 您当然可以使用CodeDeploy来帮助管理和部署这些不同的组件,但我认为您需要先了解如何持久化会话。

    我不使用elastic beanstalk,我只使用EC2服务器。是否有类似的方法?您将会话存储在何处?是否每次启动应用程序时都生成一个新的密钥?密钥保持不变。会话存储在cookie中。我正在使用Flask登录来登录用户。当我重新启动服务器时,它会将它们注销。谢谢你的回答。我已经在使用基于cookie的会话和Flask登录,但是用户仍然被注销。看看这个:你仍然想使用一些不特定于主机的东西。