2012-02-24 11 views
5

Come deve essere distribuito ed eseguito il progetto. Ci sono molti strumenti in questo spazio. Quale dovrebbe essere usato e perché?Qual è il modo migliore per eseguire un progetto django su aws?

  • garante
  • Gunocorn
  • Ngnix
  • tessuto
  • Boto
  • Pip
  • virtualenv
  • bilanciamento del carico
+0

off-topic, ma si potrebbe considerare l'utilizzo di Heroku per distribuire un progetto Django per AWS e saltare la maggior parte di questo dibattito. –

risposta

11

Dipende dalla tua configurazione. Stiamo utilizzando lo stack seguente per il nostro ambiente su Rackspace, ma puoi configurare la stessa cosa su AWS con istanze EC2.

  • Ubuntu 11.04
  • Varnish (in memoria cache) per evitare disco cerca
  • nginx al server di contenuti statici
  • Apache al contenuto Dynamic Server (MOD-WSGI)
  • Python 2.7.2 con Django
  • Jenkins per il nostro continuo costruisce
  • GIT per il controllo di versione
  • tessuto f o la distribuzione.

Quindi il modo in cui funziona è che una spinta GIT al repository di origine viene interrogata da Jenkins. Jenkins quindi estrae le modifiche dall'origine. Costruisce un Python Egg, esegue i test unitari, usa Fabric per distribuire questo uovo negli ambienti necessari e ricarica la configurazione di Apache per assicurarsi che i processi apache biforcuti stiano raccogliendo il nuovo uovo Python.

Spero che questo aiuti.

+0

Bel stack Michael hai la tua configurazione Nginx nel codice sorgente del tuo progetto? Che cosa sta gestendo l'esecuzione del tuo progetto Python e il numero di thread. Credo che Supervisor e Gunocorn possano aiutare qui. –

+1

Per motivi di interesse, quale è la ragione per utilizzare Apache + ModWSGI e Nginx anziché solo Nginx per la gestione di uWSGI? Inoltre, per il contenuto statico, perché le unità ec2 lo spostano invece di limitarsi a ospitare su s3? C'è un impatto sulle prestazioni? – jvc26

+2

Ottimo punto. Abbiamo iniziato con Apache/ModWSGI, quindi abbiamo aggiunto NginXinto al mix in seguito, per ragioni di prevedibilità, volevamo mantenere Apache nei nostri ambienti PROD. S3 è fantastico, totalmente. Abbiamo ottenuto la maggior parte delle nostre cose su Cloudfiles (l'equivalente S3). Ma ci sono file statici che cambiano molto spesso per noi e CloudFiles non ti consente di impostare un TTL di memorizzazione nella cache sul CDN di <20 minuti. – Michael

3

Come Michael Klockel già detto dipende dalla configurazione, ho:

  • Ubuntu 10.04 LTS
  • Nginx
  • Uwsgi
  • controllo di versione git
  • pitone virtualenv e PIP

È possibile controllare le impostazioni di distribuzione lei e: Django, Virtualenv, nginx + uwsgi import module wsgi error

e perché io uso nginx e uwsgi qui: http://nichol.as/benchmark-of-python-web-servers

anche io uso il tessuto per lo sviluppo di app, e lo chef solista http://ericholscher.com/blog/2010/nov/8/building-django-app-server-chef/

cache di Johny per le query SQL e il corvo imperiale e sentinella per tenere un registro di cosa sta succedendo sull'app.

2

Vorrei usare uWSGI+Nginx dal punto di vista delle prestazioni (penso che il confronto sia già stato collegato in un'altra risposta), pip e virtualenv per la distribuzione in quanto ciò mantiene le cose autonome e facilita la distribuzione pulita utilizzando fabric o simili. Usa git per il controllo della versione. Jenkins può gestire l'integrazione continua. Userei il di fronte alle istanze EC2 per il bilanciamento - fa il lavoro senza che tu debba preoccuparti troppo di questo. django-storages per il caricamento dei file statici su s3, che consente di risparmiare lo sforzo di avere un altro server per distribuire file statici.

Tuttavia, dipende un po 'sul vostro spese generali di amministrazione. Se siete alla ricerca di qualcosa di pulito e semplice per la distribuzione e lo scaling, mi piacerebbe accantonare l'intero stack EC2 AWS, uso Heroku come front-end, e s3 per i file statici. Ciò consente di risparmiare tutto il tempo di amministrazione della manutenzione delle scatole e consente di concentrarsi sullo sviluppo.

Problemi correlati