gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 16:40:15 25 4
gpt4 key购买 nike

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

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

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

  • 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 等)存储在数据库中,并针对每个请求进行动态修改。这个想法被拒绝了,as it obviously sucks .
  • 让 uwsgi 处于虚拟主机模式。它将只允许有 7 个 uwsgi 应用程序,并从 Nginx 指定不同的设置。拒绝:insecure, unreliable, scaling issues .

最佳答案

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

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

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

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

关于python - 如何使用 DRY 配置部署多个 Django 站点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36870115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com