Frage

Ich bin über die Bereitstellung mittelständisches Website powered by Django.Ich habe einen dedizierten Server von Ubuntu.

Ich bin wirklich verwirrt über die serversoftware zu verwenden.Also dachte ich mir:warum nicht Fragen stackoverflow.

Was ich Suche ist:

  • Einfach zu set up
  • Schnell und einfach auf Ressourcen
  • Dienen können mediafiles
  • In der Lage zu bedienen mehrere djangosites auf demselben server
  • Ich würde lieber nicht installieren, PHP oder irgendetwas anderes, das saugt Mittel, und für die ich keine Verwendung für.

Ich habe gehört, mod_wsgi and mod_python auf Apache, nginx und heller.Was sind die vor-und Nachteile diese haben und ich jemanden vergessen haben?

@Barry:Irgendwie fühle ich mich wie der Apache ist zu aufgebläht für mich.Was ist mit den alternativen?

@BrianLy:Ok, ich werde überprüfen mod_wsgi einige mehr.Aber warum brauche ich Apache, wenn ich statische Dateien dienen, die mit lighty?Ich habe es auch geschafft, dienen die django-app selbst mit lighty.Ist das schlimm in anyway?Sorry for beeing so dumm :-)

UPDATE:Was ist heller-und nginx - was sind die Verwendungen-Fälle, wenn diese sind die perfekte Wahl?

War es hilfreich?

Lösung

Da war ich auf der Suche für einige tiefergehende Antworten, habe ich beschlossen, die Forschung das Problem selbst in die Tiefe.Bitte lassen Sie mich wissen, wenn ich falsch verstanden habe, nichts.

Einige Allgemeine Empfehlung verwenden Sie einen separaten webserver für den Umgang mit Medien.Durch trennen, ich meine ein webserver läuft nicht Django.Dieser server kann sich beispielsweise:

  • Lighttpd (Lighty)
  • Nginx (EngineX)
  • Oder eine andere Licht-Gewicht server

Dann, für Django, können Sie gehen unterschiedliche Wege.Sie können entweder:

  • Dienen Django über Apache und:

    • mod_python

      Dies ist die stabile und empfohlene/gut dokumentiert.Nachteile:verwendet viel Speicher.

    • mod_wsgi

      Von dem, was ich verstehe, mod_wsgi ist eine neuere alternative.Es scheint einfacher und schneller auf Ressourcen.

    • mod_fastcgi

      Bei der Verwendung von FastCGI, die Sie delegieren das servieren von Django zu einem anderen Prozess.Seit mod_python enthält einen python-interpreter in jeder Anfrage es nutzt viel Speicher.Dies ist ein Weg, um zu umgehen dieses problem.Auch gibt es einige Sicherheitsbedenken.

      Was Sie tun, ist, dass Sie starten Sie Ihre Django-FastCGI-server in einem separaten Prozess und konfiguriert dann den apache über Neuprogrammierungen, um diesen Prozess nennen, wenn nötig.

Oder Sie können:

  • Dienen Django ohne Verwendung von Apache aber mit einem anderen server, dass unterstützt FastCGI-nativ:

    (Die Dokumentation erwähnt, dass Sie dies tun können, wenn Sie nicht haben jede Apache spezifischen Bedürfnisse.Ich denke, der Grund muss sein, um Speicherplatz zu sparen.)

    • Lighttpd

    Dies ist der server, der läuft Youtube.Es scheint schnell und einfach zu bedienen, aber ich habe gesehen, Berichte über memoryleaks.

    • nginx

    Ich habe gesehen, benchmarks zu fordern, dass dieser server ist noch schneller als lighttpd.Es ist vor allem dokumentiert, in Russisch, obwohl.

Eine andere Sache, aufgrund von Einschränkungen in Python Ihr server sollte laufen, Gabel-Modus, nicht im Gewinde.

Das ist also mein Aktueller Forschung, aber ich will mehr, Meinungen und Erfahrungen.

Andere Tipps

