IT

【python】WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.と言われたら

はじめに

Flaskなどのpythonフレームワークを使用していると、開発中に赤字で警告メッセージが表示されることがあります。

本記事では、この警告の意味と適切な対処方法について解説します。

警告メッセージの意味

日本語訳:

「これは開発用サーバーです。本番環境では使用しないでください。代わりに本番用WSGIサーバーを使用してください。」

この警告は、「フレームワークに付属の簡易Webサーバーは高負荷に耐えられず、セキュリティも十分ではありません。本番環境では適切なWebサーバーを使用してください」という意味です。

WSGIとは

WSGI(Web Server Gateway Interface)は、Pythonウェブアプリケーションとウェブサーバーがどのように通信するかを定義した仕様です。

WSGIサーバーは、この仕様に基づいてHTTPリクエストを処理し、レスポンスをクライアントに返します。

主要なWSGIサーバー

Gunicorn: https://gunicorn.org

  • Flaskの公式ドキュメントでも推奨されており、多くの開発者に利用されています。

WSGIサーバーとリバースプロキシ

  • 自前でホスティングする場合、中規模以上のアプリケーションでは、WSGIサーバーの前にNginxなどのリバースプロキシやロードバランサーが必要になります。
  • クラウドプラットフォーム(render.com, Herokuなど)を利用する場合、プラットフォーム側で設定されるため、必ずしも自分で設定する必要はありません。

Flask環境での対処法

サンプルFlaskアプリ(開発サーバー使用)

  • Dockerfile
FROM python:3.12-slim
WORKDIR /app
RUN pip install Flask
COPY ./app.py .
EXPOSE 5000
CMD ["python", "-m", "flask", "run", "--host=0.0.0.0"]
  • app.py
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
return "Hello, World!"

if __name__ == '__main__':
app.run()
  • 実行コマンド

docker build -t flask .

docker run -p 5010:5000 flask

Gunicornを使用した本番用設定

  • Dockerfile
FROM python:3.12-slim
WORKDIR /app
RUN pip install Flask gunicorn
COPY ./app.py .
EXPOSE 5000
CMD ["gunicorn", "--bind", "0.0.0.0:5000", "app:app"]
  • app.py
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
return "Hello, World!"

if __name__ == '__main__':
app.run()
  • 実行コマンド

docker build -t flask-gunicorn .

docker run -p 5010:5000 flask-gunicorn

開発サーバーと本番用サーバーの違い

  • 並行処理能力:本番用サーバー(Gunicornなど)は複数のワーカープロセスを使用し、高負荷に対応できます。
  • 安定性:本番用サーバーはクラッシュからの自動復旧機能を持ち、長時間運用に適しています。
  • パフォーマンス最適化:本番用サーバーは大量のリクエストを効率的に処理するよう最適化されています。

セキュリティ上の注意点

開発サーバーを本番環境で使用することのリスク:

  • デバッグモードが有効になっている可能性があり、機密情報が露出する恐れがあります。
  • DoS攻撃に弱く、簡単にサーバーがダウンする可能性があります。
  • セキュリティパッチが適用されていない古いバージョンが使用される可能性があります。

AIによるQA集

Q: Gunicorn以外のWSGIサーバーを使用しても良いですか?

A: はい、uWSGIやWaitressなども人気のある選択肢です。アプリケーションの要件に合わせて選択してください。

Q: 開発中にGunicornを使う必要はありますか?

A: 開発中は Flask の開発サーバーを使用し、本番環境に移行する際にGunicornを使用するのが一般的です。

Q: Gunicornの設定はどのようにカスタマイズできますか?

A: Gunicornは多くの設定オプションを提供しています。ワーカー数、タイムアウト、ログ設定などをカスタマイズできます。

詳細はGunicornの設定ドキュメントを参照してください。

最後に

当初この警告メッセージを見たときは赤字で面食らいましたが、実際には開発者への有益な注意喚起でした。

比較的簡単に解決できることがわかり、安心しました。

本記事が皆様のFlask開発における疑問解決の一助となれば幸いです。

  • この記事を書いた人

緑川縁

ニートからシステムエンジニアになった人
クラウド案件をメインにやっています。
保持資格:CCNA,AWS SAA&SAP,秘書検定2級
趣味でボカロ曲作り始めました。

-IT
-