見出し画像

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といったそれなりの権限のある人が監修の元、最初の方にやってしまっておいた方が(せっかくソースの履歴管理してたのに、ブランチ丸ごと消す羽目になってパーになったなんて事故が起きないので)無難かなぁと思います。
 この辺は個人の見解なので、各々のポリシーに合わせてしっかり運用できていればバッチリですねー。

この記事が気に入ったらサポートをしてみませんか?