如何使用 DRY 配置部署多个 Django 站点?

How to deploy multiple Django sites with DRY configuration?

目前我正在部署 30 多个网站,这些网站由单个应用程序运行,用 Django 编写。这些站点被组合成更小的组。比如有一个组Europe,包括德国、法国、瑞士等网站,这些组是7.

为了部署 uwsgi(在 Emperio 模式下运行),使用了 nginx(uwsgi 传递到组套接字)和 supervisord(用于任务工作者)。应用程序正在为所有网站使用一个数据库。

目前项目中设置文件的结构如下:

到目前为止,我认为只需拥有 7 个 uwsgi 和 7 个 nginx 配置文件(对于每个组)就足够了,直到我意识到一些网站还需要自定义 Django 设置,并且分开 DJANGO_SETTINGS_MODULE 必须为每个网站定义(其中一些网站有不同的语言)。

注意事项:

到目前为止考虑了什么:

如果您使用的是皇帝模式,并且您的 uWSGI 配置仅在套接字和 DJANGO_SETTINGS_MODULE 上有所不同,请考虑对所有站点使用一个配置文件。您将基本上通过在 uWSGI emperor 目录中创建符号链接来启动新站点,并且该配置中的特殊变量将构造套接字名称和基于符号链接名称的 DJANGO_SETTINGS_MODULE 变量。

如果您只担心 urlpatterns、语言和其他可按要求确定的值,您可以使用 django-hosts 而不是内置站点模块。这也将允许您在一个工作人员池中为多个站点提供服务。您还可以为此创建一些中间件。

请注意,您还可以使用环境变量(可以在 uWSGI 配置文件中设置)来设置一些设置。只需在您的设置文件中使用 os.environ 来提取它们。

最后但并非最不重要的一点 - 可以根据其他一些变量在 wsgi.py 文件中动态设置设置文件。