webentwicklung-frage-antwort-db.com.de

Sind ein WSGI-Server und ein HTTP-Server erforderlich, um eine Flask App) bereitzustellen?

Das Einrichten von Flask mit uWSGI und Nginx ist ziemlich schwierig, und selbst mit Buildout-Skripten dauert es einige Zeit und muss in Anweisungen aufgezeichnet werden, um später reproduziert zu werden.

Wenn ich keine große Auslastung des Servers plane (er ist für die Öffentlichkeit nicht sichtbar), ist es sinnvoll, ihn ohne uWSGI auszuführen? (Flask kann einen Port abhören. Kann Nginx nur Anfragen weiterleiten?)

Ist es sinnvoll, nicht einmal Nginx zu verwenden, sondern nur bare flask app auf einem Port) auszuführen?

31
culebrón

Wenn Sie "Flask" ausführen, führen Sie tatsächlich den Entwicklungs-WSGI-Server von Werkzeug aus und übergeben Ihre App Flask] als aufrufbare WSGI.

Der Entwicklungsserver ist nicht für die Verwendung in der Produktion vorgesehen. Es ist nicht besonders effizient, stabil oder sicher ausgelegt.

Ersetzen Sie den Werkzeug-Entwicklungsserver durch einen produktionsbereiten WSGI-Server wie Gunicorn oder uWSGI, wenn Sie zur Produktion wechseln, unabhängig davon, wo die App verfügbar sein wird.


Die Antwort ist ähnlich für "sollte ich einen Webserver verwenden". WSGI-Server verfügen zwar über HTTP-Server, sind jedoch nicht so gut wie dedizierte Produktions-HTTP-Server (Nginx, Apache usw.).


Flask Dokumente wie auf verschiedene Arten bereitgestellt werden. Viele Hosting-Anbieter haben auch Dokumentation zur Bereitstellung von Python oder Flask).

21
davidism

Vermutlich haben Sie bereits ein Flask App-Objekt und Routen eingerichtet, aber wenn Sie die App wie folgt erstellen:

import flask

app = flask.Flask(__name__)

richten Sie dann Ihre @app.route()s ein und dann, wenn Sie die App starten möchten:

import gevent

app_server = gevent.wsgi.WSGIServer((Host, port), app)
app_server.serve_forever()

Dann können Sie Ihre Anwendung einfach direkt ausführen, anstatt Gunicorn oder uWSGI oder irgendetwas anderem mitteilen zu müssen, dass sie für Sie ausgeführt werden soll.

Ich hatte einen Fall, in dem ich wollte, dass das Dienstprogramm flask eine Webanwendung (einen REST API-Dienst) erstellt, und fand die Unfähigkeit, flask mit anderen Nicht-Komponenten zu erstellen -Flasche, Nicht-Web-Service-Elemente ein Problem. Ich fand schließlich gevent.wsgi.WSGIServer Und es war genau das, was ich brauchte. Nach dem Aufruf von app_server.serve_forever() können Sie app_server.stop() aufrufen, wenn Ihre Anwendung beendet werden soll.

In meiner Bereitstellung überwacht meine Anwendung localhost: mit flask und gevent, und dann habe ich Nginx-Reverse-Proxy-HTTPS-Anforderungen an einem anderen Port und leite sie an meinen flask -Dienst auf localhost weiter .

10
Stephen J.