簡體   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