2012-02-24 113 views
5

該項目應該如何部署和運行。這個空間有很多工具。應該使用哪個,爲什麼?在aws上運行django項目的最佳方式是什麼?

  • 主管
  • Gunocorn
  • Ngnix
  • 面料
  • 博託
  • 皮普
  • VIRTUALENV
  • 負載均衡
+0

題外話題,但您可以考慮使用Heroku將一個Django項目部署到AWS,並跳過本次辯論的大部分內容。 – 2012-02-28 02:27:35

回答

11

這取決於你的配置。我們在Rackspace上爲我們的環境使用以下堆棧,但您可以在AWS上使用EC2實例設置相同的內容。

  • 的Ubuntu 11.04
  • 光油(在內存中緩存),以避免磁盤尋道
  • 的Nginx服務器的靜態內容
  • 的Apache服務器的動態內容(MOD-WSGI)
  • 的Python 2.7.2與Django的
  • 詹金斯爲我們的持續構建
  • GIT版本控制
  • 織物F或部署。

所以它的工作方式是由詹金斯輪詢GIT推送到原始庫。詹金斯然後從原點拉下變化。構建一個Python Egg,運行單元測試,使用Fabric將這個egg部署到必要的環境中,並重新加載Apache配置,以確保分叉的Apache進程正在拾取新的Python蛋。

希望這會有所幫助。

+0

尼斯堆棧邁克爾你有你的Nginx配置在你的項目源代碼?什麼是管理你的python項目的運行和線程的數量。我相信主管和Gunocorn可以在這裏幫忙。 – 2012-02-24 10:12:29

+1

出於興趣,使用Apache + ModWSGI和Nginx的原因是什麼,而不僅僅是面向uWSGI的Nginx?另外,對於靜態內容,ec2單元爲什麼要移動而不是僅僅在s3上託管?是否有性能影響? – jvc26 2012-02-27 21:31:22

+2

偉大的一點。我們從Apache/ModWSGI開始,然後將NginX添加到混合中,出於可預測性原因,我們希望將Apache保留在我們的PROD環境中。 S3真棒,完全。我們在Cloudfiles(S3等價物)上獲得了大部分內容。但是有些靜態文件對我們而言經常發生變化,CloudFiles不允許您在<20分鐘的CDN上設置緩存TTL。 – Michael 2012-02-27 23:20:11

3

正如邁克爾Klockel已經陳述取決於你的配置,我有:

  • 的Ubuntu 10.04 LTS
  • Nginx的
  • Uwsgi
  • Git版本控制
  • 蟒蛇的virtualenv和PIP

您可以檢查她的部署設置E: Django, Virtualenv, nginx + uwsgi import module wsgi error

,爲什麼我使用nginx的和uwsgi這裏: http://nichol.as/benchmark-of-python-web-servers

而且我用的面料爲應用程序的部署和廚師獨奏http://ericholscher.com/blog/2010/nov/8/building-django-app-server-chef/

約翰尼拉緩存SQL查詢和烏鴉和哨兵記下應用程序正在發生的事件。

2

從性能的角度來看,我會使用uWSGI+Nginx(我認爲比較已經在另一個答案中鏈接了),pip和virtualenv用於部署,因爲這樣可以保持獨立性,並且便於使用結構或類似工具進行乾淨部署。使用git進行版本控制。 Jenkins可以處理持續集成。我會在您的EC2實例前使用AWS load balancer (ELB)來實現平衡 - 做這項工作時不必擔心太多。 django-storages用於將您的靜態文件上傳到s3,這可以節省您讓另一臺服務器分發靜態文件的工作量。

但是,這取決於您的管理開銷。如果您正在尋找乾淨且簡單的部署和擴展方法,那麼我會廢棄整個AWS EC2堆棧,使用Heroku作爲前端,使用s3作爲您的靜態文件。這可以節省維護盒子的所有管理時間,並讓您專注於開發。

相關問題