尝试在单个实例上运行的AWS Elastic Beanstalk中部署Docker镜像。除了我通过Socket.IO使用的WebSockets之外,一切正常。
Another post建议删除nginx,但这不再可能,或者只是没有使用Docker部署的选项。
我有一个python脚本,它改变了nginx配置以允许WebSocket连接。当我ssh到实例并运行该脚本时,它可以工作。但是,当运行ebextensions时,nginx配置的那部分还不存在,所以我无法自动运行这个脚本。
如果您想亲自尝试,我正在尝试部署databench_examples。当您使用eb init
和eb start
进行部署,然后ssh进入实例并转到/var/app/current
并运行更改nginx配置文件的sudo python nginx_socketio_conf.py
时,它正在工作。如果它不起作用,则在运行simplepi
分析时,您会在浏览器控制台中看到Socket.IO握手中的500错误。
答案 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_
前缀。
谢谢,
埃文