2012-02-24 4 views
5

W jaki sposób projekt powinien zostać wdrożony i uruchomiony. W tej przestrzeni jest mnóstwo narzędzi. Które powinny być używane i dlaczego?Jaki jest najlepszy sposób uruchomienia projektu django na aws?

  • Promotor
  • Gunocorn
  • Ngnix
  • Materiał
  • Boto
  • Pip
  • virtualenv
  • równoważenia obciążenia
+0

Poza tematem, ale można rozważyć użycie Heroku do wdrożenia projektu Django do AWS i pominąć większość tej debaty. –

Odpowiedz

11

To zależy od konfiguracji. Używamy poniższego stosu dla naszego środowiska na Rackspace, ale możesz ustawić to samo na AWS z instancjami EC2.

  • Ubuntu 11.04
  • Varnish (w pamięci podręcznej), aby uniknąć dysk ma
  • Nginx do serwera statyczny
  • Apache do serwera zawartości dynamicznej (MOD-WSGI)
  • Python 2.7.2 z Django
  • Jenkins na nasz ciągły buduje
  • GIT dla kontroli wersji
  • Fabric f lub wdrożenie.

Tak więc sposób działania polega na tym, że GIT wypychany do repozytorium pochodzenia jest badany przez Jenkinsa. Jenkins następnie wyciąga zmiany z pochodzenia. Buduje jajko w Pythonie, uruchamia testy jednostkowe, używa Fabric'a do rozmieszczenia tego jaja w odpowiednich środowiskach i ponownie wczytuje konfigurację Apache, aby upewnić się, że rozwidlone procesy Apache zbierają nowe jajko Python.

Mam nadzieję, że to pomoże.

+0

Ładny stos Michael masz konfigurację Nginx w swoim kodzie źródłowym projektu? Co to jest zarządzanie uruchomieniem projektu Pythona i liczba wątków. Wierzę, że Supervisor i Gunocorn mogą tu pomóc. –

+1

W interesie, jaki jest powód używania Apache + ModWSGI i Nginx, a nie tylko Nginxa przed UWSGI? Co się tyczy jednostek statycznych, dlaczego jednostki EC2 przesuwają je zamiast hostowania na s3? Czy ma wpływ na wydajność? – jvc26

+2

Świetny punkt. Zaczęliśmy od Apache/ModWSGI, później dodaliśmy NginXinto do miksu, z powodów związanych z przewidywalnością chcieliśmy zachować Apache w naszych środowiskach PROD. S3 jest niesamowity, całkowicie. Większość naszych rzeczy mamy na Cloudfiles (odpowiednik S3). Ale są statyczne pliki, które bardzo często zmieniają się dla nas, a CloudFiles nie pozwala ustawić buforującego TTL na CDN <20 minut. – Michael

3

Jak Michael Klockel już wspomniano zależy od konfiguracji, mam:

  • Ubuntu 10.04 LTS
  • Nginx
  • Uwsgi
  • kontroli wersji git
  • pyton virtualenv i pip

Możesz sprawdzić jej ustawienia wdrażania e: Django, Virtualenv, nginx + uwsgi import module wsgi error

i dlaczego używać nginx i uwsgi tutaj: http://nichol.as/benchmark-of-python-web-servers

Również używam tkaniny dla wdrażania aplikacji, a kucharz solowy http://ericholscher.com/blog/2010/nov/8/building-django-app-server-chef/

Johny cache dla zapytań SQL i kruka i wartownik, aby zachować dziennik tego, co dzieje się w aplikacji.

2

Użyłbym z perspektywy wydajności (myślę, że porównanie zostało już połączone w innej odpowiedzi), pip i virtualenv dla wdrożenia, ponieważ to utrzymuje rzeczy w stanie zamkniętym i ułatwia czyste wdrażanie przy użyciu tkaniny lub podobne. Użyj git do kontroli wersji. Jenkins może obsługiwać ciągłą integrację. Używałbym AWS load balancer (ELB) przed instancjami EC2 do balansowania - wykonuje to zadanie, nie martwiąc się zbytnio o to. django-storages do przesyłania plików statycznych do s3, co oszczędza wysiłku związanego z przekazywaniem statycznych plików przez inny serwer.

Jednak zależy to trochę od kosztów administracyjnych administratora. Jeśli szukasz czegoś czystego i prostego do wdrożenia i skalowania, zerwałbym cały stos AWS EC2, używałbym Heroku jako przedniego końca i s3 dla twoich statycznych plików. Oszczędza to cały czas administratora utrzymania skrzynek i pozwala skoncentrować się na dev.