动态服务django码头工人集装箱

时间:2015-10-24 17:15:02

标签: python django nginx proxy docker

我正在创建一个服务,根据需要生成django容器,以便用户在线测试后端功能。

我想让主域上的用户可以使用衍生的实例:

示例:用户生成公开端口userapp的容器8000,它应该可以在我的域中以mydomain.net/userapp/

访问

我不知道预先运行的实例数量或名称。

found a nginx-proxy容器在这里为nginx动态创建配置,以便将容器提供给子域:

  

$ docker run -e VIRTUAL_HOST = userapp.mydomain.com ...

我想在路径上访问它。如何使用nginx或django创建动态代理路径?

1 个答案:

答案 0 :(得分:1)

我用django-http-proxy来解决这个问题。

我可以继承HttpProxy并创建DynProxyView

<强> views.py

from httpproxy.views import HttpProxy

class DynProxyView(HttpProxy):
    def get_object(self):
        return Fiddle.objects.get(pk=self.kwargs['pk'])
    rewrite = True
    @property
    def base_url(self):
        url= self.request.scheme+"://localhost:" + str(self.get_object().port)
        print url
        return url
    def get_full_url(self, url):
        result = super(DynProxyView, self).get_full_url(url)
        return result[:-1] # To get rid of a pesky redundant slash

<强> urls.py

...
url(r'^(?P<pk>[-\w]+)/result/(?P<url>.*)$', DynProxyView.as_view(),name='result'),
...

<强> models.py

class Fiddle(models.Model):
    name = models.CharField(max_length=20, unique=True)
    hash = models.CharField(max_length=32, null=True, blank=True)
    port = models.IntegerField(null=True, blank=True)

这样我就能获得理想的效果。