2012-02-24 22 views
5

Proje nasıl dağıtılmalı ve çalıştırılmalıdır. Bu alanda birçok araç var. Hangi kullanılmalı ve neden?aws'da bir django projesi çalıştırmanın en iyi yolu nedir?

  • Danışman
  • Gunocorn
  • Ngnix
  • Kumaş
  • Oy
  • Pip
  • virtualenv
  • Yük dengeleyici
+0

ancak AWS bir Django proje dağıtmak ve bu tartışmanın en atlamak için Heroku kullanmayı düşünebilirsiniz. –

cevap

11

Yapılandırmanıza bağlı. Rackspace üzerindeki ortamımız için aşağıdaki yığını kullanıyoruz, ancak aynı şeyi AWS'de EC2 örnekleriyle kurabilirsiniz.

  • Ubuntu 11.04
  • Vernik diski önlemek için (önbellek içinde) sunucusu statik içerik sunucusu dinamik içeriğe
  • Apache (MOD-WSGI)
  • Python 2.7.2 ile karşı
  • Nginx istiyor bizim sürekli için Django
  • Jenkins sürüm kontrolü
  • Kumaş f için
  • GIT kurar veya dağıtım.

Çalışma şekli, bir GIT kök deposuna itme işleminin Jenkins tarafından sorgulanmasıdır. Jenkins, değişiklikleri kökenden aşağı çeker. Bir Python Yumurtası oluşturur, Birim testleri çalıştırır, bu yumurtayı gereken ortamlara yerleştirmek için Kumaş'ı kullanır ve çatallı Apache işlemlerinin yeni Python yumurtasını topladığından emin olmak için Apache yapılandırmasını yeniden yükler.

Bu yardımcı olur umarım.

+0

Nice stack Michael, proje kaynak kodunuzda Nginx yapılandırmanız var mı? Python projenizin akışını yönetme ve iş parçacığı sayısı. Supervisor ve Gunocorn'un burada yardımcı olabileceğine inanıyorum. –

+1

İlgilenmiyorum, sadece Nginx fronting uWSGI yerine Apache + ModWSGI ve Nginx kullanmanın sebebi nedir? Ayrıca, statik içerik için, neden ec2 birimleri s3 üzerinde barınmak yerine onu değiştiriyor? Performans etkisi var mı? – jvc26

+2

Harika puan. Apache/ModWSGI ile başladık, daha sonra mix'i NginXinto'ya ekledik, öngörülebilirlik nedeniyle PROD ortamlarımızda Apache'yi tutmak istedik. S3 tamamen harika. Eşyalarımızın çoğunu Cloudfiles'da (S3 eşdeğeri) aldık. Ancak, bizim için çok sık değişen statik dosyalar var ve CloudFiles, <20 dakika CDN'de bir önbellek TTL ayarlamanıza izin vermez. – Michael

3

Michael Klockel zaten belirtilmiş senin yapılandırmasına bağlıdır, ben var:

  • Ubuntu 10,04 LTS
  • Nginx
  • Uwsgi
  • git sürüm kontrol
  • piton Virtualenv ve pip

Dağıtım ayarlarını ona kontrol edebilirsiniz. e: Django, Virtualenv, nginx + uwsgi import module wsgi error

ve ben nginx kullanmak ve burada uwsgi neden: Ayrıca ben app konuşlandırılması için kumaş kullanın ve sql sorgu ve kuzgun için yalnız http://ericholscher.com/blog/2010/nov/8/building-django-app-server-chef/

johny önbelleği şef http://nichol.as/benchmark-of-python-web-servers

ve App devam eden bir günlüğü tutmak için nöbetçi.

2

uWSGI+NginxuWSGI+Nginx bir performans perspektifinden (karşılaştırma başka bir yanıtta zaten bağlantılandırıldığını düşünüyorum), pip ve virtualenv'u dağıtım için kullanırım, bu şeyler kendi kendine yeten tutar ve kumaş veya benzeri kullanarak temiz dağıtımı kolaylaştırır. Sürüm kontrolü için git'i kullanın. Jenkins sürekli entegrasyonu halledebilir. Dengelemek için AWS load balancer (ELB)'u EC2 örneklerinin önünde kullanırdım - iş bu konuda çok fazla endişelenmenize gerek yok mu? Statik dosyalarınızı s3'e yüklemek için django-storages, bu da statik dosyaları dağıtmak için başka bir sunucuya sahip olmanızı sağlar.

Ancak, yönetici giderler biraz bağlıdır. Dağıtım ve ölçekleme için temiz ve basit bir şey arıyorsanız, tüm AWS EC2 yığınını kazın, bir ön uç olarak Heroku ve statik dosyalarınız için s3 kullanırdım. Bu, kutuların bakımını yapan tüm yönetici zamanlarını kaydeder ve devine konsantre olmanızı sağlar.

Konu dışı
İlgili konular