2021年10月8日金曜日

uWSGI 超入門

uWSGI 超入門

概要

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 だけでも動作しますが基本的にはこの使い方はしません

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 に変更するだけです

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 件のコメント:

コメントを投稿