Ich bin mit Cherokee.

Nach Ihre benchmarks (Körnchen Salz mit Ihnen), es behandelt die Auslastung besser als Lighttpd und nginx...Aber das ist nicht der Grund, warum ich es verwenden.

Ich benutze es, weil, wenn Sie geben cherokee-admin, es beginnt eine neue server, die Sie anmelden können (mit einem one-time password), und konfigurieren Sie die ganze server durch eine wunderschön-gemacht webmin.Das ist ein killer-feature.Es hat schon mich gerettet Menge Zeit.Und es rettet mein server viele Ressourcen!

Für django, ich bin der Ausführung mit Gewinde-SCGI-Prozess.Funktioniert gut.Cherokee kann damit es läuft auch.Wieder, sehr nettes feature.

Die aktuelle Ubuntu-repo-version ist sehr alt, so würde ich empfehlen, die Sie verwenden Ihre PPA.Viel Glück.

Wie @Barry sagte, die Dokumentation verwendet mod_python.Ich habe nicht verwendet Ubuntu als server, aber hatte eine gute Erfahrung mit mod_wsgi auf Solaris.Sie finden die Dokumentation für mod_wsgi und Django auf der mod_wsgi Website.

Eine schnelle überprüfung der Anforderungen:

  • Einfache Installation Ich habe festgestellt, apache 2.2 relativ einfach zu bauen und zu installieren.
  • Schnell und einfach auf Ressourcen Ich würde sagen, das hängt von Ihrer Nutzung und den Verkehr.* Möchten Sie möglicherweise nicht alle server-Dateien mit Apache und-Nutzung LightTPD (lighty) an server von statischen Dateien.
  • Dienen können media-Dateien Ich nehme an, du meinst die Bilder, flash-Dateien?Der Apache kann dies tun.
  • Mehrere sites auf demselben server Hosting virtueller server auf Apache.
  • Lieber nicht installieren andere Erweiterungen Kommentieren Sie alles, was Sie nicht wollen, die in der Apache-config.

Die offiziell empfohlene Methode zum bereitstellen einer django-Projekt zu verwenden mod_python mit apache.Dies ist beschrieben in die Dokumentation. Die wichtigsten pro-mit diesem ist, dass es das am besten dokumentierte, am meisten unterstützt, und am häufigsten verwendete Möglichkeit zum implementieren.Die con ist, dass es wahrscheinlich nicht die Schnellste.

Die beste Konfiguration ist nicht so bekannt, denke ich.Aber hier ist:

  1. Verwenden Sie nginx für Anfragen bedienen, welche (dynamische app, statische Inhalte direkt).
  2. Die Verwendung von python-web-server für die Zustellung von dynamischen Inhalten.

Zwei die rasche Lösungen für den python-basierten web-server:

Sie brauchen, um sich in google finden, die aktuell beste Konfiguration für django (noch in Entwicklung).

Ich bin mit nginx (0.6.32 genommen von Sid) mit mod_wsgi.Es funktioniert sehr gut, obwohl ich kann nicht sagen, ob es besser ist als die alternativen, weil ich nie versucht.Nginx hat memcached Unterstützung gebaut in, die kann vielleicht zusammen mit dem Django-caching-middleware (die ich eigentlich nicht nutzen, stattdessen fülle ich den cache manuell mit python-memcache und ungültig, wenn änderungen vorgenommen werden), so-cache-hits komplett umgehen Django (meiner Entwicklung Maschine kann dienen etwa 3000 Anfragen pro Sekunde).

Ein VORBEHALT:nginx' mod_wsgi sehr Abneigungen benannten Orten (er versucht, Sie zu übergeben, in SCRIPT_NAME), so dass die offensichtliche ‘error_page 404 = @django'verursachen zahlreiche obskure Fehler.Ich hatte den patch mod_wsgi Quelle zu beheben.

Ich bin kämpfen, um zu verstehen, all die Optionen, wie gut.In in diesem blog-Beitrag Ich fand einige Vorteile mod_wsgi gegenüber mod_python erklärt.

