web-dev-qa-db-ja.com

サーバーはFlaskと一緒にバンドルされていますか?

サーバーはFlaskにバンドルされており、実稼働環境での展開に安全ですか?そうでない場合は、Flaskを運用環境にデプロイするために何を使用すればよいですか?

58
ensnare

いいえ。バンドルされたサーバーは、developmentサーバーです。実稼働環境を考慮して設計されていません。

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

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

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

推奨されるアプローチは、 実動WSGIサーバーを使用 を使用してFlaskアプリケーションを実行します。ドキュメントにはデプロイメント専用のセクションがあります。 デプロイメントオプション

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

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

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

くだらないASCII形式:

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

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

76
Blender

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

ビルトインdevelopmentサーバーはまさにそのためのものです。本番環境で使用するには、詳細な手順の1つ here に従う必要があります。

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

WSGI および FastCGI オプションも利用可能です

17
olly_uk

軽量で使いやすい一方で、Flaskの組み込みサーバーは拡張性が低く、デフォルトでは一度に1つのリクエストのみを処理するため、実稼働には適していません。 http://flask.pocoo.org/docs/0.12/deploying/

1
MasterEffect117