[英]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
(其中一些網站有不同的語言,可以說)。
要記住的事情:
DJANGO_SETTINGS_MODULE
在 Nginx 和 uwsgi 配置文件中都有指定。 有沒有辦法避免這種重復?到目前為止的考慮:
LANGUAGES
、 LANGUAGE_CODE
等)存儲在數據庫中,並針對每個請求進行動態修改。 這個想法被拒絕了,因為它顯然很糟糕。如果您使用的是皇帝模式並且您的 uWSGI 配置僅在套接字和DJANGO_SETTINGS_MODULE
有所不同,請考慮對所有站點使用一個配置文件。 您將基本上通過在 uWSGI 皇帝目錄中創建符號鏈接來啟動新站點,並且該配置中的特殊變量將基於符號鏈接名稱構造套接字名稱和DJANGO_SETTINGS_MODULE
變量。
如果您只擔心可以根據請求確定的 urlpatterns、語言和其他值,您可以使用django-hosts
而不是內置的站點模塊。 這也將允許您在一個工作人員池上為多個站點提供服務。 您還可以為此創建一些中間件。
請注意,您還可以使用環境變量(可以在 uWSGI 配置文件中設置)來設置一些設置。 只需在您的設置文件中使用os.environ
來提取它們。
最后但並非最不重要的 - 設置文件可以根據其他一些變量在 wsgi.py 文件中動態設置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.