diadia

興味があることをやってみる

本番用と開発用のsettings.pyを分けるときの技術

settings.pyを本番用と開発用に準備する

本番用と開発用にsettings.pyを両方持っていることは便利。それは一度デプロイしたプロダクトを拡張したいときに、プロダクトのsettings.pyの設定を本番用の環境から開発用の環境の設定に書き換える必要があるからだ。面倒くさいことだし、この変更操作中に例えば記述ミスで誤った設定にしてしまったら、バグ解消に時間がかかってしまう。そこで本番用の環境と開発用の環境を分けておくことが一つの方法だ。ちなみに以下が本番と開発間の変更すべき項目である。

DEBUG =   # FalseまたはTrue
DATABASES = {} #sqlit3または任意の
ALLOWED_HOSTS 
    

やり方

  • python3.6
  • django2.1
  • nginxを使用
  • postgresqlを使用
  • gunicornを使用

そこで従来のsettingとは別に例えば、production_settings.pyを本番環境用に準備する。

#オリジナルのsettings.pyがあるディレクトリにて
$ mkdir production_settings.py 

settings.pyの内容をコピーしてproduction_settings.pyに貼り付ける。その後以下の項目に書き換える。static_url以下は追記する。

DEBUG = True
# 自分の場合はpostgresqlを使う
DATABASES = {
    'default': {
        'ENGINE'   : 'django.db.backends.postgresql_psycopg2',
        'NAME'     : "project", #postgresqlで作成したデータベース名(この場合だとCREATE DATABASE project ;)
        'USER'     : "*****",
        "PASSWORD" : "*****",
        "HOST"     : "localhost",
        "PORT"     : "",
    }
}

ALLOWED_HOSTS = ['*.*.*.*']
STATIC_URL = '/static/'
STATIC_ROOT = '/usr/share/nginx/html/static'
MEDIA_URL = '/media/'
MEDIA_ROOT = '/usr/share/nginx/html/media'

変更したらいつもどおりのgunicornのコマンドを入力する。ただしその前に一つコマンドをかませる。そういうわけでコマンドは以下のようになる。

export DJANGO_SETTINGS_MODULE=[アプリ名].production_settings
gunicorn --bind 127.0.0.1:8000 [アプリ名].wsgi:application

もっと便利な他のやり方もある

上記の方法はexportの内容が消えてしまう?のかgunicornコマンドを入力する前にexportする必要が出てくる。ちょっと面倒くさい。wsgi.pyファイルやmanage.pyファイルを編集することで解決する方法も有るようだが、まだ技術が追いついていない。できるようになったら追記しておく。