Elasticbeanstalk 上的 Flask-socketIO

Posted

技术标签:

【中文标题】Elasticbeanstalk 上的 Flask-socketIO【英文标题】:Flask-socketIO on Elasticbeanstalk 【发布时间】:2020-04-05 14:16:53 【问题描述】:

2018 年 10 月 25 日,Flask-socketIO 的作者 Miguel Grimberg 就 回答了 this way。

现在一年后,我尝试使用部署在 EB Python 2.7 上的应用程序来实现它,但我无法让它工作。

Miguel 对 EB 不使用 eventlet Web 服务器表示怀疑,实际上我认为 Apache 不支持 eventlet。

Miguel 在其他地方对 EB 是否是多线程表示怀疑,但我注意到在我的环境配置中存在线程数(NumThreads:15)。

我还发现this solution 用于 AWS 发布的带有 Python 和 Apache(显然)的 Web 套接字,但我无法使其工作(我实际上尝试使用 port=5000 对吗?)。

一个在 Internet 上相当流行的解决方案甚至是这样的:

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

但它似乎与带有 Apache Web 服务器的默认 Python EB 平台没有直接关系。

那么有人在 EB 环境中使用 Flask-socketIO,如果可以,她可以分享配置吗?

【问题讨论】:

为什么需要 Apache?如果您需要 eventlet/gevent 支持,那么只需通过 socketio.run() 或 gunicorn 直接运行服务器。 Apache 很难与 Socket.IO 一起使用。 对不起,你让我一时糊涂了。在您的描述中,您谈论的是 ELB,即“Elastic Load Balancer”,但在标题中您谈论的是“Elastic Beanstalk”,即 EB。 ELB可以工作,EB我还是怀疑,这是一个非常具体的平台,据我了解不支持粘性会话,所以它不会工作。 米格尔感谢您的回答!因此,由于我使用 EB 进行生产并且在那里测试了很多东西,所以我首先尝试使其与基于 Apache 的 EB 默认平台一起使用,这将是最简单的事情。现在我正在尝试使用 EB .elasticbeanstalk 配置安装 nginx+gunicorn,这些配置用于在启动时配置您的 EC2,当我准备好时,我将发布作为我的问题的答案。 EB 使用标准 AWS 组件来构建您的平台,因此您可以选择在任何上下文(EB 与否)中支持粘性会话的 Application Load Balancer。 实际上,在第一次尝试失败(我假设是用 eventlet 进行的)后,我一直坚持使用 flask-socketio 连接切换到长轮询,但我怀疑这取决于我的代码中的错误和不依赖于平台。 (我什至不明白 SSL 是否会以某种方式影响)。 【参考方案1】:

我不知道这是否可以被视为对我最初问题的回答,但我必须注意到 AWS Elasticbeanstalk 已升级到平台 2(Python3.7 + Amazon Linux2-3.0.x),该平台也已从Apache 2.4.43 到 Nginx + Gunicorn。

实际上这可以解决问题,但对使用旧平台和 Apache 的兴趣仍然相关。

例如,在更新到平台 2 后,我不得不切换回平台 1,因为 pipenv(在新平台替代 pip 中)在创建我的应用环境时失败(使用 aws 打开支持案例)。

【讨论】:

以上是关于Elasticbeanstalk 上的 Flask-socketIO的主要内容,如果未能解决你的问题,请参考以下文章

确认烧瓶安装后,Flask app no module named flask 出现在 elasticbeanstalk 中

从在 ElasticBeanstalk 中运行的 Flask 应用程序使用 AWS

使用 elasticbeanstalk 部署 Flask 时出现 AWS mod_wsgi 错误

部署在 Elastic Beanstalk 上的 Python Flask 服务器出现 AWS 内部服务错误,日志说 SECRET_KEY 从未设置?

在 AWS ElasticBeanstalk 中安装 keras tensorflow

使用 Elastic Beanstalk 部署 Flask 应用程序时遇到问题