Wagtail 多站点与 Apache 虚拟主机
Posted
技术标签:
【中文标题】Wagtail 多站点与 Apache 虚拟主机【英文标题】:Wagtail Multi-sites vs Apache Virtual Hosts 【发布时间】:2020-11-18 11:01:38 【问题描述】:我去过这个网站无数次,但从未注册过帐户。 我正在做我的第一个大项目,所以,第一个问题:
我打算制作一些网站,这些网站将共享来自托管服务提供商 (DO) 的同一个 Droplet 实例。
Wagtail 在单个代码库上提供多个站点。它使您可以管理所有站点 来自单个仪表板。
Apache 允许您创建多个域/单个网站 - 称为“虚拟主机” - 并将用户定向到所请求网站所在的特定目录。
我正在处理的网站将在一定程度上共享一个数据库(其中一个网站将充当其他一些网站的结帐页面,例如,通过 api/jason 检索购物车内容的地方(我还不知道))
Wagtail 似乎是最佳选择,但我想确保不需要 Apache 不管我如何解决这个问题(例如:如果 DO 要求 apache 能够为我的网站提供服务,而不是直接从 django* 提供服务)
*我的意思是在单个 Apache2 实例中。
星期五
【问题讨论】:
你基本上想设置它,以便 apache 匹配任何子域,然后一旦请求到达应用程序,django 中的站点框架应该处理事情。看看这个答案; ***.com/a/758383/1199464 我想我知道你的意思,我会试试看。谢谢。 @markwalker 成功了! 网站框架很不错吧!! 【参考方案1】:解决方案本质上是让您的 Web 服务器 apache 或 nginx 将来自任何子域的所有请求传递到您的 django 应用程序。
以this answer 为例,apache 配置可能如下所示;
<VirtualHost *:80>
DocumentRoot /var/www/app1
ServerName app1.example.com
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /var/www/example
ServerName example.com
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /var/www/wildcard
ServerName other.example.com
ServerAlias *.example.com
</VirtualHost>
一旦您将请求发送到您的 django 应用程序,sites framework 可以将请求转换为您的应用程序配置为该子域执行的操作。
Django 的Site
对象定义了一个名称和一个域,例如,框架将使用请求对象从数据库中获取该名称和域;
from django.contrib.sites.shortcuts import get_current_site
def my_view(request):
current_site = get_current_site(request)
if current_site.domain == 'foo.com':
# Do something
pass
else:
# Do something else.
pass
您可以使用ForeignKey
或ManyToMany
关系将您的数据库模型链接到Site
,具体取决于适合模型的内容。
通常使用多站点方法,每个站点都有一个设置文件,其中包括一个明确的设置,供SITE_ID
链接到数据库中的站点。
不过……
有一个名为 django-multisite
的 django 应用程序,我最近将它用于创建它自己的 Site
对象的类似应用程序。这允许您通过有效地创建动态SITE_ID
来使用单个设置文件。我更喜欢这种方法,尽管我在从空数据库迁移时发现了一个错误,因为应用程序查询 Site
表,该表显然不存在。
在这一点上,我已经提出了issue & 固定在一个分叉中,但包作者没有回应。
【讨论】:
我以前从未部署过,所以我只是想到了 apache2,但我实际上使用的是 nginx。不过,整个答案很有帮助,所以谢谢。我正在阅读serverlab.ca/tutorials/linux/web-servers-linux/… @tvesday 不错的选择。我认为我在迁移到 nginx 后不会再回到 apache 了? 我需要添加诸如 /var/www/specificdomain.com 之类的文件还是让 gunicorn 通过 /var/www/html 直接从项目文件处理请求,因为它将服务于主项目( django)通过符号链接(站点可用/站点启用)?以上是关于Wagtail 多站点与 Apache 虚拟主机的主要内容,如果未能解决你的问题,请参考以下文章