uWSGIでDjangoアプリに環境変数を設定する

PythonのwebフレームワークであるDjangoで製作したアプリを動作させる際、選択肢の1つとして挙がるのがuWSGIです。Djangoアプリに設定する秘密鍵(SECRET_KEY)などの設定値は、Djangoの公式ドキュメントでも言及されているように、環境変数を使用するなどしてアプリのソースとは独立に設定することが推奨されています。本記事では、uWSGIでDjangoアプリに環境変数を設定する方法を紹介します。

環境変数の設定を確認するテスト

uWSGIの設定ファイルとなるuwsgi_env.iniと、ごく単純に応答するuwsgi_env.pyを以下の内容で作成します。

# uwsgi_env.ini
[uwsgi]
http = :8080
wsgi-file = uwsgi_env.py
env = SECRET_KEY=abcdefghijklmnopqrstuvwxyz0123456789
env = APP_VALUE1=appvalue1
# uwsgi_env.py
import os

assert os.getenv('SECRET_KEY') == 'abcdefghijklmnopqrstuvwxyz0123456789'
assert os.getenv('APP_VALUE1') == 'appvalue1'

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

uwsgi_env.iniではSECRET_KEYとAPP_VALUE1の2つの環境変数を定義しています。uwsgi_env.pyは応答の前にアサーションを挟んでおり、環境変数を正しく読み取れなかった場合はAssertionErrorが発生します。

$ uwsgi --ini uwsgi_env.ini
$ curl 127.0.0.1:8080
Hello World

2つのターミナルを使って、片方ではuWSGIを走らせておき、もう片方でuWSGIがLISTENしている8080ポートにアクセスします。ちゃんと”Hello World”と返ってきていることから、uwsgi_env.iniで環境変数が正常に設定されているのが確認できます。

環境変数を設定する際の注意点

uWSGIの環境変数を設定する際、OSの環境変数のようにダブルクォーテーションを使用してしまうと、環境変数は想定と異なる値に設定されてしまいます。SECRET_KEYの値をダブルクォーテーションで囲んだuwsgi_env_err.iniを作成してテストしてみます。

# uwsgi_env_err.ini
[uwsgi]
http = :8080
wsgi-file = uwsgi_env.py
env = SECRET_KEY="abcdefghijklmnopqrstuvwxyz0123456789"
env = APP_VALUE1=appvalue1
$ uwsgi --ini uwsgi_env_err.ini
$ curl 127.0.0.1:8080
Internal Server Error

先程と同じくuwsgiを走らせて8080ポートにアクセスしてみると、AssertionErrorが発生する影響で応答は”Internal Server Error”になります。

関連記事

参考リンク

Share - この記事をシェアする