Reneste og raskeste server oppsett for Django

stemmer
42

Jeg er i ferd med å utplassere en mediumsized nettsted drevet av Django. Jeg har en dedikert Ubuntu Server.

Jeg er veldig forvirret over hvilke serversoftware å bruke. Så jeg tenkte for meg selv: hvorfor ikke spørre Stackoverflow.

Hva jeg leter etter er:

  • Enkel å sette opp
  • Rask og lett på ressurser
  • Kan tjene mediafiles
  • I stand til å tjene flere djangosites på samme server
  • Jeg vil heller ikke installere PHP eller noe annet som suger ressurser, og som jeg ikke har bruk for.

Jeg har hørt om mod_wsgi og mod_python på Apache, Nginx og lighty. Som er fordeler og ulemper med disse, og jeg har gått glipp av noen?

@Barry : Noe jeg føler at Apache er å oppsvulmet for meg. Hva med alternativene?

@BrianLy : Ok jeg skal sjekke ut mod_wsgi litt mer. Men hvorfor trenger jeg Apache hvis jeg tjene statiske filer med lighty? Jeg har også klart å tjene Django app selv med lighty. Er det dårlig på noen måte? Sorry for beeing så dum :-)

OPPDATERING : Hva med lighty og Nginx - som er de bruker-saker når disse er det perfekte valget?

Publisert på 25/08/2008 klokken 13:28
kilden bruker
På andre språk...                            


13 svar

stemmer
26

Siden jeg var på utkikk etter noe mer dyptgående svar, bestemte jeg meg for å undersøke saken selv i dybden. Gi meg beskjed om jeg har misforstått noe.

Noen generelle anbefaling er å bruke en egen webserver for håndtering av media. Ved separat, mener jeg en webserver som ikke kjører Django. Denne serveren kan være for eksempel:

  • Lighttpd (Lighty)
  • Nginx (EngineX)
  • Eller noen andre lett-server

Deretter, for Django, kan du gå ned forskjellige baner. Du kan enten:

  • Serve Django via Apache og:

    • mod_python

      Dette er den stabil og anbefalte / godt dokumentert måte. Cons: bruker mye minne.

    • mod_wsgi

      Fra hva jeg forstår, er mod_wsgi en nyere alternativ. Det synes å være raskere og enklere på ressurser.

    • mod_fastcgi

      Ved bruk av FastCGI du delegere servering av Django til en annen prosess. Siden mod_python inkluderer en python tolk i hver forespørsel den bruker mye minne. Dette er en måte å omgå det problemet. Også er det noen sikkerhetsbekymringer.

      Det du gjør er at du starter Django FastCGI server i en egen prosess, og deretter konfigurerer apache via omskriver å kalle denne prosessen når det trengs.

Eller du kan:

  • Serve Django uten å bruke Apache , men med en annen server som støtter FastCGI opprinnelig:

    (Dokumentasjonen nevner at du kan gjøre dette hvis du ikke har noen Apache spesielle behov. Jeg antar at grunnen må være å spare minne.)

    • Lighttpd

    Dette er serveren som kjører Youtube. Det virker raskt og enkelt å bruke, men jeg har sett rapporter om memoryleaks.

    • Nginx

    Jeg har sett benchmarks hevde at denne serveren er enda raskere enn lighttpd. Det er hovedsakelig dokumentert i russisk skjønt.

En annen ting, på grunn av begrensninger i Python serveren skal kjøre i delte modus, ikke gjenget.

Så dette er min nåværende forskning, men jeg vil ha flere meninger og erfaringer.

Svarte 27/08/2008 kl. 08:41
kilden bruker

stemmer
9

Jeg bruker Cherokee .

Ifølge sine referanseindekser (korn av salt med dem), håndterer den belastningen bedre enn både Lighttpd og Nginx ... Men det er ikke derfor jeg bruker det.

Jeg bruker det fordi hvis du skriver cherokee-admin, det begynner en ny server som du kan logge inn (med et engangspassord) og konfigurere hele serveren gjennom et vakkert gjort webmin. Det er en morder funksjonen. Det har allerede spart meg mye tid. Og det sparer serveren min mye ressurser!

Som for Django, jeg kjører det som en gjenget SCGI prosess. Fungerer fint. Cherokee kan holde den i gang også. Igjen, veldig fin funksjon.

Den nåværende Ubuntu repo versjonen er svært gammel, så jeg vil råde deg til å bruke deres PPA . Lykke til.

Svarte 09/12/2008 kl. 17:08
kilden bruker

stemmer
6

Som @Barry sagt, bruker dokumentasjonen mod_python . Jeg har ikke brukt Ubuntu som en server, men hadde en god opplevelse med mod_wsgi på Solaris. Du kan finne dokumentasjon for mod_wsgi og Djangomod_wsgi nettstedet.

En rask gjennomgang av dine behov:

  • Lett å installere jeg har funnet apache 2.2 ganske lett å bygge og installere.
  • Rask og lett på ressurser vil jeg si at dette avhenger av bruk og trafikk. * Du kan ikke ønsker å server alle filer ved hjelp av Apache og bruke Lighttpd (lighty) til server statiske filer.
  • Kan tjene mediefiler Jeg antar at du mener bilder, flash-filer? Apache kan gjøre dette.
  • Flere steder på samme server Virtuell server hosting på Apache.
  • Heller ikke installere andre utvidelser Kommentar ut noe du ikke vil ha i Apache config.
Svarte 25/08/2008 kl. 14:00
kilden bruker

stemmer
5

Den offisielt anbefalte måten å distribuere en Django prosjekt er å bruke mod_python med apache. Dette er beskrevet i dokumentasjonen. Hoved pro med dette er at det er den best dokumenterte og mest støttet, og mest vanlige måten å distribuere. Det con er at det sannsynligvis ikke er den raskeste.

