2011-02-01 13 views
8

Ho intenzione di configurare una semplice app Django in esecuzione in un ambiente di produzione su una macchina Linux. L'app avrà pochissimo traffico - meno di 100 pagine caricate al giorno. Va bene usare il web server integrato di Django per questo o dovrei installare Apache e mod_wsgi? Se sì, quali sono le ragioni di questo? Forse la sicurezza?Utilizzo del server Web incorporato di Django in un ambiente di produzione

UPDATE

OK è chiaro che non dovrebbe usare il server incorporato. Alcune delle alternative ad Apache sembrano interessanti. Esiste uno che è più popolare/più frequentemente usato con Django forse?

risposta

13

NON UTILIZZARE QUESTO SERVER (il server Web Django integrato) in un'impostazione di produzione. Non ha subito controlli di sicurezza o test delle prestazioni.

http://docs.djangoproject.com/en/dev/ref/django-admin/#runserver-port-or-address-port

Ma non si dispone di utilizzo di Apache se non si vuole. È possibile utilizzare direttamente Spawning, Gunigorn ecc.

Cherokee è anche facile da configurare.

+0

OK, questo è abbastanza chiaro, grazie? – paperplane

+0

@paperplane Sì :) – Epeli

+1

Non si vuole assolutamente utilizzare il server web integrato. Se non vuoi fare confusione con un'installazione "pesante" di Apache, potresti leggere lighttpd (http://docs.djangoproject.com/en/dev/howto/deployment/fastcgi/?from=olddocs#lighttpd-setup) o nginx (http://code.djangoproject.com/wiki/DjangoAndNginx) – bhamby

16

Va bene usare il server web incorporato Django per questo

No.

Devo installare Apache e mod_wsgi?

Sì.

Se sì, quali sono le ragioni? Forse la sicurezza?

In parte.

Ancora più importante, il piccolo giocattolo Django server è a thread singolo e qualsiasi hangup nel codice blocca il server. Ciò significa che quando due utenti fanno clic quasi contemporaneamente, la query dell'utente deve arrivare fino a Django prima che la query dell'utente due possa iniziare.

E questo dovrà includere la velocità di download irragionevolmente lento sul desktop.

Apache (come tutte le alternative, lighttpd o nginx) è multi-thread. La parte più lenta della transazione è il download da Apache sul desktop. Non vuoi che il codice Python (e Django) lo gestisca in un modo a thread singolo. Anche per pochi utenti.

Inoltre, non si cosa Django servire supporti statici (per esempio, i file di libreria JS CSS e.)

Un unico posto lenta nella vostra applicazione non avrà effetto il throughput complessivo sistema se Apache e mod_wsgi sono in posto. La pagina di output di una richiesta può essere scaricata lentamente sul desktop di un PC in parallelo con l'output di un altro utente.

+0

Grazie molto utile. – paperplane

+0

"Inoltre, non è quello che Django serve con supporti statici (vale a dire file di libreria CSS e JS)." - Perché? –

2

Il server Django integrato non è stato progettato per la produzione. Ci sono molte ragioni per cui, principalmente sicurezza ed efficienza. Il modo consigliato è usare mod_wsgi che è trattato nei documenti here

9

Usa nginx + gunicorn.

Nginx: cinque linee di configurazione. Gunicorn: due linee di configurazione. È facile ed efficiente. Per un miglior controllo puoi generare il processo di gunicorn usando supervisord.

Sia gunicorn che supervisord sono disponibili per l'installazione con pip e nginx è disponibile in quasi tutte le distribuzioni nel pool di pacchetti predefinito.

+0

come sapete, se l'installazione di Gunicorn è più veloce di quella di fast-cgi? – Nick

Problemi correlati