Django上的多个站点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django上的多个站点相关的知识,希望对你有一定的参考价值。

我正在尝试运行大量共享约90%代码的网站。它们只是用于查询API并返回结果。他们将拥有一个通用的用户群/数据库,但配置略有不同,并且将具有不同的CSS(甚至可能是不同的模板)。

我的初衷是将它们作为具有公共库的单独应用程序运行,但我已经阅读了有关它们可以从单个django实例运行的站点框架,这可能有助于减少内存使用。

https://docs.djangoproject.com/en/dev/ref/contrib/sites/

我的问题是,站点框架是否是解决此类问题的正确方法,并且它在运行单独的应用程序方面具有真正的好处。最初我以为是,但不是我想的。我听说过以下内容:

您的SITE_ID在settings.py中设置,因此为了拥有多个站点,您需要多个settings.py配置,这意味着多个不同的进程/实例。您当然可以在它们之间共享代码库,但每个站点都需要一个专用的worker / WSGIDaemon来为该站点提供服务。

如果每个站点都需要运行UWSGI实例,这有效地消除了在一个引擎盖下运行多个站点的任何好处。

系统的其他想法:

我不知道采取什么途径。

答案

恕我直言,它归结为可能的变化程度,影响是什么,以及它发生的可能性。例如:

他们将拥有一个通用的用户群/数据库

你是说同一个人使用所有的网站?如果是这样,那么风险概况将不如不同的人(比如说不同的组织)那么严重。基本上(通过良好的适当架构)你想要解耦事物,这样当一件事发生变化时,它就不会对其他一切产生巨大的影响。

如果您运行相同的实例,则可以轻松地立即更新每个站点(比如说您需要在基本系统上执行维护补丁),但另一方面可能会让您感到困惑(一组用户很高兴能够改变但其他人不是 - 因为功能改变或应用补丁所需的停机时间(例如)。

在不同的实例中运行相同的代码库是一个更大的维护开销,但消除了与管理更改相关的大量风险;然后,对话将成为如何最有效地维护同一事物的许多实例之一,而不是映射每次进行更改时相关的风险。

另一答案

实际上,您可以在同一个WSGI实例下运行这两个(或更多)站点。根据你的Django版本和你需要的功能,有一些缺点(比如使用threadlocals),但所有这两个解决方案都能很好地工作。

Django 1.8+:https://bitbucket.org/levit_scs/airavata

Django <:1.7:https://bitbucket.org/uysrc/django-dynamicsites/overview(但根据你的Django版本,它可能需要一些摆弄)

与Django站点框架相比,这两个应用程序添加的内容是能够根据域名轻松地在同一实例上提供站点。

以上是关于Django上的多个站点的主要内容,如果未能解决你的问题,请参考以下文章

celery django 守护进程上的多个工作人员和多个队列

Django 中的多个站点

通过 Gunicorn/Nginx 使用 Django 的站点框架运行多个站点

如何在由“站点”框架提供支持的多个 Django 站点中获取唯一用户?

一个 Django 实例下的多个站点 - 站点有时会提供错误的内容

如何为站点框架 django 设置多个 settings.py?