私はGunicornで動作するDjangoアプリを持っていて、Ansibleによって管理されているSupervisorDによって管理されています。スーパーバイザプログラムにシェル環境変数を渡すには?
環境から変数DJANGO_SECRET_KEY
を読み込むようにしたいのですが、設定ファイルやVCSに秘密鍵を保存したくないからです。そのために私は私のsettings.py
における環境からキーをお読みください。
SECRET_KEY = os.environ['DJANGO_SECRET_KEY']
それは言う:サブプロセスは「開始するために使用するシェルの環境変数を継承します
注をスーパーバイザー "以外はここでは上書きされます。 「サブプロセス環境」を参照してください。
は、ここに私のsupervisor.conf
です:
[program:gunicorn]
command=/.../.virtualenvs/homepage/bin/gunicorn homepage.wsgi -w 1 --bind localhost:8001 --pid /tmp/gunicorn.pid
directory=/.../http/homepage
私は、変数を設定し、シェルからGunicornコマンドを実行すると、それがうまく起動:
$ DJANGO_SECRET_KEY=XXX /.../.virtualenvs/homepage/bin/gunicorn homepage.wsgi -w 1 --bind localhost:8001 --pid /tmp/gunicorn.pid
しかし私は、変数を設定するとシェルとスーパーバイザサービスを再起動します。私のアプリが見つからないというエラーに関するエラーで起動できません。
$ DJANGO_SECRET_KEY=XXX supervisorctl restart gunicorn
gunicorn: ERROR (not running)
gunicorn: ERROR (spawn error)
スーパーバイザーのエラーログを見て:
File "/.../http/homepage/homepage/settings.py", line 21, in <module>
SECRET_KEY = os.environ['DJANGO_SECRET_KEY']
File "/.../.virtualenvs/homepage/lib/python2.7/UserDict.py", line 40, in __getitem__
raise KeyError(key)
KeyError: 'DJANGO_SECRET_KEY'
[2017-08-27 08:22:09 +0000] [19353] [INFO] Worker exiting (pid: 19353)
[2017-08-27 08:22:09 +0000] [19349] [INFO] Shutting down: Master
[2017-08-27 08:22:09 +0000] [19349] [INFO] Reason: Worker failed to boot.
私も上司サービスを再起動しようとしたが、同じエラーが発生します。
$ DJANGO_SECRET_KEY=XXX systemctl restart supervisor
...
INFO exited: gunicorn (exit status 3; not expected)
私の質問は、私はスーパーバイザーが「合格」に作るのですかどのようです環境変数を子プロセスに割り当てる
これは完全に間違った方法です。スーパーバイザーはユーザーIDで実行されません。スーパバイザ設定で変数を設定する必要があります。 –
@DanielRoseman私はスーパーバイザー設定をVCSに持っているので、自分の秘密鍵を入れることはできません。 –
'DJANGO_SECRET_KEY'環境変数を読み込むのは監督者のconfとは関係ありません。どのようにしているのか分かりませんが、 'os.environ.get( 'DJANGO_SECRET_KEY')'を使ってdjango設定ファイルに値を割り当てることができます。 'django-environ'のようなパッケージを使うこともできます。 – demonno