Django

【Django】Webアプリを公開 デプロイ前に必ずやっておきたいこと3選

deploy-settings-django

(最終更新月:2021年10月)

前回までの記事で、Djangoフレームワークを-ベースとした「日報アプリ」の開発を進めてきました

当記事より、いよいよWeb上で公開するための準備を進めていきます

当記事を通じて、ローカル環境で事前に行っておきたいデプロイ前の設定変更として、以下をおこなっていきます。

  1. データベースの変更(postgreSQL)と再設定
  2. settings.py等のフォルダ構成の変更(最終的なフォルダ構成)
  3. githubレポジトリにプロジェクトを登録

データベースの変更「postgreSQL」

Djangoフレームワークでは、デフォルトで「sqLite」というデータベースを使用しています

手軽で使い勝手は良いものの、Webアプリのデータベースとしては限界があります

当ブログではpostgreSQL(通称:ポスグレ)をメインのデータベースとし説明をしていきます

いくつかある理由の一つとして、DjangoにはpostgreSQLならではのモデルフィールドが用意されているというところがあります

https://docs.djangoproject.com/ja/3.2/ref/contrib/postgres/fields/

いつか使う日がくるかもしれませんので、特にこだわりがなければこのままポスグレで設定を進めていきましょう

「ポスグレは使いたくない!」という方はこちらの章は飛ばしてください!

ポスグレの設定方法については、↓で解説してますのでまずはやってみてください!

フォルダ構成の変更

ローカル環境とプロダクション環境をきちんと分けるべきだといわれています

https://docs.djangoproject.com/ja/3.2/howto/deployment/checklist/#run-manage-py-check-deploy

特に次章でもご説明する通り、githubなどを利用するととても便利なのですが、このままだと様々な公開すべきでないファイルも公開される恐れがあります

隠したい情報を隠し、環境の変更へ最小限の労力で対応できる、デプロイ前に必ずやっておきたい設定変更、について解説していきます

settings.pyからsettingsフォルダへ

ローカル環境とWebサーバー上の環境で設定を分けるためにsettings.pyファイルをsettingsパッケージとし、いくつかのファイルに分割します

まずは現状、settings.py周りのフォルダツリーは下記のようになっています

.
 ├── __init__.py
 ├── asgi.py
 ├── allauth.py
 ├── settings.py
 ├── urls.py
 └── wsgi.py

こちらにsettingsという名前のフォルダを作成し、パッケージ化しましょう

settings > __init__.py を作成します

【変更後】

.
 ├── __init__.py
 ├── asgi.py
 ├── settings
 │   ├── __init__.py
 ├── allauth.py
 ├── settings.py
 ├── urls.py
 └── wsgi.py

allauth.pysettings.py をsettingsフォルダへ移動します

「settings.py」を「local.py」と名前を変更します

【最終】

.
 ├── __init__.py
 ├── asgi.py
 ├── settings
 │   ├── __init__.py
 │   ├── allauth.py
 │   ├── local.py
 ├── urls.py
 └── wsgi.py

__init__.pyでの記述

from .local import *
try:
    from .base import *
except:
    pass

from .allauth import *

と記述しましょう

local.pyでの変更点

BASE_DIR = Path(__file__).resolve().parent.parent

最後尾へ「.parent」を追記します

また、今後のために「PARENT_DIR」という変数にもう一つ上の階層を保存しておきます

BASE_DIR = Path(__file__).resolve().parent.parent.parent
PARENT_DIR = Path(__file__).resolve().parent.parent.parent.parent

フォルダの追加

公開したくない情報、パスワードを隠す

プロジェクトフォルダの一つ上のフォルダに下記の通りフォルダを作成します

.
 ├── auth
 ├── site
 │   ├── logs
 │   ├── public
 ├── src
 ├── venv

(※srcフォルダが今回のプロジェクトフォルダになります)

この中の「auth」フォルダに.envというファイルを作り、環境変数として、隠したい値を保存していきましょう。

保存後はこんな感じになりました↓

 ├── auth
        └── .env

ファイル内には以下のように値を保存しています。

secret_key=django-secret-key-cvaiokldfisalk
name_db=データベース名(postgresqlの場合)
pswd_db=データベースのパスワード(postgresqlの場合)
user_db=データーベースのユーザー名(postgresqlの場合)

local.pyで情報を取り出す

from dotenv import load_dotenv
import os

BASE_DIR = Path(__file__).resolve().parent.parent.parent
PARENT_DIR = BASE_DIR.parent
env_path = PARENT_DIR / "auth/.env"
load_dotenv(env_path)

SECRET_KEY = os.environ.get("secret_key")

python-dotenvをインストールしたうえで、環境変数を取り出します。

詳しいpython-dotenvの使い方が知りたい人はこちらをご覧ください。

データベースの設定は下記のとおりになります

DATABASES = {
     'default': {
         'ENGINE': 'django.db.backends.postgresql_psycopg2',
         'NAME': os.environ.get("name_db"),
         'USER': os.environ.get("user_db"),
         'PASSWORD': os.environ.get("pswd_db"),
         'HOST': 'localhost',
         'PORT': '5432',
     }

githubレポジトリと連携

こちらの記事を参考にgithubレポジトリと連携しましょう↓

.gitignoreを下記のとおりにします

「auth」や「venv」があってはまずいのと他にも公開したくないものがあれば載せておきましょう(コピペ可能)

#cutomize
fixtures/
auth/
settings.bak
base.py

# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
pip-wheel-metadata/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# PyInstaller
#  Usually these files are written by a python script from a template
#  before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/

# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal

# Sphinx documentation
docs/_build/

# IPython
profile_default/
ipython_config.py

# pyenv
.python-version

# PEP 582; used by e.g. github.com/David-OConnor/pyflow
__pypackages__/

# Environments
venv/

おわりに

以上でローカル環境で行っておきたい設定変更は完了です

まとめると、以下の3つがポイントになります。

  1. データベースの変更(postgreSQL)と再設定
  2. settings.py等のフォルダ構成の変更(最終的なフォルダ構成)
  3. githubレポジトリにプロジェクトを登録

ローカル環境での準備が整ったところで、次はプロダクション環境を整えていきます

まずはWebサーバー構築のための土台作り!

公開までの流れも含めてご説明してますので、まずはご一読頂くことをオススメします!