コンテンツにスキップ

Python/uWSGI

出典: フリー教科書『ウィキブックス(Wikibooks)』

はじめに

[編集]

uWSGIは、高パフォーマンスなアプリケーションサーバーであり、Pythonを含む複数の言語をサポートしています。このハンドブックでは、uWSGIの基本的な設定から高度な機能までを網羅し、実際のプロジェクトで活用するための知識を提供します。

uWSGIの概要

[編集]

uWSGIとは

[編集]

uWSGIは、以下の特徴を持つアプリケーションサーバーです:

  • 高パフォーマンスなリクエスト処理
  • 複数の言語とフレームワークのサポート(Python, Ruby, Perl, PHPなど)
  • 拡張性の高いプラグインシステム
  • ロードバランシングとクラスタリング機能

インストール

[編集]

uWSGIpipを使って簡単にインストールできます。

pip install uwsgi

基本的な使い方

[編集]

最小限のアプリケーション

[編集]

以下は、uWSGIでPythonのWSGIアプリケーションを実行する例です。

myapp.py
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"]

このアプリケーションをuWSGIで実行するには、以下のコマンドを使用します。

uwsgi --http :8000 --wsgi-file myapp.py

設定ファイル

[編集]

uWSGIの設定は、コマンドライン引数だけでなく、設定ファイルでも行えます。

myapp.ini
[uwsgi]
http = :8000
wsgi-file = myapp.py

この設定ファイルを使ってアプリケーションを実行するには、以下のコマンドを使用します。

uwsgi --ini myapp.ini

高度な設定

[編集]

ワーカープロセス

[編集]

uWSGIは、複数のワーカープロセスを使ってリクエストを並列処理できます。

[uwsgi]
http = :8000
wsgi-file = myapp.py
processes = 4

スレッド

[編集]

uWSGIは、マルチスレッドもサポートしています。

[uwsgi]
http = :8000
wsgi-file = myapp.py
threads = 2

ソケット

[編集]

uWSGIは、HTTPだけでなく、UNIXソケットやTCPソケットもサポートしています。

[uwsgi]
socket = /tmp/myapp.sock
wsgi-file = myapp.py

プラグイン

[編集]

プラグインの使用

[編集]

uWSGIは、プラグインシステムを通じて機能を拡張できます。例えば、Pythonプラグインを有効にするには以下のように設定します。

[uwsgi]
plugin = python
http = :8000
wsgi-file = myapp.py

サポートされているプラグイン

[編集]

uWSGIは、以下のような多くのプラグインをサポートしています:

  • Python
  • Ruby
  • Perl
  • PHP
  • Lua

ロードバランシングとクラスタリング

[編集]

ロードバランシング

[編集]

uWSGIは、複数のインスタンス間でリクエストを分散するロードバランシング機能を提供します。

[uwsgi]
master = true
processes = 4
socket = /tmp/myapp.sock

クラスタリング

[編集]

uWSGIは、複数のサーバー間でクラスタリングを構成できます。

[uwsgi]
master = true
processes = 4
socket = /tmp/myapp.sock
cluster = 192.168.1.100:3031,192.168.1.101:3031

セキュリティ

[編集]

アクセス制御

[編集]

uWSGIでは、特定のIPアドレスからのアクセスを制限できます。

[uwsgi]
http = :8000
wsgi-file = myapp.py
allowed-hosts = 192.168.1.0/24

SSL/TLS

[編集]

uWSGIは、SSL/TLSを使って安全な通信を実現できます。

[uwsgi]
https = :8443,myapp.crt,myapp.key
wsgi-file = myapp.py

モニタリングとロギング

[編集]

ロギング

[編集]

uWSGIは、ログファイルに詳細な情報を記録できます。

[uwsgi]
http = :8000
wsgi-file = myapp.py
logto = /var/log/myapp.log

モニタリング

[編集]

uWSGIは、統計情報を提供するためのモニタリングインターフェースを提供します。

[uwsgi]
http = :8000
wsgi-file = myapp.py
stats = 127.0.0.1:9191

デプロイ

[編集]

Nginxとの連携

[編集]

uWSGIは、Nginxと連携して高パフォーマンスなウェブサーバーを構築できます。

server {
    listen 80;
    server_name myapp.com;

    location / {
        include uwsgi_params;
        uwsgi_pass unix:/tmp/myapp.sock;
    }
}

Dockerでのデプロイ

[編集]

uWSGIは、Dockerコンテナ内で実行することもできます。

FROM python:3.8-slim
RUN pip install uwsgi
COPY . /app
WORKDIR /app
CMD ["uwsgi", "--ini", "myapp.ini"]

まとめ

[編集]

このハンドブックでは、uWSGIの基本的な設定から高度な機能までを解説しました。uWSGIはその高パフォーマンスと拡張性から、本番環境での利用に適したアプリケーションサーバーです。是非、このハンドブックを参考にして、uWSGIを使ったプロジェクトを始めてみてください。

下位階層のページ

[編集]