![見出し画像](https://assets.st-note.com/production/uploads/images/71603867/rectangle_large_type_2_4c13a056d025c22b0ee81095645c29fa.png?width=1200)
Djangoデプロイ用settingsの作成
前回の続きとなる記事です。デプロイ用の設定を作成していきます。
前回の記事では、開発用の設定を作成しましたが、デプロイ用の設定はパスワード等をGitHubにアップしないように考慮する必要があります。
具体的には、パスワードやDjangoのSECRET_KEYを.envファイルに格納し、Git管理外のファイルにするのですが、その手順についてまとめていきます。
1. django-environをインストール
環境変数からDjangoアプリケーションを構成できるようにするために、django-environパッケージを利用します。
myproj % source venv/bin/activate
(venv) myproj % pip install django-environ
:
2. .envファイルを作成
設定用に.envファイルを作成します。ここでは、パスワードや環境によって変更される内容について.envに記述するようにしています。
・SECRET_KEY … Django内部で利用される暗号鍵
・DATABASE_URL … DATABASE接続設定
・ALLOWED_HOSTS … Django接続許可インターフェース
※ Database URLの設定方法については本稿では割愛します。興味がある方は別途調べてみてください。
# .env
SECRET_KEY=751nb8y%hp6!4+w7iqsxfw%pr5tf!#b6mkx(i%1hrs1umpvpk&
ALLOWED_HOSTS=myproj.example.com,example.com
DATABASE_URL=mysql://dbuser:password@localhost:3306/dbname
(Tips) デプロイ用SECRET_KEYの生成
(venv) myproj % python manage.py shell
>>> from django.core.management.utils import get_random_secret_key
>>> get_random_secret_key()
'751nb8y%hp6!4+w7iqsxfw%pr5tf!#b6mkx(i%1hrs1umpvpk&'
3. デプロイ用settingsファイルを作成
1.でインストールしたenvironを使用して、.envファイルに設定した値をsettingsに取り込みます。
ファイルはデプロイ用ということで、production.pyとしてます。
(前回記事で作成した、開発用設定と共通設定である、base.pyを最初に読み込んでます。)
(venv) myproj % cd config/settings
(venv) settings % touch production.py
# production.py
import os
import environ
from .base import *
env = environ.Env()
env.read_env(os.path.join(BASE_DIR, '.env'))
SECRET_KEY = env('SECRET_KEY')
DEBUG = False
ALLOWED_HOSTS = env.list('ALLOWED_HOSTS')
DATABASES = {
'default': env.db(),
}
environ.read_env()で.envファイルをReadします。Readした値は、environの各メソッドで指定した形式で返してくれるので便利ですね。
>>> env('SECRET_KEY')
'751nb8y%hp6!4+w7iqsxfw%pr5tf!#b6mkx(i%1hrs1umpvpk&'
>>> env.list('ALLOWED_HOSTS')
['localhost', '127.0.0.1']
>>> type( env.list('ALLOWED_HOSTS') )
<class 'list'>
>>> env.db()
{'NAME': 'dbname', 'USER': 'dbuesr', 'PASSWORD': 'password', 'HOST': 'localhost', 'PORT': 3306, 'ENGINE': 'django.db.backends.mysql'}
>>> type(env.db())
<class 'dict'>
4. .gitignoreに.envを追加してGitHubに上げる
(gitignore.ioで作成していたなら既に記述済みかと思いますが、).gitignoreに.envを記述し、git管理対象外としてGitHubにあげましょう。
# .gitignore
:
# Environments
.env
;
(venv) myproj % git add .
(venv) myproj % git commit -m 'add:Django production settings'
(venv) myproj % git push
5.あと書き
今回の内容は、githubにDBのパスワードを上げてしまっていたといった黒歴史をのこさないように、最初にやっておいた方がよい内容ですね。人任せにせず、PM、PLといったそれなりの権限のある人が監修の元、最初の方にやってしまっておいた方が(せっかくソースの履歴管理してたのに、ブランチ丸ごと消す羽目になってパーになったなんて事故が起きないので)無難かなぁと思います。
この辺は個人の見解なので、各々のポリシーに合わせてしっかり運用できていればバッチリですねー。
この記事が気に入ったらサポートをしてみませんか?