2013-11-26 314 views
16

首先請讓我清楚,我是一個Windows用戶,對於網絡世界來說很新。在過去的幾個月中,我一直在學習python和django,這對我來說是一次很棒的體驗。現在我以某種方式創建了一個我想要在生產服務器上部署的小型項目。由於django有其內置的開發服務器,所以對我來說沒有任何問題。但現在我必須將它部署到生產服務器上,我搜索了一下,發現Nginx + uWSGI或Nginx + Gunicorn是它的最佳選擇。由於uWSGI和Gunicord與Windows不兼容,我認爲我應該適應Ubuntu或其他Unix系統。在生產服務器上部署django

所以我的問題是:

  1. 只是要清楚,因爲我將與上述任何一種工作,爲什麼我需要兩臺服務器,請給我解釋一下?
  2. 如果我必須調整Ubuntu環境,是否必須學習Ubuntu shell腳本,SSH和其他內容?或者託管服務提供商會幫我做到這一點?
  3. 請讓我知道我還需要什麼以上有關。

非常感謝你的時間,請原諒,如果我的問題是一個蹩腳的問題。希望得到積極迴應的答案。謝謝!

+0

你不必使用兩臺服務器,你可以在一臺服務器上設置的Nginx + uWSGI +的Apache2,只是配置良好的一切共同努力,Nginx的和gunicorn幾乎同樣的事情,你只需要使用一個其中。我使用Ubuntu和它的美好,SSH與Ubuntu的整合,你不學大的事情對於 – drabo2005

+0

@ drabo2005我解釋的問題作爲兩個服務器進程,而不是兩個單獨的機器;我同意沒有迫切需要使用兩臺獨立的機器來服務nginx +其他的東西。我不同意nginx和gunicorn是相同的東西,甚至是同一類軟件。 nginx是一個反向代理和靜態服務器,gunicorn是一個專用的wsgi應用程序Web服務器。 –

+0

感謝您的解釋。 –

回答

14
  1. 的典型配置包括兩個服務器進程(可以一起在相同的實際的硬件或虛擬服務器上運行),以便在前面所述代理服務器可緩衝慢客戶端。例如:一個慢速客戶端會通過請求連接到nginx。 Nginx將把請求傳遞給Gunicorn,Gunicorn將作出迴應。然後Nginx立即消耗Gunicorn響應,立即釋放Gunicorn資源。在這一點上,慢速客戶端可以花費盡可能多的時間,因爲它希望消耗Nginx的響應,而不佔用多少服務器資源。雙服務器進程模型的替代方案是使用Gunicorn的異步工作人員,並將Gunicorn本身放在前面,或使用異步同步組合,如Waitress。不過,前面的Nginx具有雙倍的即用型靜態服務器的優勢。

    請注意,「慢速客戶端」可以描述:丟失其連接並使TCP套接字掛起直到超時請求中止的手機;手機只是很慢;所有類型的不可靠連接;有意嘗試使用服務器資源的惡意拒絕服務客戶;有時候會出現任何原因造成打嗝或故障的舊連接。所以這是一個會影響幾乎任何網站的問題。

  2. 本身不需要shell腳本,但習慣Ubuntu需要一些時間。即使在腳本之外,還有很多東西需要學習,比如如何使用軟件包管理器,如何配置軟件包,以便不會影響未來的更新等等。而且您一定要學會使用SSH ;它是* nix世界中最基本的服務器管理工​​具之一。

    學習使用Ubuntu或其他服務器平臺的另一種方法是使用像Heroku這樣的平臺即服務選項,因爲PaaS託管提供商真的會爲您處理所有這些問題。我推薦這種方法。儘管我認爲PaaS對於那些希望專注於開發而不是服務器管理的人來說是一個很好的選擇,但不管他們的技術水平如何,對於Linux服務器平臺的一些經驗也有很長的路要走幫助你理解你的代碼所運行的環境。所以,即使你使用PaaS,你仍然可以從一點點(或者很多)修補Ubuntu中獲益。

    從PaaS的另一個好處是,通常他們的基礎設施處理的交易(通過代理慢請求的緩衝)的Nginx的一部分。比如,Heroku就是這種情況。所以你不必擔心基礎設施的那部分。

  3. 問題的這部分太寬而不能回答,但讓我在評論中知道,如果你需要澄清。

+0

感謝您的詳細解釋。與這兩個人真的很混淆。現在我想我會採用vps和ssh使用putty。還有一件事,我如何對已部署的文件進行更改?我聽說過布料,但很難掌握它背後的邏輯。你能解釋一下怎麼做?再次感謝。 –

+0

@Benjamin最終,您只需要在服務器上獲取更新的程序文件並重新啓動Web服務器進程(或者重新加載代碼)。織物是一種使這更容易的工具,所以如果它比你需要的更復雜,就不要使用它。通過膩子scp或sftp是好的。像使用git從源代碼庫直接從服務器下載的任何其他方法也是公平的遊戲。 –

+0

好的,我也會研究git。再次感謝! –

2

我做almoast像在本教程:http://michal.karzynski.pl/blog/2013/06/09/django-nginx-gunicorn-virtualenv-supervisor/
Nginx的是我的代理Django應用程序上gunicorn和其服務靜,virtualenv中我的蟒蛇環境,監事運行看我的應用程序的運行。
這是可能的,你會在一些錯誤的運行,如果不使用PostgreSQL,問我就去幫助(在過去使用的MySQL現在是PostgreSQL系統)

+0

謝謝你的回答。但是我對如何在開發和生產之間感到困惑。但上面的鏈接是肯定的幫助謝謝你! –

+1

該鏈接非常棒! – yeaske

1

首先,有沒有必要,如果你使用Windows快樂使用Ubuntu。我不知道nginx是否可以在Windows上運行,但如果沒有,我會非常驚訝(事實上,here是在Windows上安裝的nginx文檔)。與此同時,Apache確實在Windows上工作。 Django文檔有a full explanation關於如何設置Apache/mod_wsgi來爲Django提供服務。

你並不需要兩臺服務器。我不確定爲什麼你認爲你這麼做:通常的原因是將靜態資產放在一個單獨的服務器上,但是你沒有提到這是一個原因。既然你只是在談論一個小型網站,但你甚至不需要那樣做。配置爲同時服務Django和靜態資產的一臺服務器將會很好。文件再一次解釋瞭如何做到這一點。

+0

謝謝你的回答。當我搜索周圍時,發現uWSGI/Gunicorn和nginx是最佳實踐。所以,我想到了實施這兩個問題,並在這裏提出了問題。 –

相關問題