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

您可以使用ForeignKeyManyToMany 关系将您的数据库模型链接到Site,具体取决于适合模型的内容。

Associating content with multiple sites Associating content with a single 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 虚拟主机的主要内容,如果未能解决你的问题,请参考以下文章

进行Apache 多站点虚拟主机配置的步骤

多站点虚拟主机配置

Apache多站点的配置

apche2.4多站点虚拟主机设置

Apache虚拟目录和多端口多主机名配置

window apache 多站点配置