【入門者向け】DjagnoをHerokuへデプロイしてジョブスケジュール

スポンサードリンク



こんにちは。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

 

 whitenoiseは最新バージョンを入れるとデプロイに失敗してしまうようで、古いバージョン(3.3.1)を入れることで問題なくデプロイできるようになりました。

事前準備

 

gitをインストール

以下のサイトからGit InstallerをダウンロードしてPCにインストールします。

https://gitforwindows.org/

インストールはポチポチ進めるだけなので簡単です。

 

HerokuツールをPCにインストール

 

Download and installよりPC環境に適したインストーラーをダウンロードします。

今回はWindows10を利用したので、以下の通り64bit版のInstallerをダウンロード後に、ダウンロードした「heroku-x64.exe」を実行してインストールします。

Herokuの無料アカウントを取得

以下のサイトにアクセスして無料のHerokuアカウントを作成します。

https://signup.heroku.com/

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

 

 whitenoiseは最新バージョンを入れてデプロイに失敗した場合は、古いバージョン(3.3.1)を入れることで解決するようです。

requirements.txtの作成

以下のコマンドでインストールモジュールをファイルに出力します。

pip freeze > <Path>\requirements.txt

 

 仮想環境を利用している場合はActiveにした状態で実行しましょう

 

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」と表示されます。

 Herokuデプロイが異常終了した場合は、上記のログ参照コマンドでエラー箇所を特定していきます。
数十行くらいだとエラー箇所が表示されない場合があるので、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 1 :番地、町名
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へデプロイしてジョブスケジュール」までの手順の説明でした。

みなさんの参考になれば幸いです。

 

 

 

おすすめの記事