繁体   English   中英

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

[英]How to deploy multiple Django sites with DRY configuration?

目前我正在部署 30 多个由单个应用程序操作的网站,这些应用程序是用 Django 编写的。 这些站点被组合成更小的组。 例如,有一个欧洲组,其中包括德国、法国、瑞士等网站,这些组是 7。

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

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

  • project.settings.general_settings
  • project.settings.<group_name>

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

要记住的事情:

  • 您维护所有这些约 30 个不同的网站设置的策略是什么? 他们也应该导入组设置。
  • 目前DJANGO_SETTINGS_MODULE在 Nginx 和 uwsgi 配置文件中都有指定。 有没有办法避免这种重复?
  • 有没有办法减少 uwsgi 应用程序的数量(也许 uwsgi 只有 7 个 uwsgi 组,并且仅从 nginx 指定设置模块)?
  • 奖励:除了生产环境外,还有一个临时环境。 避免重复的最佳方法是什么?

到目前为止的考虑:

  • 将一些网站设置( LANGUAGESLANGUAGE_CODE等)存储在数据库中,并针对每个请求进行动态修改。 这个想法被拒绝了,因为它显然很糟糕
  • 在虚拟主机模式下使用 uwsgi。 它只允许有 7 个 uwsgi 应用程序,并从 Nginx 指定不同的设置。 拒绝:不安全、不可靠、扩展问题

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM