【发布时间】:2016-04-26 16:01:06
【问题描述】:
目前我正在部署 30 多个网站,这些网站由一个用 Django 编写的应用程序操作。这些站点被组合成更小的组。例如,有一个欧洲组,其中包括网站德国、法国、瑞士等。这些组是 7 个。
部署uwsgi(以Emperior模式运行),使用nginx(uwsgi传递给组socket)和supervisord(用于任务工作者)。应用程序正在为所有网站使用一个数据库。
目前项目中设置文件的结构如下:
project.settings.general_settingsproject.settings.<group_name>
到目前为止,我认为简单地拥有 7 个 uwsgi 和 7 个 nginx 配置文件(每个组)就足够了,直到我意识到一些网站还需要自定义 Django 设置,并且单独的 DJANGO_SETTINGS_MODULE 将不得不为每个网站定义(其中一些网站有不同的语言)。
注意事项:
- 维护所有这大约 30 种不同的网站设置的策略是什么?他们也应该导入组设置。
- 目前在 Nginx 和 uwsgi 配置文件中都指定了
DJANGO_SETTINGS_MODULE。有没有办法避免这种重复? - 有没有办法减少 uwsgi 应用程序的数量(也许 uwsgi 只有 7 个 uwsgi 组,并且只从 nginx 指定设置模块)?
- 奖励:除了生产环境之外,还有一个暂存环境。在那里避免重复的最佳方法是什么?
目前的考虑:
- 将一些网站设置(
LANGUAGES、LANGUAGE_CODE等)存储在数据库中,并针对每个请求进行动态修改。这个想法被拒绝了,as it obviously sucks。 - 让 uwsgi 处于虚拟主机模式。它只允许有 7 个 uwsgi 应用程序,并从 Nginx 指定不同的设置。拒绝:insecure, unreliable, scaling issues。
【问题讨论】:
-
你不需要在 nginx 配置中指定
DJANGO_SETTINGS_MODULE。请显示你的 nginx 和 uwsgi 配置文件,因为你在这里做错了。 -
Nginx 配置:pastebin.com/1xC79Uir uWSGI 配置:pastebin.com/8S4hmZz1
-
你可以安全地从 nginx 配置中删除它——它不会改变任何东西。