2013-11-26 12 views
16

Vor allem bitte lassen Sie mich klar, dass ich ein Windows-Benutzer und sehr neu in der Web-Welt bin. In den letzten Monaten habe ich sowohl Python als auch Django gelernt und es war eine großartige Erfahrung für mich. Jetzt habe ich irgendwie ein kleines Projekt erstellt, das ich auf dem Produktionsserver bereitstellen möchte. Da django seinen eingebauten Entwicklungsserver hat, gab es für mich kein Problem. Aber jetzt, da ich es auf einem Produktionsserver bereitstellen muss, habe ich gegoogelt und Nginx + uWSGI oder Nginx + Gunicorn als die beste Option dafür gefunden. Und da uWSGI und Gunicord nicht mit Windows kompatibel sind, sollte ich Ubuntu oder ein anderes Unix-System anpassen.Bereitstellen von Django in einem Produktionsserver

Also meine Fragen sind:

  1. Nur klar sein, wie ich mit einem der oben arbeiten müssen, mir bitte erklären, warum ich zwei Server benötigen?
  2. Wenn ich die Ubuntu-Umgebung anpassen muss, muss ich Ubuntu Shell-Skripting, SSH und andere Sachen lernen? Oder der Hosting-Provider hilft mir dabei?
  3. Bitte lassen Sie mich wissen, was ich sonst für die oben genannten benötigt.

Vielen Dank für Ihre Zeit und bitte entschuldigen Sie, wenn meine Frage eine lahme Frage war. Hoffe auf positive Antwort Antworten. Vielen Dank!

+0

Sie müssen nicht zwei Server verwenden, können Sie Nginx + uWSGI + Apache2 auf einem einzigen Server und nur gut konfiguriert alles zusammen, Nginx und Gunicorn sind fast die gleichen Dinge, müssen Sie nur eine verwenden von ihnen. Ich benutze Ubuntu und es ist in Ordnung, SSH in Ubuntu zu integrieren Sie nicht große Sache für das zu lernen – drabo2005

+0

@ drabo2005 Ich interpretierte die Frage als zwei Server-Prozesse statt zwei separate Maschinen; Ich stimme zu, dass es keinen dringenden Bedarf gibt, zwei separate Maschinen zu verwenden, um nginx + etwas anderes zu bedienen. Ich stimme nicht zu, dass nginx und gunicorn dasselbe sind oder sogar in der gleichen Klasse von Software; nginx ist ein Reverse Proxy und ein Statikserver und gunicorn ist ein dedizierter wsgi Application Webserver. –

+0

Danke für die Erklärung. –

Antwort

14
  1. Eine typische Konfiguration umfasst zwei Server-Prozesse (die auf dem gleichen tatsächlichen Hardware- oder virtuellen Server zusammen ausgeführt werden können), so dass der Proxy-Server vor langsame Clients puffern kann. Zum Beispiel: Ein langsamer Client verbindet sich mit einer Anfrage mit nginx. Nginx wird die Anfrage an Gunicorn weiterleiten und Gunicorn wird antworten. Nginx wird dann sofort die Gunicorn-Antwort konsumieren und die Gunicorn-Ressourcen sofort freigeben. An diesem Punkt kann der langsame Client so viel Zeit in Anspruch nehmen, wie er die Antwort von Nginx konsumieren möchte, ohne viel Serverressourcen zu binden. Alternativen zum Zwei-Server-Prozessmodell sind die Verwendung von Async-Arbeitern mit Gunicorn und die Verwendung von Async-Sync-Combo wie Waitress. Nginx vorne hat den zusätzlichen Vorteil, dass es sich als gebrauchsfertiger Statikserver verdoppelt.

    Beachten Sie, dass "langsame Clients" beschreiben können: Mobiltelefone, die ihre Verbindung verlieren und den TCP-Socket hängen lassen, bis Timeout Mid-Request; Mobiltelefone, die nur langsam sind; unzuverlässige Verbindungen aller Art; feindliche Denial-of-Service-Clients, die absichtlich versuchen, Serverressourcen zu nutzen; manchmal irgendeine alte Verbindung, die aus irgendeinem Grund einen Schluckauf oder eine Fehlfunktion hat. Das ist also ein Problem, das fast jede Website betrifft.

  2. Sie werden kein Shell-Scripting per se benötigen, aber die Gewöhnung an Ubuntu wird einige Zeit dauern. Es gibt eine Menge zu lernen, auch außerhalb des Skripts, wie zum Beispiel die Verwendung des Paketmanagers, die Konfiguration von Paketen nach der Installation auf eine Weise, die zukünftige Updates nicht verwirren wird. Und Sie müssen definitiv lernen, SSH zu verwenden ; Es ist eines der grundlegendsten Server-Administrations-Tools in der * nix-Welt.

    Eine Alternative zum Lernen von Ubuntu oder einer anderen Server-Plattform ist die Verwendung einer Platform-as-a-Service-Option wie Heroku, da die PaaS-Hosting-Anbieter sich um all diese Dinge kümmern werden. Ich empfehle diesen Ansatz. Obwohl ich denke, dass PaaS eine gute Option für Leute ist, die sich unabhängig von ihrem Können auf die Entwicklung und nicht auf Server-Admin konzentrieren wollen, ist es auch wahr, dass ein wenig Erfahrung mit Linux-Server-Plattformen einen langen Weg zurücklegt Es hilft dir, die Umgebung zu verstehen, in der dein Code läuft. Selbst wenn du mit PaaS gehst, würdest du immer noch davon profitieren, ein bisschen (oder sehr viel) mit Ubuntu herumzubasteln.

    Ein weiterer Vorteil von PaaS ist, dass ihre Infrastruktur normalerweise den Nginx-Teil des Deals behandelt (Pufferung langsamer Anfragen über Proxy). Dies ist beispielsweise bei Heroku der Fall. Sie müssen sich also nicht um diesen Teil der Infrastruktur kümmern.

  3. Dieser Teil der Frage ist zu breit zu beantworten, aber lassen Sie mich in den Kommentaren wissen, wenn Sie eine Klarstellung benötigen.

