85

Flask にバンドルされているサーバーは、本番環境にデプロイしても安全ですか? そうでない場合、本番環境で Flask をデプロイするには何を使用すればよいですか?

4

3 に答える 3

125

いいえ。バンドルされたサーバーは開発サーバーです。本番環境を考慮して設計されていません。

  • デフォルトでは、一度に複数のリクエストを処理することはありません。
  • デバッグ モードをオンのままにしてエラーが表示されると、サーバー上で任意のコードを実行できるシェルが開きます (考えてみてくださいos.system('rm -rf /'))。
  • 開発サーバーはうまくスケーリングしません。

Flask は Werkzeug の開発サーバーを使用しており、ドキュメントには同じことが書かれています。

開発サーバーは、実稼働システムで使用するためのものではありません。特に開発目的で設計されており、高負荷下ではパフォーマンスが低下します。展開のセットアップについては、アプリケーションの展開ページをご覧ください。

推奨されるアプローチは、実稼働 WSGI サーバーを使用して Flask アプリケーションを実行することです。ドキュメントには展開専用のセクション全体があります: Deployment Options

アプリケーションのデプロイは、uWSGI や gunicorn などの WSGI サーバーをインストールし、Flask の開発サーバーの代わりにそれを実行するのと同じくらい簡単です。

gunicorn -w 4 -b 127.0.0.1:4000 myproject:app

画像や動画などの静的アセットを提供している場合、低レベルのキャッシュが必要な場合、または同時実行の要求が高い場合は、nginxなどのウェブサーバーを使用してすべてのリクエストを処理することをお勧めします。

下手な ASCII 形式で:

                +----------+
                | Client 2 |
                +----------+
                      |
                      V 
+----------+      +-------+      +----------+
| Client 1 |----->| nginx |<-----| Client 3 |
+----------+      +-------+      +----------+
                      ^
                      |
                      V
           /--------------------\
           | useful nginx stuff |
           | like asset serving |
           | and rate limiting  |
           \--------------------/
                      |
                      V
               +-------------+
               | WSGI server |
               +-------------+

WSGI サーバー プロセスを実際に実行するには、 Supervisorを使用できます。サーバーが何らかの理由で失敗した場合、サーバーを自動的に再起動し、ログを保持し、デーモンとして実行されるため、サーバーの起動時にサービスが開始されます。

于 2012-09-04T19:16:26.793 に答える
21

基本的にはありません。組み込みの開発サーバーは、実稼働環境での展開には安全ではありません。

組み込みの開発サーバーはまさにそのためのものです。本番環境で使用するには、ここで説明する手順の1つに従う必要があります。

これらには、 Apache / mod_wsgiやこれらのスタンドアロンwsgiサーバーの1つhttp://flask.pocoo.org/docs/deploying/wsgi-standalone/など、WSGI仕様を実装するさまざまなサーバーが含まれます。

利用可能なuWSGIおよびFastCGIオプションもあります

于 2012-09-04T18:49:29.590 に答える
2

軽量で使いやすい一方で、Flask のビルトイン サーバーは、スケールがうまくいかず、デフォルトで一度に 1 つのリクエストしか処理しないため、本番環境には適していません。 http://flask.pocoo.org/docs/0.12/deploying/

于 2017-08-17T09:49:03.587 に答える