将uWSGI快速路由器放在docker容器中运行的uWSGI服务器之前

时间:2014-02-03 01:32:04

标签: uwsgi docker

我有多个基于Flask的webapps在docker容器中运行(它们的进程需要与主机操作系统隔离)。要运行这些应用程序,我在容器中使用uWSGI服务器。传入的请求应该使用订阅服务器命中uWSGI FastRouter(如下所述:http://uwsgi-docs.readthedocs.org/en/latest/SubscriptionServer.html)。启动容器时,uWSGI应根据某些内部配置作为子域宣布自己。

所以设置如下:

Request ---> FastRouter ----> container |     myapp1              |
                        |
                        ----> container |     myapp2              |

我正在尝试在运行快速路由器和一些docker容器的单个主机上测试它。

使用

启动FastRouter
uwsgi  --fastrouter :1717 --fastrouter-subscription-server localhost:2626 --fastrouter-subscription-slot 1000

问题1 我还需要做其他任何事情才能让订阅服务器运行吗?这是与fastrouter流程一起开始的吗?

容器有两个从主机映射到容器的端口:5000(webapp)和2626(订阅快速路由器)。

所以他们就这样开始了:

docker run -d -p 5000:5000 -p 2626:2626 myImage $PATH_TO_START/start.sh

在start.sh中,uWSGI以

开头
uwsgi --http :5000 -M --subscribe-to 127.0.0.1:2626:/test --module server --callable env --enable-threads

输出看起来不错,最后会打印出来:

spawned uWSGI master process (pid: 58)
spawned uWSGI worker 1 (pid: 73, cores: 1)
spawned uWSGI http 1 (pid: 74)
subscribing to 127.0.0.1:2626:/test

我可以在主持人身上

curl localhost:5001

我看到网络服务器从容器内问候我。但是,做

curl localhost:1717 / test

没有回复。

问题2

我在这里遇到什么根本错误吗?我应该测试不同吗?

问题3

如何调试FastRouter?

修改

仍然在努力摆脱这种设置。我现在正在为fastrouter使用单独的VPS。它是使用

开始的
uwsgi --uid fastrouter --master --fastrouter :80 --fastrouter-subscription-server :2626 --daemonize uwsgi.log --pidfile ./uwsgi.pid --chmod-socket --chown-socket fastrouter

警告:在复制上述项目调用之前请先考虑一下,因为它会公开打开订阅服务 - 我的计划是使用uwsgi提供的密钥签名工具来保护它,因为VPS没有有私人网络。

netstat -anp显示

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      843/uwsgi       
udp        0      0 0.0.0.0:2626            0.0.0.0:*                           843/uwsgi       
unix  3      [ ]         STREAM     CONNECTED     9089     843/uwsgi           
unix  3      [ ]         STREAM     CONNECTED     9090     843/uwsgi           
unix  3      [ ]         SEQPACKET  CONNECTED     8764     843/uwsgi           
unix  3      [ ]         SEQPACKET  CONNECTED     8763     843/uwsgi

无论如何,使用带有--http :5000 --module server --callable env --enable-threads --subscribe-to [Subscription-Server-IP-Address]2626:/test --socket-timeout 120 --listen 128 --buffer-size 32768 --honour-stdin的uwsgi节点仍会导致相同的结果 - uwsgi日志'订阅',但http://[Subscription-Server-IP-Address]/test无法访问。这种路由甚至可能吗?我可以找到的每个示例只分配子域名,如[mysub] .example.com,根域或具有某个端口号的根域。此页面包含一个提示,即订阅服务器应该是可路由地址的一部分:http://projects.unbit.it/uwsgi/wiki/Example

所以我有一个后续问题

FastRouter是否意味着让节点宣布尚未在DNS区域文件中静态设置的新路由?我真的不在乎它是http:// [key] .example.com还是http://example.com/[key],重要的是这些密钥可以在Docker容器内部的生成时生成uwsgi服务器。

1 个答案:

答案 0 :(得分:3)

通常,“dockered”应用程序在不同的网络命名空间中运行,因此docker应用程序的环回与fastrouter不同。

使用unix套接字进行订阅,它们是进行命名空间通信的好方法。

你的命令很好,fastrouter非常详细,所以如果你在日志中没有看到消息,它就不能正常工作(最终你可以使用它)