はじめに
こちらの記事はWindows上でFlaskアプリを本番環境として動かす際に、
Webサーバとしてwaitressを採用して以下の構成で動作させた際の備忘録です。
(Flask単体でも動作しますが本番環境では推奨されておりません)
Windows + Flask + waitress
経緯
Wndows上で動くアプリと連携するWebアプリをFlaskで作成しており、
簡易アプリとはいえFlask単体での運用は推奨されていないので、本番公開用にWindows上でFlaskと連携できるWebサーバを探していました。
よく出てくる構成として下記のような方法があったのですが、
- Windows + Flask + nginx + cygwin + uwsgi
- 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が表示されるはずです。