0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Djangoをcloudrunにデプロイするとき、開発と本番でDBを分ける方法

Posted at

はじめに

DjangoでDBを使用するとき、settings.pyにDBの情報を書くと思うんですが、本番と開発で分けるときに少しハマったので備忘録として書いておきます。
今回はGoogleのcloudrunでデプロイしました。

前提条件

・GCPでアカウントを作成している
・cloudsqlでインスタンスとDBを作成している
・cloudmigrate.yamlを作成している

settings.pyを分割する

元々settings.pyがあるディレクトリにsettingsというフォルダを作成します。
作成したら、settings.pyをsettingsに移動します。
settings.pyの名前をbase.pyに変更し、別で_init_.py、local.py、production.pyをsettingsの中に作成します。
以下のようになっていればOKです。

settings/
    __init__.py
    base.py
    local.py
    production.py

local.pyとproduction.pyを編集する

base.pyに書いてあるDBの情報を消して、開発のDBと本番(cloudsql)のDBの情報をlocal.pyとproduction.pyにそれぞれ追記します。また、はじめにbase.pyの情報をimportしておきます。

local.py
from .base import *

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql'
        'NAME': 'DB_NAME'
        'USER': 'root'
        'PASSWORD': 'password'
        'HOST': 'localhost'
        'PORT': '3306'
    }
}
production.py
from .base import *

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql'
        'NAME': 'DB_NAME'
        'USER': 'USER_NAME'
        'PASSWORD': 'password'
        'HOST': 'cloudsql/~'
    }
}

base.pyを編集する

こちらのファイルではDBの情報を削除します。
またcloudrunにデプロイするときに使うimageをbuildするときにcollectstaticをする必要があるのですが、settingsにファイルを分割したことでディレクトリ構造が変わったため、base.pyの記述を少し変えます。

base.py
from .base import *

STATIC_URL = '/static/'
STATICFILES_DIRS = {
    os.path.join(BASE_DIR, '../static'), #..を追加
}

STATIC_ROOT = os.path.join(BASE_DIR, '../staticfiles') #..を追加

他にも少し修正する

wsgi.py
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings.production') #productionを追加
manage.py
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings.production')#productionを追加

manage.pyをproductionしているので、ローカルサーバを立ち上げるときは以下のコマンドを入力します。

% python manage.py runserver --settings config.settings.local

おわりに

本番用にbuildするときは、通常通り以下のようにすれば大丈夫だと思います。

% gcloud builds submit --config cloudmigrate.yaml
   --substitutions _INSTANCE_NAME=~~~, _REGION=~~~

他にも本番と開発のsettingsファイルで分割できるところはあると思いますが、今回はDB中心に書きました。
参考になれば幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?