Mehrere low-traffic Websites, auf einem kleinen VPS stellen Sie den RAM-Verbrauch der Hauptanliegen, und mod_python scheint wie eine schlechte option.Mit lighttpd und FastCGI, ich habe es geschafft, die minimale Speichernutzung eines einfachen Django-site herunter, um 58MiB virtuellen und 6,5 MiB Wohnsitz (nach dem Neustart und dienen einem einzigen nicht-RAM-schweren Anfrage).

Ich habe bemerkt, dass ein Upgrade von Python 2.4 2.5 auf Debian Etch nahm die minimale Speicherbedarf des Python-Prozesse von ein paar Prozent.Auf der anderen Seite, 2.5 ist die bessere Verwaltung des Speichers, haben möglicherweise eine größere gegenteiligen Effekt auf die lang andauernde Prozesse.

Halten Sie es einfach: Django empfiehlt Apache und mod_wsgi (oder mod_python).Wenn der Dienst Medien-Dateien ist ein sehr wichtiger Teil Ihres Diensts Amazon S3 oder Rackspace CloudFiles.

Meiner Meinung nach besten/schnellsten stack varnish-nginx-uwsgi-django.Und ich bin erfolgreich.

Wenn Sie mit lighthttpd können Sie auch mit FastCGI für das servieren von Django.Ich bin mir nicht sicher, wie Sie die Geschwindigkeit im Vergleich zu mod_wsgi, aber wenn der Speicher dient, richtig, Sie bekommen ein paar der Vorteile, die Sie erhalten würden, mit mod_wsgi, dass Sie nicht mit mod_python.Das wichtigste ist, dass, können Sie jede Anwendung in einem eigenen Prozess (das ist sehr hilfreich für halten Speicher von anderen apps getrennt sowie für die Nutzung von multi-core-Computer.

Edit:Nur in Bezug auf Ihr update über nginix, wenn der Speicher dient wieder korrekt, nginix verwendet "greenlets" zu behandeln Parallelität.Dies bedeutet, dass Sie möglicherweise ein wenig vorsichtiger sein, um sicherzustellen, dass eine Anwendung nicht Essen, bis alle server die Zeit.

Wir verwenden nginx und FastCGI für alle unsere Django-Bereitstellungen.Dies ist vor allem, weil wir in der Regel über die Bereitstellung auf Slicehost, und nicht möchten, Spenden Sie alle unsere Speicher-Apache.Ich denke, das wäre unser "use case".

Wie für die Bemerkungen über die Dokumentation meist auf Russisch-ich habe festgestellt, die meisten Informationen, die auf der English wiki sehr nützlich und genau sind.Diese Seite wurde Beispielkonfigurationen für Django zu, aus, die Sie optimieren können, Ihre eigene nginx-Konfiguration.

Es gibt viele Möglichkeiten, Ansatz, dies zu tun.Deshalb, ich empfehle, Sie sorgfältig Lesen Sie die Artikel im Zusammenhang mit den deployment-Prozess auf DjangoAdvent.com:Eric Florenzano - Bereitstellen von Django mit FastCGI: http://djangoadvent.com/1.2/deploying-django-site-using-fastcgi/ Lesen Sie auch:Mike Malone - Skalierung Django Stochastictechnologies Blog:Die perfekte Django-Setup Mikkel Hoegh Blog:35 % Response-Zeit-Verbesserung-switching-uwsgi-nginx

Grüße

Ich habe eine Warnung für die Verwendung von Cherokee.Wenn Sie änderungen an Django Cherokee behält die ALTEN Prozess, anstatt es zu töten und neu gestartet.

Auf Apache-ich empfehle diese Artikel.

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

Es ist einfach zu einrichten, einfach zu töten oder zurücksetzen, nachdem Sie die änderungen.

Geben Sie einfach das terminal

sudo /etc/init.d/apache2 restart

und die änderungen sind sofort sichtbar.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top