【Django】settings.pyのSECRET_KEYを再発行(リジェネレート)する【alias登録で即生成・即実装からの再起動】

うっかり、SECRET_KEYをバージョン管理対象に含ませてしまった。このままではクラウドサーバーにデプロイしたSECRET_KEYが予測され、CSRFトークン等が機能不全になってしまう。
そんな時に備えておきたい、SECRET_KEYの再発行の方法を解説する。
ソースコード
Qiitaより拝借。
from django.core.management.utils import get_random_secret_key
secret_key = get_random_secret_key()
text = 'SECRET_KEY = \'{0}\''.format(secret_key)
print(text)
実行すると、
SECRET_KEY = '07y^y0#_7b74jy)d6z0lu5*r$#azfyt1*1f+g1-3w+l@&hs^2!'
等の文言が出てくる。
aliasに登録して、どこでも再発行できるようにする。
~/.bashrcのaliasに登録して、いつでもどこでも再発行できるようにする。
alias regenedjangokey='python3 [パス]/seckey_regene.py'
再読込。以降はdjangoseckeyで再発行ができる。
source ~/.bashrc
注意点として、virtualenvを使ってDjangoをインストールし、OSに直にインストールしていない場合、このaliasは通用しない。(djangoが無いと言われる。)
Ubuntuの環境に直にインストールすると解決する。
sudo pip3 install django
結論
既にデプロイしているDjangoにSECRET_KEYを書き換えた後はsettings.pyを再読込させるため、nginxとdjangoサービスを再起動させる必要がある。
sudo systemctl restart nginx [djangoサービス]
xselコマンドのxsel --clipboard --inputも組み合わせることで、生成したSECRET_KEYをクリップボードに即コピーすることもできる。後は問題の箇所に貼り付けるだけ。
alias regenedjangokey='python3 [パス]/seckey_regene.py | xsel --clipboard --input'
他にも、sedコマンド等を使うことで、デプロイ運用中のDjangoのsettings.pyに再生成したSECRET_KEYを書き込むこともできる。実行した後にsystemctlを使ってNginxとDjangoのサービスを再起動すれば、丸ごと1つのコマンドで即解決できる。
[sedコマンドもセットにして、直接settings.pyに書き込みをするコマンド]
sudo systemctl restart nginx [djangoサービス]