LoginSignup
63
71

More than 3 years have passed since last update.

uWSGIのiniファイルの文法まとめ

Last updated at Posted at 2019-06-19

はじめに

uwsgiでは、オプションの設定値をコマンドライン引数、ini、xml、jsonなど複数の形式から指定できる。

本記事では視認性に長けているini形式の文法について記載する。

iniファイルの文法

コメント文

冒頭に記載された下記の3文字はコメントとして扱われる。

  • ;
  • /
  • #

基本構成

一般的なアプリケーション開発で使用されるiniファイルと同じ形式で、セクションとキー(設定項目)で構成される。

[uwsgi]
socket = /tmp/uwsgi.sock
socket = 127.0.0.1:8000
workers = 3
master = true

[section1]
socket = /tmp/uwsgi.sock
socket = 127.0.0.1:8000
workers = 3
master = true

キー (オプション)

設定可能なキーは下記URLのuwsgiのオプション一覧に記載されている。

省略系なども含めると1200以上のオプションが存在する。

https://uwsgi-docs.readthedocs.io/en/latest/Options.html
https://qiita.com/11ohina017/items/4cd29ec3e5c58685d784

下表に一部の項目を記載する。

オプション 内容
async 指定されたコアで非同期モードで実行する 100
chdir アプリをロードする前に、指定したディレクトリに移動 /var/www/uwsgi
chdir2 アプリをロードした後に、指定したディレクトリに移動 /var/www/uwsgi
chmod-socket sockファイルのパーミッションを指定 666
gid 実行するグループID nginx
http-websockets WebSocket接続を自動的に検出してセッションをRAWモードにする true
logto ログファイル、UDPアドレスの設定 /var/log/uwsgi/uwsgi.log
master マスターモードで実行するか否か true
max-requests ワーカーのリロードを実施するリクエストの閾値 100
pidfile 出力するpidファイルパスの設定 /var/www/uwsgi/uwsgi.pid
print 標準出力にメッセージを出力 test message
processes 実行するプロセス数 1
socket ソケットの設定 127.0.0.1:3031
stats 指定したアドレスでuWSGI Stats Serverを起動する 127.0.0.1:9191
touch-reload 指定されたファイルが変更または修正された場合は、uWSGIをリロードする /var/www/uwsgi/uwsig_reload
ugreen uWSGI Green Threadsを有効にするか否か true
uid ユーザID nginx
vacuum プロセス終了時にファイル/ソケットをすべて削除する true
version uwsgiバージョンを標準出力に出力 指定不可
home, virtualenv, venv, pyhome virtualenv使用時のPYTHON_HOMEディレクトリを指定 /usr/local/virtualenv/test
python-path, pythonpath, pp アプリがあるディレクトリを指定 /var/www/uwsgi/
module
wsgi loadするwsgiモジュールを指定
pyargv Python実行時の引数を指定 ( sys.argv ) "foo bar"
wsgi-file ロードするuswgiファイルを指定 /var/www/uwsgi/index.py

セクション

実行時にiniファイルだけしか指定しない場合、デフォルトのセクションuwsgiが実行される。
セクションを指定すると、対象のセクションが実行される。

* デフォルトセクションで実行
uwsgi --ini config.ini

* セクションを指定して実行
uwsgi --ini config.ini:section1

他のセクションを外部参照

ファイル名を省略してセクション名だけを指定することによって、
同一または、外部のiniファイルに定義されている他のセクションを読み込みすることも可能。
することも可能。

※ 読み込まれるセクションは、最後にロードされた.iniファイルからセクションを読み込むことになるので、注意が必要

[uwsgi]
# 同一iniファイル内のsection1を読み込む
ini = :section1

# 外部iniファイルのsection2を読み込む
ini = reference.ini
ini = :section2

[section1]
socket = /tmp/uwsgi.sock
socket = 127.0.0.1:8000

マジック変数

uwsgiに標準で用意されている特別な変数。

「%」から始まり、特定の文字列へと置換することができる。

例えば、%n とするとiniファイルのファイル名に置換される
※ 拡張子(ini)は外される

uwsgi.ini
[uwsgi]
socket = /tmp/%n.sock → /tmp/uwsgi.sockに置換される

プレースホルダ

標準で用意されたものではなく、
ユーザが独自にiniファイルに定義するマジック変数のこと。

定義の方法として、下記の2つがある。

  • オプションなしで変数を定義
  • set-placeholder (set-ph) オプションを使って定義する
[uwsgi]
# オプションなしで定義
value1 = 1
socket = %(value1).sock

# オプションを使って定義
set-ph = value2=2
socket = %(value2).sock

set-placeholder = value3=3
socket = %(value3).sock

set-placeholderを使用すると、プレースホルダであることが明確になり、
uWSGiに標準で用意されているオプションとの誤認を避けることができる。

算術プレースホルダ

計算式に%をつけると、計算結果への置換を行う。

[uwsgi]
x = 1
y = 2

total = %(x + y + 3 * 4)

# インクリメントも可能 (plus = 2になる)
plus = %(x ++)

@マジック

@(ファイル名) と記載するとファイルの内容への置換を行う。

[uwsgi]
sock = @(/tmp/socket)

ロジック設定

for、ifなどプログラミング形式での設定を行う。

for

下記のようにスペースで区切られた文字列を、
プレースホルダ %(_) を置換する。

[uwsgi]
for = 3031 3032 3033
socket = 127.0.0.1:%(_)
endfor =

if-env

環境変数が定義されているかを確認し、
その値をプレースホルダに置換する。

[uwsgi]
if-env = PATH
print = Path is %(_)
endif =

用語

harakiri ( リクエストタイムアウト )

過度に長時間リクエストを処理しているワーカーを中止するuWSGIの機能。
harakiriタイムアウトに指定した秒数より長い時間がかかるリクエストはすべて破棄され、
対応するワーカーはリサイクルされる。

master

uWSGIの内蔵prefork +スレッディングマルチワーカー管理モード。
一般的にはマスターモードで実行することが推奨されている。

Emperor

uWSGI Emperorは、指定したディレクトリにある複数のuWSGIの設定ファイルを読み込んでuWSGIプロセスを起動する機能。

設定を読み込みプロセス起動を一括管理することができる。

ugreen

uWSGI Green Threadsの略。
グリーンスレッドは、OSではなく仮想マシン (VM) によってスケジュールされるスレッド。
グリーンスレッドはネイティブのOSの機能に依存せずにマルチスレッド環境をエミュレートする。

参考

63
71
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
63
71