Flask-socketIO на Elasticbeanstalk

25 октября 2018 года Мигель Гримберг, автор Flask-socketIO, ответил таким образом о Flask- socketIO на Elasticbeanstalk.

Теперь, год спустя, я пытаюсь сделать это с помощью приложения, развернутого на EB Python 2.7, но я не могу заставить его работать.

Мигель выразил сомнения по поводу того, что EB не использует веб-серверы событий, и на самом деле я думаю, что Apache не поддерживает события.

Где-то еще Мигель выразил сомнение в том, что EB является многопоточным, но я заметил, что в моей конфигурации среды указано количество потоков (NumThreads: 15).

Я также нашел это решение для веб-сокетов с Python и Apache (очевидно), выпущенное AWS, но я не могу заставить его работать (на самом деле я пробовал с портом = 5000, верно?).

Довольно популярное в Интернете решение:

container_commands:

enable_websockets:
    command: |
     sed -i '/\s*proxy_set_header\s*Connection/c \
              proxy_set_header Upgrade $http_upgrade;\
              proxy_set_header Connection "upgrade";\
      ' /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf

но это не имеет прямого отношения к платформе Python EB по умолчанию с веб-сервером Apache.

Итак, кто-нибудь использует Flask-socketIO в среде EB, и если да, то не мог бы он поделиться конфигурацией?


person Marco Evasi    schedule 12.12.2019    source источник
comment
Зачем вам Апач? Если вам нужна поддержка eventlet/gevent, то просто запустите сервер напрямую через socketio.run() или через gunicorn. Apache сложно использовать с Socket.IO.   -  person Miguel    schedule 13.12.2019
comment
Извините, на мгновение вы меня смутили. В вашем описании вы говорите об ELB, то есть Elastic Load Balancer, но в заголовке вы говорите об Elastic Beanstalk, то есть EB. ELB может работать, EB я все еще сомневаюсь, это очень специфическая платформа, которая, насколько я понимаю, не поддерживает липкие сессии, поэтому она не будет работать.   -  person Miguel    schedule 13.12.2019
comment
Мигель спасибо за ответ! Итак, поскольку я использую EB для производства и у меня есть много вещей, протестированных там, я сначала пытался заставить его работать с платформой EB по умолчанию, основанной на Apache, это было бы проще всего. Теперь я пытаюсь установить nginx + gunicorn с конфигурациями EB .elasticbeanstalk, которые используются для настройки ваших EC2 при запуске, когда я буду готов, я опубликую как ответ на мой вопрос.   -  person Marco Evasi    schedule 17.12.2019
comment
EB использует стандартные компоненты AWS для создания вашей платформы, поэтому вы можете выбрать Application Load Balancer, который поддерживает фиксированные сеансы в любом контексте (EB или нет).   -  person Marco Evasi    schedule 17.12.2019
comment
На самом деле в этот момент я застрял с переключением соединения flask-socketio на длительный опрос после первой неудачной попытки (которая, как я полагаю, была сделана с помощью eventlet), но я подозреваю, что это зависит от ошибок в моем коде и не зависит от платформы. (Я даже не понимаю, может ли SSL как-то влиять).   -  person Marco Evasi    schedule 17.12.2019
comment
Я хотел бы сделать обновление к тому, что было сказано выше. Начиная с Amazon Linux 2 платформа EB 3 переключилась с Apache на Gunicorn + Nginx в качестве платформы AWS Python по умолчанию.   -  person Marco Evasi    schedule 07.06.2020


Ответы (1)


Я не знаю, можно ли это считать ответом на мой первоначальный вопрос, но я должен заметить, что AWS Elasticbeanstalk обновился до платформы 2 (Python3.7 + Amazon Linux2-3.0.x), которая также перешла с Apache 2.4. 43 для Nginx + Gunicorn.

На самом деле это может закрыть вопрос, но некоторый интерес к использованию старой платформы с Apache все еще актуален.

Например, после обновления до платформы 2 мне пришлось переключиться обратно на платформу 1, потому что pipenv (который в новой платформе заменяет pip) не работает при создании среды моего приложения (обращение в службу поддержки открыто с помощью aws).

person Marco Evasi    schedule 27.07.2020