25
27

More than 3 years have passed since last update.

Windowsで本番環境としてFlaskアプリをシンプルな構成で動かす(Windows + Flask + waitress)

Last updated at Posted at 2020-12-11

はじめに

こちらの記事はWindows上でFlaskアプリを本番環境として動かす際に、
Webサーバとしてwaitressを採用して以下の構成で動作させた際の備忘録です。
(Flask単体でも動作しますが本番環境では推奨されておりません)

Windows + Flask + waitress

経緯

Wndows上で動くアプリと連携するWebアプリをFlaskで作成しており、
簡易アプリとはいえFlask単体での運用は推奨されていないので、本番公開用にWindows上でFlaskと連携できるWebサーバを探していました。
よく出てくる構成として下記のような方法があったのですが、

  1. Windows + Flask + nginx + cygwin + uwsgi
  2. Windows + Flask + mod_wsgi + Apache

uwsgiがUNIX用なので構成にcygwinが入ってきたり、開発が終了しているmod_wsgiを使う方法などで、
もう少しシンプルでサポートが続いているものがいいと思い探していたところ・・・。

FlaskのHPちゃんと読んでみたらwaitressなるもので本番環境を構築しており、WIndowsとLinux両対応で実装していたので、
そちらの使い方を備忘録として記録しておくこととしました。

Waitress

waitress はPythonで実装されたWSGIWeb準拠のWebサーバで、本番品質で許容可能なパフォーマンスを謳っています。
nginx等の本格的なWebサーバには及びませんが、PythonのFlask標準のWebサーバと比較すればかなりレスポンス面で優れています。

インストール

pip install waitress

使い方

下記のような簡単なFlaskアプリ(server.py)を例とします。


from flask import Flask

app = Flask(__name__)


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


if __name__ == "__main__":
    app.run('0.0.0.0', port=5000)

方法1 : ソースコードのFlask起動処理をWaitressへ切り替えて起動

※こちらの方式ではFlaskアプリのソースコード変更が必要となります。

  • flaskを起動しているソースコードへwaitressをインポート

from waitress import serve
  • flask起動部分をWaitressで置き換えます。

if __name__ == "__main__":
    #app.run('0.0.0.0',port=5000)
    serve(app, host='0.0.0.0', port=5000)
  • アプリを起動します
python server.py

方法2 : コマンドラインから直接実行

※こちらの方式ではFlaskのソースコードを変更せずに、コマンドラインからwaitressサーバを実行できます。

  • コマンドラインで下記のように入力し、サーバを起動します

シンプルな呼び出しとしては以下のような形での実行となります。
その他呼び出しの詳細オプションについてはwaitressのマニュアルを参照ください。

waitress-serve --port="port" "python_file_name":"flask_variable"

サンプルのserver.py場合はFlaskを下記のように初期化しているため、

app = Flask(__name__)

実際のサーバの起動は以下のようなコマンドで実行します。

waitress-serve --port=5000 server:app

 動作確認

上記のサンプルコードで動作させた場合
http://127.0.0.1:5000/
上記にアクセスすることでHello Worldが表示されるはずです。

25
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
27