はじめに
DjangoやFlaskなどのPythonアプリケーションを動かすwsgiサーバ、Gunicornの設定ファイルの書き方についてまとめてみました。
Gunicornの設定ファイルはPythonのスクリプトとして、各種設定を変数や関数として列挙していく形となる。
中身はPythonスクリプトなので通常のソースコードと同じように、ライブラリをimportしたり、Pythonのプログラムコードを記述することも可能。
環境
- Python 3.9
- Gunicorn 20.1
設定ファイル
Gunicornでよく使う設定値としては、下記のようなものがある。
#
# Gunicorn config file
#
wsgi_app = 'hogeapp.wsgi:application'
# Server Mechanics
#========================================
# current directory
chdir = '/work/python/gunic/gu'
# daemon mode
daemon = False
# enviroment variables
raw_env = [
'ENV_TYPE=dev',
'HOGEHOGE_KEY=xxxxxxxxxxxxxxxxxxxxxxxxx'
]
# Server Socket
#========================================
bind = '0.0.0.0:8000'
# Worker Processes
#========================================
workers = 2
# Logging
#========================================
# access log
accesslog = '/work/python/gunic/gu/logs/access.log'
access_log_format = '%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"'
# gunicorn log
errorlog = '-'
loglevel = 'info'
wsgi_app
wsgiのアプリケーションオブジェクト名。module_name:value
形式でWSGIモジュールを指定する。
chdir
Gunicornプロセスが動作する際のカレントディレクトリ。
WSGIアプリケーションの起点となるホームディレクトリを設定しておく。
daemon
デーモン(バックグラウンド)モードで起動するか否かの設定値。
True
ではバックグラウンドでデーモンとして動作するが、False
ではフォアグラウンドでの動作となる。
raw_env
Gunicornのプロセスで使用する環境変数を指定する。WSGIのPythonアプリケーションで使用することもできるため、アプリ内で必要な環境変数類はここで定義する。
KEY=VALUE
形式の文字列で配列で記述する。
bind
GunicornのListenポートとして待ち受けるポートを記載。
ネットワーク:ポート
の形で指定する。
workers
WSGIのワーカープロセス数を指定する。
accesslog
Gunicornのアクセスログのファイル名を指定する。-
を指定すると標準出力に出力される。
これはApacheやnginxのログようなクライアントからのリクエストに関するアクセスログとなる。
access_log_format
アクセスログのフォーマット形式。
設定できるパラメータ変数は公式ドキュメントを参照。
LTSVやJSON(ndjson)形式でログを書き出したい場合は、ここで各フォーマットに適合した形式で設定することで行うことができる。
errorlog
Gunicornログのファイル名。-
を指定すると標準出力に出力される。
errorlog
という名前になっているが、エラーだけでなくGunicorn本体の動作全般のログとなる。
loglevel
errorlog のログレベルを指定する。
指定可能なレベルは、debug
、info
、warning
、error
、critical
が指定可能。
設定ファイルの使い方
通常
gunicornコマンドに、--config
オプションで作成した設定ファイルを指定することで、使用することができる。
$ gunicorn --config /path/to/app/settings.py
gunicornコマンドは--config
オプションと併せて任意のオプションも利用可能。
設定ファイル内で設定された項目と重複して指定した場合、オプション引数側が優先されるため、これを利用して設定値を部分的に差し替えたりすることも可能。
$ gunicorn --config /path/to/app/settings.py --chdir /path/to/dev/app
仮想環境(venv)を利用する場合
Gunicornに限ったことでは無いが、仮想環境(venv)にインストールしたコマンドを利用するには、仮想環境ディレクトリ内にあるGunicornコマンドを利用する。
今回の場合、仮想環境内のgunicornを利用するには、仮想環境ディレクトリ内にあるgunicornコマンドを実行することで、使用することができる。
この場合、Gunicornで実行するアプリケーションも仮想環境の構成を利用して起動される。
$ /path/to/venv/bin/gunicorn --config /path/to/app/settings.py