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

deploy-settings-djangoDjango

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

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

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

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

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

を実行していきます

✔月9,800円でWebデザインが学べる

デザナルは、Webデザインに苦手意識がある方におすすめのサブスク型スクールです。

特徴は以下の通り。

  • 初期費用不要
  • 教材が使い放題
  • 案件で収入も得られる

デザナルは稼ぎながら学べる、格安のWebデザインスクールです。

>>詳細はこちら<<

安いWebデザインスクール「デザナル」を徹底分析

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

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

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

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

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

PostgreSQL specific model fields | Django ドキュメント | Django

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

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

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

フォルダ構成の変更

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

デプロイチェックリスト | Django ドキュメント | Django

特に次章でもご説明する通り、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」フォルダに.cnfなどの拡張子をつけ、パスワードを保存していきましょう

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

 ├── auth
        ├── name_db.cnf #データベース名を保存
        ├── pswd_db.cnf #データベースのパスワードを保存
        ├── secret_key.cnf #SECRET_KEYを保存
        └── user_db.cnf #データベースでのユーザー名を保存

各ファイルには保存したい文字列のみ保存しています

local.pyで情報を取り出す

with open(f'{PARENT_DIR}/auth/secret_key.cnf') as f:
    secret_key = f.read().strip()

SECRET_KEY = secret_key

保存した文字列をすべて同じように取り出していきましょう

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

with open(f'{PARENT_DIR}/auth/name_db.cnf') as f:
    name_db = f.read().strip()

with open(f'{PARENT_DIR}/auth/pswd_db.cnf') as f:
    pswd_db = f.read().strip()

with open(f'{PARENT_DIR}/auth/user_db.cnf') as f:
    user_db = f.read().strip()

DATABASES = {
     'default': {
         'ENGINE': 'django.db.backends.postgresql_psycopg2',
         'NAME': name_db,
         'USER': user_db,
         'PASSWORD': 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/

おわりに

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

まとめると、

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

の3つでした

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

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

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

当ブログでは、日報アプリ開発を通じて、Webアプリを一から開発し公開するまでを初学者の方でもわかるようにと記事を連載しています

「Djangoでのアプリ開発を学びたい!」
「Djangoで開発したアプリをWebで公開するにはどうするの?」

という方は必見です!

【Django】チュートリアル|日報アプリの開発から公開まで
Djangoのチュートリアルをお探しですか?具体的に「手を動かして作ってみたい!」という方へ向けて、誰でもできる簡易的な日報アプリの開発を通じて、Djangoの様々な機能に触れていくシリーズとなっています。PythonでWebアプリを作りたい方、必見の記事となります!

タイトルとURLをコピーしました