Djangoでの"秘密にしたい値"の取り扱い
Gitで管理しながら、GitHubで公開したりHerokuにデプロイしたりする際の、"秘密にしたい値"の取り扱いのついて
はじめに
秘密にしたい値って案外多いと思います。
settings.pyのSECRET_KEYとか、API Keyとか。
ソースコードの中に埋めると丸見えになるので、対策してみました。
秘密にしたい値の取り扱い
秘密にしたい値をgitの管理対象外にして、herokuの環境変数に設定します。
githubでの取り扱い
まずはgitの管理対象から秘密にしたい値を外します。
settings_local.pyなどを用意して、そこに値を集めてみました。
settings_local.py
SECRET_KEY = 'hoge'
あとはsettings_local.pyをimportするだけです。
settings.py
import settings_local
SECRET_KEY = settings_local.SECRET_KEY
.gitignoreを用意して、管理対象外に指定するのを忘れないように。
.gitignore
settings_local.py
herokuでの取り扱い
まずは環境変数に指定します。
$ heroku config:add SECRET_KEY="hoge"
あとは、環境変数を利用するようにsettings.pyを調整します。
settings.py
from os import environ SECRET_KEY = environ['SECRET_KEY']
設定を動的に切り替え
これで秘密にしたい値を秘密にできたので、後はローカル環境とheroku環境で動的に設定を切り替えるようにしておきます。
settings.py
from socket import gethostname from os import environ HOSTNAME = gethostname() if 'local' in HOSTNAME: import settings_local SECRET_KEY = settings_local.SECRET_KEY else SECRET_KEY = environ['SECRET_KEY']
settings_local.py
SECRET_KEY = 'hoge'
.gitignore
settings_local.py
注意
ifの条件文でHOSTNAMEに"local"が含まれている場合…としてますが、
$ hostname
で、ご利用のhostnameがわかるので自身の環境に合せて変更してください。
おわりに
"秘密にしたい値"ってなんて言うんですかね??
良い表現が思い付きませんでした…。