はじめに
閲覧ありがとうございます。
現在は Python(Flask)を用いて、Webアプリのサーバーサイド領域で運用保守業務をしています。
uWSGIについて学ぶ機会があり、備忘録として自分なりに整理してまとめたいと思います。
認識が間違っている所はお手数ですが、ご指摘頂ければと思います。
uWSGIとは?
まずは公式ドキュメントです。
uWSGIを理解するうえでは、先に WSGI という言葉を軽く押さえておくと分かりやすいです。
WSGIは、PythonのWebアプリケーションとWebサーバーがやり取りするための共通ルール
です。
FlaskのようなPython製Webアプリは、このWSGIという仕組みに沿って動作します。
そのうえで、uWSGIを理解するには、まずはブラウザとサーバーの関係を理解する必要があります。
クライアントサーバーシステム
一般的にWebアプリケーションでは クライアント(ブラウザ) がサーバーにリクエストを送り、
サーバー はその内容に応じてレスポンスを返します。
これがいわゆる クライアント・サーバーシステム です。
簡単に表すと、以下のようなイメージです。
サーバー側には、たとえば以下のようなものがあります。
- Webアプリケーション
- データベース
- 各種ライブラリやモジュール
- Webサーバー
WebサーバーはブラウザからHTTPリクエストを受け取り、Flaskアプリケーションへ連携します。
ここで重要なのは、PythonのWebアプリケーションはブラウザからのHTTP通信をそのまま直接扱うのではなく、
WSGIに基づいて、リクエストとレスポンスを受け渡す、という点です。
その役割を担うのが WSGIサーバー です。
uWSGIは、そのWSGIサーバーのひとつです。
つまり、uWSGIは、WebサーバーとPythonアプリケーションの間に入り、リクエストを受け渡すための仲介役として動作します。
実際のコード
簡単なflaskアプリを用意しました
from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
return "Hello, uWSGI!"
@app.route("/health")
def health():
return "ok"
下記で起動してみます。
uwsgi --http :5000 --wsgi-file app.py --callable app
別の方法として、起動ファイルに詳細を記載し、起動時にそれを指定することもできます。
[uwsgi]
http = 0.0.0.0:5000
wsgi-file = app.py
callable = app
master = true
processes = 4
threads = 2
vacuum = true
die-on-term = true
起動コマンド
uwsgi --ini uwsgi.ini
まとめ
uWSGIは、WebサーバーとPythonアプリケーションの間をつなぐための仕組みです。
ブラウザから来たリクエストを、FlaskのようなPythonアプリが扱える形で受け渡しする役割を持っています。
お役に立てれば幸いです。
【参考文献】
https://wa3.i-3-i.info/word12355.html