
目次
こんにちは。sinyです。
以前からDjangoアプリをHerokuにデプロイして一般公開できる環境を構築したいと思っていたのですが、何となく面倒くさそうなイメージがあり手を付けていませんでした。
DjangoデモアプリをHeroku上に公開したいという目的があったため、実際にDjangoアプリをHerokuにデプロイして、Djangoカスタムコマンドをスケジュール実行するところまで出来たので、手順を記事にまとめました。
Django環境
今回は、以下のモジュール構成でHerokuにデプロイしました。
| 区分 | バージョン |
| クライアント OS |
windows10 |
| データベース | Sqlite (デフォルト) |
| Django | 2.1.4 |
| dj-database-url | 0.5.0 |
| gunicorn | 19.9.0 |
| whitenoise | 3.3.1 |
事前準備
gitをインストール
以下のサイトからGit InstallerをダウンロードしてPCにインストールします。
インストールはポチポチ進めるだけなので簡単です。
HerokuツールをPCにインストール
Download and installよりPC環境に適したインストーラーをダウンロードします。
今回はWindows10を利用したので、以下の通り64bit版のInstallerをダウンロード後に、ダウンロードした「heroku-x64.exe」を実行してインストールします。

Herokuの無料アカウントを取得
以下のサイトにアクセスして無料のHerokuアカウントを作成します。
CountryにJapan、言語は「Python」を選択して登録します。

Djangoプロジェクトの設定
まず、Herokuへデプロイするために必要な下記4つのモジュールをpipでインストールします。
pip install dj-database-url pip install gunicorn pip install django-heroku pip install whitenoise == 3.3.1
requirements.txtの作成
以下のコマンドでインストールモジュールをファイルに出力します。
pip freeze > <Path>\requirements.txt
Procfileの作成
Djangoプロジェクトフォルダ直下にProcfileというファイルを作成して以下のように編集します。
web: gunicorn books.wsgi
settings.pyの設定
settings.pyに以下のコードを追記します。
import django_heroku #冒頭に追加
###################################
# 末尾に以下を追加
###################################
# for Heroku
import dj_database_url
DATABASES['default'] = dj_database_url.config()
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
ALLOWED_HOSTS = ['*']
STATIC_ROOT = 'staticfiles'
DEBUG = False
try:
from .local_settings import *
except ImportError:
pass
# Activate Django-Heroku.
django_heroku.settings(locals())
続いて、settings.pyと同じディレクトリに以下の内容でlocal_settings.pyを新規作成します。
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
DEBUG = True
wsgi.pyの設定
Djangoプロジェクトサブフォルダ(プロジェクト\プロジェクト\wsgi.py)の末尾に以下のコードを追記します。
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'books.settings')
application = get_wsgi_application()
# ファイルの末尾に以下を追記
from whitenoise.django import DjangoWhiteNoise
application = DjangoWhiteNoise(application)
HerokuへのDjangoデプロイ手順
DOSを起動し、Djangoプロジェクトフォルダが存在するディレクトリへ移動しておきます。
heroku logonコマンドを実行してHerokuにログオンします。
以下の画面が表示されるのでEnterキーを押しましょう。

Herokuのログオン画面が表示されるのでユーザ、パスワードを入力してLog inボタンを押します。

以下の画面が表示されればOKです。

DOS画面を見ると、以下のようにログオン状態に変わります。

heroku create <アプリケーション名>コマンドを実行してHeroku上にアプリケーションを作成します。
以下は、rakuten-bookというアプリケーションを作成した場合の例です。

https://dashboard.heroku.com/appsにアクセスして作成したアプリケーションが表示されることを確認します。

以下のコマンドを実行してHerokuのConfig設定を一部修正しておきます。
heroku config:set DISABLE_COLLECTSTATIC=1
Gitのデプロイコマンドを実行
Djangoプロジェクトフォルダが存在するディレクトリ上で以下のコマンドを実行します。
git init git add ./books git commit -m "first commit" git push heroku master
Herokuへのデプロイ処理が始まるので、以下のような画面が出るまで待機します。

以下のコマンドを実行するとHerokuのログ内容を確認することができます。
heroku logs -n 100
デプロイが正常した場合は、ログの最後に「Build succeded」と表示されます。

数十行くらいだとエラー箇所が表示されない場合があるので、300行くらい表示させた方がよいと思います。
以下のコマンドを実行してHerokuのHTTPプロセスを起動しておきます。
heroku ps:scale web=1
以上でHerokuへのデプロイは完了です。
Djangoのマイグレーションを実行
DJangoのマイグレーションの実行と、管理者ユーザを作成しておきます。
Herokuにログオンした状態のDOS画面で以下のコマンドを実行します。
heroku run python manage.py makemigrations heroku run python manage.py migrate heroku run python manage.py createsuperuser
Herokuのアプリサイトにアクセスしてアプリ画面が表示できることを確認しましょう!
https://<アプリケーション名>.herokuapp.com/
以上でDjangoのHerokuデプロイは完了です。
Djangoカスタムコマンドをスケジュール
Heroku上でジョブをスケジュールするにはいくつか方法があるようですが、一番簡単なのは「Heroku Scheduler」を利用する方法です。
Heroku Schedulerは無料で利用できますが、クレジットカードを登録する必要があります。
HerokuサイトのプロフィールのAccount Settingsをクリックします。

「Billing」タブをクリックします。

「Add credit card」ボタンを押します。

必要事項を入力してクレジットカード情報を登録しましょう。
Address Line 2 :建物名、部屋番号
City :市、区
State/Province :都道府県
ZIP/Postal Code :郵便番号
Country :国
それではHeroku Schedulerツールを追加していきます。
HerokuのResourcesタブをクリックした下記画面のAdd-oneの欄に「Heroku Scheduler」と打ちこみEnterキーを押します。

以下の画面が表示されたら「Provision」ボタンを押します。

以下の画面が表示されたら「Heroku Scheduler」をクリックします。

以下の画面で「Add new job」を押します。

「$」の欄に実行したいDjangoカスタムコマンドを入力します。
また、FREQUENCY(頻度)とNEXT DUE(実行時刻)を指定し「Save」ボタンを押します。

以上でHeroku上でDjangoカスタムコマンドを自動実行する設定が完了します。
以上、「DjagnoをHerokuへデプロイしてジョブスケジュール」までの手順の説明でした。
みなさんの参考になれば幸いです。

