2016-10-31 79 views
1

我正在建立一個新的服務器機器,它將託管多個django網站。設置服務器使用django,virtualenv,gunicorn和nginx來託管多個域

我必須指出,我擁有(開發和絕對控制)所有將在服務器上運行的網站。

我相當肯定,網站的所有將使用同一版本:

  • Django的
  • gunicorn
  • nginx的
  • PostgreSQL和psycopg2(全部雖然有些網站會正在使用地理空間和其他擴展)

onl Ÿ件事,我知道Django的應用程序之間會有所不同是:使用

  • Python模塊(這可能對Python版本需要影響)

我可以瞭解使用的virtualenv來管理的,其中一個實例項目有特定的python模塊(甚至是python版本要求),但對我來說(在資源方面),讓每個項目(通過virtualenv)都有單獨的django,nginx,gunicorn等等的安裝似乎很浪費我的問題是這樣的:

它是「可接受的」(在方案如以上概述或認爲是最佳實踐)至全局安裝Django,gunicorn,nginx的,PostgreSQL和psycopg2和簡單地使用的virtualenv只管理部件(例如python模塊/版本)在項目之間有所不同?

注意:在這種情況下,將有一個nginx服務器處理多個域。

最後但並非最不重要的是,是否可以使用virtualenv來管理不同項目中的不同postgreSQL擴展?

回答

1

不,它可能會工作,但這是一個壞主意。

首先,目前還不清楚什麼樣的「資源」你覺得會被浪費。唯一相關的是磁盤空間,我們只討論幾兆字節;甚至不值得考慮。其次,你現在不可能單獨升級它們中的任何一個;對於除了微不足道升級之外的任何事情,您都需要一起測試併發布它們,而不是僅僅根據需要進行自己的部署。

+0

好的,謝謝你的輸入。但是nginx綁定到一個端口,很明顯,在每個virtualenv中安裝nginx是沒有意義的 - 因爲只有nginx的一個實例可以綁定到端口80(或443) - 我在這裏錯過了什麼嗎? –

+0

你不能在virtualenv中安裝nginx。 Virtualenvs適用於Python庫。 nginx在系統級安裝,並代理到這些站點,每個站點都在virtualenv中運行。同樣,Postgres已安裝並全局運行,但每個env都安裝了psycopg。 –

+0

你能否確認我的理解是否正確:[postgresql,nginx,virtualenv] < - 全局安裝,[django,gunicorn,python版本/模型等,pysopg2] < - 安裝在virtualenv中。具體請注意,* gunicorn *是在virtualenv。我很努力地看到這會如何工作(每個應用程序都有它自己的gunicorn實例),然而所有綁定到相同的端口(Apache2舊手在這裏...) –

0

我不認爲這是可取的。

通過這樣做,您正在創建項目之間的依賴關係,這意味着如果沒有其他所有項目,您將永遠無法升級它們。這將是一個龐大的PITA。

最終,它會達到一個點,你永遠不會升級,因爲項目A的依賴項foo不適用於Django 1.N,但項目B的依賴項需要至少1.N - 在這一點上,你回到清潔解決方案無論如何,單獨的環境。

至少適用於django方面,它對Postgres和Nginx可能會稍微好一點。

0

我建議使用docker虛擬化,以便每個項目都有自己的作用域,並且不會干擾其他項目。

我目前在多臺服務器上有這樣的配置,我對它非常滿意,因爲我非常靈活,真正重要的是 - 我很安全,因爲如果任何項目中存在嚴重的錯誤,其他項目仍然安全。

相關問題