我开始着手一个新的大型项目 - 许多基于城市的网上商店,每个都在一个域的自己的子域上工作,例如citydomain.webshop.com
. 开始时应该有大约 40 个这样的网站同时运行。
Project 的后端业务逻辑和模板样式在每个站点上都是相同的。一些静态文件和数据库数据在所有站点和特定站点(日志、图像、销售项目、订单等)中都是通用的。
我的问题是如何以这样一种方式实现最好的架构,即某个用户在不同的子域上访问相同的 URL 会得到由相同的后端逻辑处理的子域的特定数据。
我假设可能的架构有以下选项:
1) Django 项目实例:所有站点的一个实例或每个站点的多个实例?
就 DRY 原则而言,第一种方式似乎比第二种方式更合乎逻辑。我相信理想情况下应该有一个项目实例,其中包含许多子文件夹,每个站点的特定图像、日志等都有子域名称。
2)数据库:所有站点一个数据库或每个站点多个数据库?
由于相同的 DRY 原则,我也倾向于拥有一个数据库。大量数据将在不同的特定于站点的数据库中重复,并且在它们之间即时切换可能很麻烦(根据文档,数据库路由器似乎是这里的工具)。
只有一个数据库,我是否应该使用将特定于站点的数据存储在各种表中(据我所知,sites framework
使用外键建模)?Site
那么我应该如何根据当前子域更改 SITE_ID 呢?我应该使用:a) 一些自定义中间件还是 b) 一些插件,例如django-subdomains
, django-multisite
, Airavata
?
或者也许根本没有实施的用处sites framework
?
3)设置:将设置存储在settings.py
文件中(主要的一个和许多特定于站点的文件)或将主settings.py
文件与仅存储在数据库中的特定于站点的选项结合起来(可能在Site
表或另一个可以扩展它的表中)?
4)虚拟主机:一个只用于主域或每个站点有多个虚拟主机?第二个选项可以通过许多settings.py
具有自己的 SITE_ID(从一个 main 继承settings.py
)的特定于站点的小型文件来建立,并为每个子域添加许多特定于站点的 WSGI 文件?
请给我一些关于上述项目的最佳实践的建议。对于这些类似“十字路口”的选项,正确的决定应该是什么,你会推荐什么?