我使用Flask构建了一个基本的Web应用程序,并且能够使用其本机http服务器从虚拟机运行它.我很快意识到,通过这个设置,请求被阻止(我无法对资源进行并发请求;任何新请求都要等到早期请求完成),并决定尝试使用gunicorn运行应用程序来解决此问题.我按照文档,特别是使用此行运行:
gunicorn -w 4 -b 127.0.0.1:4000 myproject:app
Run Code Online (Sandbox Code Playgroud)
但是,它无法启动这样做,并抱怨没有WSGI应用程序.在互联网上闲聊,我发现有很多人发布了以下示例:
from werkzeug.contrib.fixers import ProxyFix
app.wsgi_app = ProxyFix(app.wsgi_app)
Run Code Online (Sandbox Code Playgroud)
我补充说,它解决了我的问题.我很困惑,因为这显然是为了解决在HTTP代理后面服务的问题,但是增加的gunicorn会强加一个HTTP代理吗?或者我总是落后于代理,而Flask的内置服务器并不重要?
此外,Werkzeug关于Fixers的文档警告"出于安全原因,不要在非代理设置中使用此中间件." 考虑到修复显然是必要的,我可以假设我正在进行代理设置吗?
我有一个应用程序,目前正在通过Docker Compose文件在单个主机上运行。容器通过RabbitMQ容器相互通信(因此它们都已链接)。该应用程序开始需要的资源比我的单个主机所能提供的更多,因此我认为Docker Swarm将是理想的选择,因为我应该能够通过相同的Compose文件在分布式节点上启动相同的容器集。
但是,似乎链接的容器被约束为驻留在同一节点上,因此在多个节点上设置Docker Swarm不会导致我要寻找的容器分发。
大使模式似乎是分离链接容器的推荐方法(通过在每个节点上为链接容器设置代理),但是我在docker-compose文件中使用它遇到了麻烦,因为我看到的示例显示了设置使用docker run设置每个节点,然后使用运行共享服务的节点的IP(在我的情况下为RMQ)设置环境变量,以告知客户端的大使容器将链接服务的数据路由到何处(如https:// docs.docker.com/engine/admin/ambassador_pattern_linking/)。如何将其转换为Compose文件,这样我就不需要知道服务将在其上运行的IP(因为Docker Swarm将在Compose文件完成后决定这一点)?