概要
uWSGI は Webアプリケーションの前段に配置してデーモンやログの管理、リクエスト情報の加工などができます
今回は uWSGI のインストールから簡単な Webアプリケーションとの連携として flask と連携するのを試してみたいと思います
環境
- macOS 11.6
- Python 3.8.3
- flask 2.0.2
- uWSGI 2.0.19.1
インストール
- pipenv install flask uWSGI
uWSGI だけで動かす
WSGI だけでも動作しますが基本的にはこの使い方はしません
- vim app.py
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"ok"]
- pipenv run uwsgi --http 0.0.0.0:8080 --wsgi-file app.py
- curl localhost:8080
flask と動かす
flask と組み合わせてみましょう
とは言っても普通に flask アプリケーションを作成して起動コマンドを wsgi に変更するだけです
- vim run.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def api_sample():
return 'ok'
if __name__ == '__main__':
app.run()
- pipenv run uwsgi --http=0.0.0.0:8080 --wsgi-file=run.py --callable=app
- curl localhost:8080
--callable
で flask をアプリを指定する感じになります
uwsgi.ini で動かす
WSGI にはさまざまなオプションがありますデーモンにしたりリクエストの情報をログファイルに書き出すこともできます
とりあえず今回は起動設定を書きましょう
[uwsgi]
wsgi-file=run.py
callable=app
http=0.0.0.0:8080
uwsgi.ini を作成することで先程指定した起動オプションを設定ファイルの指定に変更することができます
- pipenv run uwsgi uwsgi.ini
- curl localhost:8080
その他オプション
https://uwsgi-docs.readthedocs.io/en/latest/Options.html に指定可能な様々なオプショがあります
https://uwsgi-docs.readthedocs.io/en/latest/Configuration.html オプションファイル内では変数などを使うこともできます
最後に
WSGI 実装の Webアプリケーションであれば uWSGI はどんな Webアプリケーションでも使えます
flask の場合は flask run で内部的に WSGI を起動していますが実際は WSGI を切り離してちゃんと flask と WSGI で別々で起動したほうがメンテナンス性もいいですよという感じになります
要は flask run ではチューニングされて WSGI を使っているということになります
0 件のコメント:
コメントを投稿