在不同的端口上部署管理界面

时间:2012-01-14 01:44:15

标签: django apache deployment virtualhost

是否可以在django / apache中以一种方式部署django应用程序的部分,而在另一种方式中部署部分。例如,假设我有常规用户的界面,请访问www.coolsite.com,但我想访问www.coolsite.com:1234上的管理员视图。这在单个应用程序中是否可行?

此外,是否有可能以不同的方式部署两个不同的django应用程序(假设我想在端口80上安装“web”应用程序,在端口8888上安装“api”应用程序)?

我知道我可以将应用程序移动到不同的项目但除非必须(他们共享设置和模型),否则我不会拆分它们

谢谢,

3 个答案:

答案 0 :(得分:1)

这个回答了你的问题。

大多数时候我使用3服务器设置 - 开发,升级,生产 - 但有时我必须在生产目录中进行调试(尽管我真的很讨厌这样做)。当我这样做时,我经常在8000(或其他)运行Django dev服务器并连接到它。

我有一堆调试内容,只有在端口位于8000..8002时才打印出来。从技术上讲,我正在运行一个完全不同的服务器,但它使用所有相同的设置/数据库/代码作为生产。我只需在settings.py中设置一个DEBUG_PRINT值来测试相应的端口范围。

这听起来是否符合您的需求?

<强>更新

settings.py中,您可以拥有以下内容:

ALLOW_ADMIN = '800' in HOST_PORT

然后在urls.py你可以这样做:

if settings.ALLOW_ADMIN:
    urlpatterns += patterns((r'^admin/', include(admin.site.urls)))
else:
    urlpatterns += patterns((r'^admin/.*', 'views.no_admin'))

然后你可以在views.no_admin中大吼大叫,或者给他们一个指向其他服务器的链接。

答案 1 :(得分:0)

我能想到的一个简单方法就是多个项目的想法。如果您的代码在源版本控制系统中(为什么不在?),那么您可以轻松地创建相同分支或标记的单独拉取,并以不同的方式为每个提供服务,即一个通过端口80,一个通过端口8000,一个完全不同的域名等。

你唯一需要做的就是创建特定于pull的urls.py(这意味着你会在你的源版本控制系统中忽略它)或者找到一种方法来使用类似local_urls.py的东西(我自己从未尝试过) 。在每个版本中,您可以打开/关闭您在该特定环境中执行或不需要的URL模板。只想要端口8000上的管理员?只将该urlpattern放在端口8000中提供的pull中。

答案 2 :(得分:0)

这是另一种不需要多个流程/项目的方法。添加如下的中间件组件:

class ProtectAdminMiddleware(object):
    def process_request(self, request):
        if request.path.startswith("/admin") and request.META["SERVER_PORT"] != "1234":
            raise Http404