如何使用通用 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 个域/站点的主要内容,如果未能解决你的问题,请参考以下文章