Развертывание приложения Flask на AWS без простоев

У меня есть приложение Flask, работающее на сервере Amazon Web Services EC2 Ubuntu. Когда я обновляю код, я использую git для отправки последнего кода в мой экземпляр EC2. Однако, поскольку пользователи вошли в систему и, скорее всего, что-то делают, они выходят из системы и переходят на страницу входа.

Поскольку я часто развертываю свое приложение, это может быть проблемой. Есть ли способ предотвратить эту проблему с помощью AWS или Flask на сервере Ubuntu? Я слышал о CodeDeploy от Amazon, но похоже, что он работает только с экземплярами Elastic Beanstalk.

Что я могу сделать? Спасибо.


person Pav Sidhu    schedule 24.09.2015    source источник
comment
Где вы храните сеансы и генерируете ли вы новый секретный ключ каждый раз при запуске приложения?   -  person dirn    schedule 25.09.2015
comment
Секретный ключ остается прежним. Сессии хранятся в файлах cookie. Я использую Flask-Login для входа пользователей. Когда я перезагружаю сервер, он выводит их из системы.   -  person Pav Sidhu    schedule 25.09.2015


Ответы (2)


CodeDeploy работает с обычными инстансами EC2 и фактически не будет работать с инстансами Elastic Beanstalk. Попробуйте прочитать руководство пользователя по CodeDeploy, чтобы узнать больше о том, как для использования CodeDeploy.

Это все равно не решит вашу настоящую проблему, заключающуюся в том, что вы храните данные сеанса в локальной памяти вашего веб-сервера. Если вам нужно начать использовать несколько хостов за балансировщиком нагрузки, у вас будет та же проблема, даже если вам удастся сохранить и перезагрузить состояние между процессами.

Здесь есть два варианта, которые имеют смысл:

  1. Сеансы на основе файлов cookie. Вы должны поместить все, что вам нужно для проверки сеанса входа в файл cookie, чтобы вы могли проверить сеанс, не проверяя локальное состояние (что-то, кроме фактического пароля, пожалуйста!). Это легко сделать небезопасно, и шифрование файла cookie (чтобы его могли прочитать только ваши серверы) является обязательным.
  2. Общее хранилище сеансов. Используйте memcached, redis или что-то более постоянное (но быстрое — возможно, с локальным кэшированием). Сохраните состояние сеанса, которое вы обычно сохраняете локально в общем кэше. Вот фрагмент Flask для использования Redis для состояния сеанса.

Вы определенно можете использовать CodeDeploy для помощи в управлении и развертывании этих различных компонентов, но я думаю, вам нужно сначала посмотреть, как вы сохраняете сеансы.

person Jonathan Turpie    schedule 24.09.2015
comment
Спасибо за Ваш ответ. Я уже использую сеансы на основе файлов cookie с Flask-Login, однако пользователи все еще не вышли из системы. - person Pav Sidhu; 26.09.2015
comment
Взгляните на это: stackoverflow.com/questions/13399294/ Однако вы все равно хотите использовать что-то, что не зависит от хоста. - person Jonathan Turpie; 26.09.2015

Вы должны использовать две эластичные среды beanstalk: разработка и производство. Отправьте все свои немедленные изменения в среду разработки для тестирования. Когда вы будете готовы обновить производственную среду (возможно, один раз в день), используйте функцию URL-адресов среды подкачки эластичного beanstalk. Это затем направит всех пользователей к недавно обновленным средам, минимизируя время простоя.

person Matt Auerbach    schedule 24.09.2015
comment
Я не использую эластичный beanstalk, я просто использую сервер EC2. Есть ли эквивалент для этого? - person Pav Sidhu; 24.09.2015