💬

DjangoをHerokuでデプロイするための初期設定

2024/07/23に公開

Djangoで開発するための準備

まずはプロジェクトのディレクトリを作成する。

mkdir mysite

作成したディレクトリに移動して

cd mysite

mysiteディレクトリ内に.gitignoreを作成する。

.gitignore
myvenv
.vscode
__pycache__
*.pyc
.DS_Store
.env
media_local
db.sqlite3

仮想環境の作成

python3 -m venv myvenv

仮想環境を有効化する。

source myvenv/bin/activate

Windowsの場合

.\myvenv\Scripts\activate

requirements.txt 作成する。

requirements.txt
django==4.2.11
dj-database-url==2.1.0
dj-static==0.0.6
python-decouple==3.8
django-environ==0.11.2
gunicorn==21.2.0
psycopg2-binary==2.9.9
whitenoise==6.6.0
django-heroku==0.3.1

requirements.txtに記載したパッケージをインストールする。

(myvenv) mysite $ pip3 install -r requirements.txt

Djangoのプロジェクト作成

プロジェクトを作成する。
最後の「.」はディレクトリ直下にプロジェクトを作成するという意味です。

(myvenv) mysite $ django-admin startproject myproject .

環境設定の変更

settings.pyの変更と.envファイルを作成していきます。

settings.py
 from pathlib import Path
+ import os
+ import environ
+ from decouple import config
+ import dj_database_url

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

+ env = environ.Env()
+ env.read_env(os.path.join(BASE_DIR, '.env'))

- SECRET_KEY = 'django-insecure-×××××××××××××××××××××××××××××××××××'
+ SECRET_KEY = env('SECRET_KEY')

- DEBUG = True
+ DEBUG = env('DEBUG', default=False)

- ALLOWED_HOSTS = []
+ if DEBUG:
+     ALLOWED_HOSTS = ['*']
+ else:
+     ALLOWED_HOSTS = ['127.0.0.1', '.herokuapp.com']

 MIDDLEWARE = [
     'django.middleware.security.SecurityMiddleware',
+     # Herokuデプロイのために追加
+     'whitenoise.middleware.WhiteNoiseMiddleware',
 
     'django.contrib.sessions.middleware.SessionMiddleware',
     'django.middleware.common.CommonMiddleware',
     'django.middleware.csrf.CsrfViewMiddleware',
     'django.contrib.auth.middleware.AuthenticationMiddleware',
     'django.contrib.messages.middleware.MessageMiddleware',
     'django.middleware.clickjacking.XFrameOptionsMiddleware',
 ]

- DATABASES = {
-     'default': {
-         'ENGINE': 'django.db.backends.sqlite3',
-         'NAME': BASE_DIR / 'db.sqlite3',
-     }
- }
+ if DEBUG:
+     DATABASE_URL = 'sqlite:///' + str(BASE_DIR / 'db.sqlite3')
+     DATABASES = {'default': dj_database_url.config(default=DATABASE_URL)}
+ else:
+     DATABASES = {'default': dj_database_url.config(conn_max_age=600, ssl_require=True)}

- LANGUAGE_CODE = 'en-us'
+ LANGUAGE_CODE = 'ja'

- TIME_ZONE = 'UTC'
+ TIME_ZONE = 'Asia/Tokyo'

- STATIC_URL = 'static/'
+ # CSSファイルの設定
+ STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
+ STATIC_URL = 'static/'
+ STATICFILES_DIRS = (
+     os.path.join(BASE_DIR, 'static'),
+ )
+ STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
.env
SECRET_KEY=django-insecure-×××××××××××××××××××××××××××××××××××
DEBUG=True

参考記事

https://zenn.dev/hathle/books/django-render-book/viewer/00_first
https://qiita.com/kohei-kubota/items/d36590d066a449d78558
https://zenn.dev/treefield/articles/f6e8b879387d02

Discussion