带有Docker的Elastic Beanstalk上的WebSockets

时间:2014-07-17 19:54:33

标签: nginx websocket socket.io docker elastic-beanstalk

尝试在单个实例上运行的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并运行更改nginx配置文件的sudo python nginx_socketio_conf.py时,它正在工作。如果它不起作用,则在运行simplepi分析时,您会在浏览器控制台中看到Socket.IO握手中的500错误。

1 个答案:

答案 0 :(得分:6)

您正确认为运行ebextensions时nginx配置文件不存在。原因如下:配置文件是在部署应用程序之后动态生成的,因为Docker容器的端口映射在容器停止之后才知道。因此,ebextensions执行的令人敬畏的Python脚本没有配置文件可以运行。

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

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

谢谢,

埃文