Elastic Beanstalk 上的 WebSockets 与 Docker

Posted

技术标签:

【中文标题】Elastic Beanstalk 上的 WebSockets 与 Docker【英文标题】:WebSockets on Elastic Beanstalk with Docker 【发布时间】:2014-09-08 20:18:40 【问题描述】:

目前正在尝试在单个实例上运行的 AWS Elastic Beanstalk 中部署 Docker 映像。除了我通过 Socket.IO 使用的 WebSockets 之外,这一切都很好。

Another post 建议删除 nginx,但这要么不再可能,要么不再是使用 Docker 部署的选项。

我有一个 python 脚本可以更改 nginx 配置以允许 WebSocket 连接。当我 ssh 进入实例并运行该脚本时,它可以工作。但是,运行 ebextensions 时,那部分 nginx 配置还不存在,所以我无法自动运行此脚本。

如果你想自己尝试,我正在尝试部署databench_examples。当您使用 eb initeb start 部署它,然后通过 ssh 进入实例并转到 /var/app/current 并运行 sudo python nginx_socketio_conf.py 时,它正在工作,这会更改 nginx 配置文件。如果它不起作用,运行simplepi 分析时,您会在浏览器控制台中看到 Socket.IO 握手的 500 错误。

【问题讨论】:

【参考方案1】:

运行 ebextensions 时 nginx 配置文件不存在是正确的。原因如下:该配置文件是在部署应用程序之后动态生成的,因为 Docker 容器的端口映射直到容器停止后才知道。因此,由 ebextensions 执行的出色 Python 脚本没有可操作的配置文件。

另一种常规方法不起作用,即将 nginx 配置文件写入 /etc/nginx/conf.d,因为 location 指令必须存在于 sites_enabled 配置中的 server 块内。所以这是不行的。

我创建了一个 PR 来说明一种可行的方法:https://github.com/svenkreiss/databench_examples/pull/3 这是一种未记录的技术,可将 Python/nginx 突变脚本放到 Elastic Beanstalk 的 hooks 目录中的正确位置。生成 nginx 配置后,Elastic Beanstalk 会立即执行该脚本(Elastic Beanstalk 将按字母顺序在 hooks 子目录中运行可执行脚本,因此使用 01_ 前缀。

谢谢,

埃文

【讨论】:

嗨,Evan,我遇到了与 mongoDB 27017 端口类似的问题。这是我的完整问题 (***.com/q/26478962/1116959),你建议我做什么来解决它?谢谢 作为参考,此 PR 正在将一个脚本放入 /opt/elasticbeanstalk/hooks/appdeploy/enact/ 中,该脚本会重写亚马逊实施的配置。 要重新启动 nginx,我必须使用“sudo initctl restart nginx”而不是“service restart nginx”才能使其正常工作。

以上是关于Elastic Beanstalk 上的 WebSockets 与 Docker的主要内容,如果未能解决你的问题,请参考以下文章

AWS Elastic Beanstalk 上的 Spring Boot 并记录到文件

Elastic Beanstalk 上的 SSL

如何避免 AWS Elastic Beanstalk 上的 TooManyApplicationVersion 异常?

如何避免 AWS Elastic Beanstalk 上的 TooManyApplicationVersion 异常?

无法连接到 Elastic Beanstalk 上的 ActionCable

AWS Elastic Beanstalk 上的 Wordpress