目前,我正在部署30多个由Django编写的单一应用程序运营的网站。这些网站组合成较小的组。例如,有一个欧洲集团,其中包括德国,法国,瑞士等网站。这些集团是7个。
对于部署uwsgi(在Emperior模式下运行),使用nginx(uwsgi传递给组套接字)和supervisord(用于任务工作者)。应用程序正在为所有网站使用单个数据库。
项目中设置文件的结构目前如下:
project.settings.general_settings
project.settings.<group_name>
到目前为止,我认为仅仅拥有7个uwsgi和7个nginx配置文件(对于每个组)就足够了,直到我意识到某些网站还需要自定义Django设置,并且单独DJANGO_SETTINGS_MODULE
将必须为每个网站定义(其中一些网站可以说不同的语言)。
要记住的事情:
DJANGO_SETTINGS_MODULE
。有没有办法避免这种重复?到目前为止所考虑的内容:
LANGUAGES
,LANGUAGE_CODE
等)存储在数据库中,并针对每个请求进行动态修改。这个想法被拒绝了as it obviously sucks。答案 0 :(得分:1)
如果您使用的是emperor模式,并且您的uWSGI配置仅在套接字和DJANGO_SETTINGS_MODULE
中有所不同,请考虑为所有网站使用一个配置文件。您将基本上通过在uWSGI emperor目录中创建符号链接来启动新站点,该配置中的特殊变量将根据符号链接名称构造套接字名称和DJANGO_SETTINGS_MODULE
变量。
如果您只担心可以根据要求确定的urlpatterns,语言和其他值,则可以使用django-hosts
而不是内置站点模块。这也将允许您在一个工作池上提供多个站点。您还可以为此创建一些中间件。
请注意,您还可以使用环境变量(可以在uWSGI配置文件中设置)来设置一些设置。只需在设置文件中使用os.environ
即可解压缩。
最后,但并非最不重要 - 可以根据其他一些变量在wsgi.py文件中动态设置设置文件。