如何使用通用 Django 代码库托管 50 个域/站点

Posted

技术标签:

【中文标题】如何使用通用 Django 代码库托管 50 个域/站点【英文标题】:How to host 50 domains/sites with common Django code base 【发布时间】:2011-02-08 23:28:23 【问题描述】:

我有 50 个不同的网站,它们使用相同的布局和代码库,但大多是不重叠的数据(区域支持网站,而不是链接农场)。有没有办法一次安装代码并同时运行所有 50 个代码?

当我有要修复的错误(或部署新功能)时,我想部署 ONE time + 1 restart 并完成它。

还有:

代码需要知道请求来自哪个域,以便显示适当的数据。

【问题讨论】:

【参考方案1】:

想到了Sites framework。

除此之外,我们通过将 Django 符号链接到各种 docroot 来为多个站点运行 Django。也可以像魅力一样工作。

【讨论】:

在前端使用 Apache? FastCGI 还是什么?有多少线程?【参考方案2】:

我可以看到两种截然不同的方法:

    使用一个数据库和站点框架。每个帖子/图片/任何模型都连接到一个站点,并且您始终在站点上进行过滤。这需要每个数据库都有一个单独的设置文件。 为每个站点使用一个数据库。这允许每个站点使用不同的用户,但需要复制存储在数据库中的所有内容。它还需要一个指向正确数据库的单独设置文件。

无论哪种方式,您都不会复制任何代码,只会复制数据。

--

如果您需要对 ie 进行特定于站点或特定于后期的更改。一个模板,你应该阅读 Django 如何加载模板。它允许您指定一个列表,即 ["story_%d.html", "story_site_%d.html", "story.html"] 并且 django 将按此顺序查找模板。

【讨论】:

【参考方案3】:

我刚刚遇到这个问题并最终使用了一个自定义中间件类:

    获取 HTTP_HOST 清理 HTTP_HOST(删除 www、端口等) 在与每个帐户相关联的网站表中查找域。 在 HTTPRequest 对象上设置帐户实例。

在我的整个视图代码中,我会根据存储在 HTTPRequest 对象中的帐户进行查找。

希望将来能对某人有所帮助。

【讨论】:

谢谢。我正在做类似的事情,只是使用缓存层来减少对数据库的访问。但是,如果缓存层被设置为使用数据库,最好直接发出请求,就像你正在做的那样。

以上是关于如何使用通用 Django 代码库托管 50 个域/站点的主要内容,如果未能解决你的问题,请参考以下文章

PyCharm 使用Github托管Django项目

如何在不影响实时功能的情况下为 React 和 React-native 托管通用的 Firebase 后端代码?

在一个网站上使用 2 个域

通用代码完成库/工具

将图像结构从本机代码导出到托管

IIS托管WCF服务:集成测试和代码覆盖