+0

Vielen Dank für die ausführliche Erklärung. War wirklich sehr verwirrt mit diesen beiden. Jetzt nehme ich an, dass ich einen vps nehme und Kitt für ssh verwende. Nur noch eine Sache, wie kann ich Änderungen an der Datei vornehmen, die ich implementiert habe? Ich habe von Stoff gehört, aber es war wirklich schwer, die Logik dahinter zu verstehen. Könnten Sie bitte erklären, wie das geht? Danke noch einmal. –

+0

@Benjamin Schließlich müssen Sie nur Ihre aktualisierten Programmdateien auf dem Server abrufen und den Webserver-Prozess neu starten (oder den Code neu laden). Stoff ist ein Werkzeug, um dies zu vereinfachen, also wenn es komplexer ist als Sie es brauchen, verwenden Sie es nicht. scp oder sftp durch Kitt ist in Ordnung. Jede andere Methode wie die Verwendung von git zum direkten Herunterladen von Ihrem Quellcode-Repository vom Server ist auch faires Spiel. –

+0

Ok, ich werde auch in git suchen. Danke noch einmal! –

2

ich es tue, wie in diesem Tutorial almoast: http://michal.karzynski.pl/blog/2013/06/09/django-nginx-gunicorn-virtualenv-supervisor/
Nginx meine Proxy App läuft auf gunicorn und ihre versorgende Statik, virtualenv für meine Python-Umgebung django, Supervisor meine app laufen zu sehen.
Es ist möglich, dass Sie in einem gewissen Fehler der ausgeführt wird, wenn nicht Postgresql verwenden, fragen dann werde ich (es ist jetzt verwendet MySQL in der Vergangenheit Postgresql) helfen Ubuntu

+0

Vielen Dank für Ihre Antwort. Aber ich war verwirrt über das Wie zwischen Entwicklung und Produktion. Aber der obige Link ist eine Hilfe für Sie, danke! –

+1

dieser Link ist ziemlich genial !!! – yeaske

1

Erstens gibt es keine Notwendigkeit zu verwenden, wenn Sie mit Windows-glücklicher sind. Ich weiß nicht, ob nginx auf Windows funktioniert, aber ich wäre sehr überrascht, wenn es nicht funktioniert (in der Tat, here sind die Nginx-Dokumente für die Installation unter Windows). Apache funktioniert mittlerweile unter Windows. Die Django-Dokumentation enthält a full explanation zum Einrichten von Apache/mod_wsgi für Django.

Sie benötigen keine zwei Server. Ich bin nicht sicher, warum Sie denken, dass Sie das tun: Der übliche Grund dafür ist, die statischen Assets auf einem separaten Server zu haben, aber Sie erwähnen das nicht als Grund. Da du aber nur von einer kleinen Seite sprichst, musst du das nicht einmal tun. Ein Server, der so konfiguriert ist, dass er sowohl Django als auch die statischen Assets bedient, kommt gut zurecht. Auch hier erklären die Docs genau, wie das geht.

+0

Danke für die Antwort. Als ich herum googelte fand ich, dass uWSGI/Gunicorn mit nginx die besten Praktiken waren. Also habe ich über die Umsetzung der beiden nachgedacht und die Frage hier gestellt. –