Svarte 25/08/2008 kl. 13:49
kilden bruker

stemmer
2

Etter min mening beste / raskeste stack er lakk-nginx-uwsgi-Django. Og jeg med hell bruke den.

Svarte 09/05/2011 kl. 21:01
kilden bruker

stemmer
2

Hold det enkelt: Django anbefaler Apache og mod_wsgi (eller mod_python) . Hvis servering mediefiler er en veldig stor del av tjenesten, vurdere Amazon S3 eller Rackspace Cloudfiles.

Svarte 15/06/2009 kl. 02:09
kilden bruker

stemmer
2

Jeg sliter med å forstå alle alternativer også. I dette blogginnlegget fant jeg noen fordeler av mod_wsgi forhold til mod_python forklart.

Flere lav trafikk nettsteder på en liten VPS gjøre RAM forbruk den primære bekymring, og mod_python virker som et dårlig alternativ der. Bruke lighttpd og FastCGI, har jeg klart å få den minste minnebruken av en enkel Django området ned til 58MiB virtuelle og 6.5MiB bosatt (etter omstart, og serverer en eneste ikke-RAM-tunge forespørsel).

Jeg har lagt merke til at oppgradering fra Python 2.4 til 2.5 på Debian Etch økt minste minne fotavtrykk av Python prosesser med noen få prosent. På den annen side, kanskje 2,5 er bedre minnehåndtering har en større motsatt effekt på langvarige prosesser.

Svarte 06/10/2008 kl. 07:56
kilden bruker

stemmer
2

Jeg bruker Nginx (0.6.32 tatt fra Sid ) med mod_wsgi . Det fungerer veldig bra, selv om jeg ikke kan si om det er bedre enn alternativene fordi jeg aldri prøvd noen. Nginx har memcached støtte innebygd, noe som kanskje kan fungere sammen med Django caching mellomvare (jeg faktisk ikke bruker den, i stedet jeg fylle bufferen manuelt med python-memcache og ugyldig det når det gjøres endringer), så cache treffer helt bypass Django (utvikling min maskin kan tjene rundt 3000 forespørsler per sekund).

En påminnelse: Nginx' mod_wsgisterkt misliker navngitte steder (den prøver å passere dem i SCRIPT_NAME), så det åpenbare ' error_page 404 = @django' vil forårsake en rekke obskure feil. Jeg måtte lappe mod_wsgi kilde til å fikse det.

Svarte 24/09/2008 kl. 11:58
kilden bruker

stemmer
2

Den beste konfigurasjonen er ikke så kjent tror jeg. Men her er:

  1. Bruk Nginx for servering forespørsler (dynamisk til app, statisk innhold direkte).
  2. Bruk python web server for å tjene dynamisk innhold.

To mest raske løsninger for python-basert web server er:

Du må se på google for å finne dagens beste konfigurasjonen for Django (fortsatt under utvikling).

Svarte 20/09/2008 kl. 18:06
kilden bruker

stemmer
1

Jeg har en advarsel for å bruke Cherokee. Når du gjør endringer i Django Cherokee opprettholder den gamle prosessen, i stedet for å drepe den, og starte en ny.

På Apache jeg sterkt anbefale denne artikkelen.

http://www.djangofoo.com/17/django-mod_wsgi-deploy-exampl

Det er lett å sette opp, lett å drepe eller tilbake etter å gjøre endringer.

Bare skriv i terminal

sudo /etc/init.d/apache2 restart

og endringene blir sett umiddelbart.

Svarte 12/02/2013 kl. 23:55
kilden bruker

stemmer
1

Det er mange måter, tilnærming å gjøre dette.For Derfor anbefaler jeg å lese nøye artikkelen knyttet til distribusjonsprosessen på DjangoAdvent.com: Eric Florenzano - Distribuere Django med FastCGI: http://djangoadvent.com/1.2/deploying -django-site-hjelp-FastCGI / Les også: Mike Malone - Scaling Django Stochastictechnologies Blogg: Den perfekte Setup Django Mikkel Høegh Blogg: 35% Response-time-forbedring-bytte-uwsgi-Nginx

hilsen

Svarte 28/10/2010 kl. 04:05
kilden bruker

stemmer
1

Vi bruker Nginx og FastCGI for alle våre Django distribusjoner. Dette er mest fordi vi vanligvis distribuere over på Slicehost, og ikke ønsker å donere alle våre minne til Apache. Jeg antar at dette ville være vår "use case".

Som for bemerkninger om dokumentasjon blir det meste på russisk - jeg har funnet det meste av informasjonen på engelsk wiki å være svært nyttig og nøyaktig. Dette nettstedet har eksempler på konfigurasjoner for Django også, der du kan justere din egen Nginx konfigurasjon.

Svarte 04/09/2008 kl. 13:53
kilden bruker

stemmer
1

Hvis du bruker lighthttpd, kan du også bruke FastCGI for servering Django. Jeg er ikke sikker på hvordan hastigheten sammenlignet med mod_wsgi, men hvis minnet fungerer riktig, får du et par av fordelene som du ville fått med mod_wsgi at du ikke ville få med mod_python. Det viktigste en er at du kan gi hvert program sin egen prosess (som er veldig nyttig for å holde minnet om forskjellige apps skilt samt for å dra nytte av multi-core datamaskiner.

Edit: Bare for å legge til i forhold til oppdatering om nginix, hvis minnet fungerer riktig igjen, bruker nginix "greenlets" for å håndtere samtidighet. Dette betyr at du kanskje må være litt mer forsiktig med å sørge for at en app ikke spiser opp alle serverens tid.

Svarte 25/08/2008 kl. 15:06
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more