带有Docker的Elastic Beanstalk上的WebSockets

尝试在现在在单个实例上运行的AWS Elastic Beanstalk中部署Docker镜像。 除了通过Socket.IO使用的WebSockets之外,它一切正常。

另一个postbuild议删除nginx,但这不是可能了,或者不是用Docker部署的选项。

我有一个Python脚本,更改nginxconfiguration,以允许WebSocket连接。 当我进入实例并运行该脚本,它的作品。 但是,当ebextensions运行时,那部分nginxconfiguration还不存在,所以我不能自动运行这个脚本。

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

    当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将按照字母顺序在钩子子目录中运行可执行脚本,因此是01_前缀。

    谢谢,

    埃文