【Django】Heroku への最短デプロイガイド|Procfile / requirements.txt / static / Postgres + ジョブスケジューラ

スポンサードリンク



Django · Deploy · Heroku への公開

開する手段の入門としては Heroku が最も手軽な選択肢の一つです(無料枠は終了したものの、低価格プランで個人プロジェクトを動かせます)。本記事では、Django プロジェクトを Heroku に最短でデプロイし、ジョブスケジューラ(Heroku Scheduler)で定期実行する手順を、初学者向けに解説します。requirements.txt / Procfile / runtime.txt 設定、Postgres アドオン、static ファイル(WhiteNoise)対応まで一通り。

以前からDjangoアプリをHerokuにデプロイして一般公開できる環境を構築したいと思っていたのですが、何となく面倒くさそうなイメージがあり手を付けていませんでした。

DjangoデモアプリをHeroku上に公開したいという目的があったため、実際にDjangoアプリをHerokuにデプロイして、Djangoカスタムコマンドをスケジュール実行するところまで出来たので、手順を記事にまとめました。

user@sinyblog:~/article 01_django.mdDjango環境

今回は、以下のモジュール構成で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)を入れることで問題なくデプロイできるようになりました。

user@sinyblog:~/article 02_section_2.md事前準備

 

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でインストールします。

python


pip install dj-database-url

pip install gunicorn

pip install django-heroku

pip install whitenoise == 3.3.1

 

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

requirements.txtの作成

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

python


pip freeze > <Path>\requirements.txt

 

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

 

Procfileの作成

Djangoプロジェクトフォルダ直下にProcfileというファイルを作成して以下のように編集します。

python


web: gunicorn books.wsgi

 

settings.pyの設定

settings.pyに以下のコードを追記します。

python


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を新規作成します。

python


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)の末尾に以下のコードを追記します。

python


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)

 

user@sinyblog:~/article 03_heroku_django.mdHerokuへのDjangoデプロイ手順

DOSを起動し、Djangoプロジェクトフォルダが存在するディレクトリへ移動しておきます。

heroku logonコマンドを実行してHerokuにログオンします。

以下の画面が表示されるのでEnterキーを押しましょう。

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

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

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

heroku create <アプリケーション名>コマンドを実行してHeroku上にアプリケーションを作成します。

以下は、rakuten-bookというアプリケーションを作成した場合の例です。

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

以下のコマンドを実行してHerokuのConfig設定を一部修正しておきます。

default


heroku config:set DISABLE_COLLECTSTATIC=1

 

 上記設定を忘れるとデプロイが失敗ケースがあるようなので注意してください。

Gitのデプロイコマンドを実行

 

Djangoプロジェクトフォルダが存在するディレクトリ上で以下のコマンドを実行します。

default


git init	

git add ./books	

git commit -m "first commit"	

git push heroku master	

 

Herokuへのデプロイ処理が始まるので、以下のような画面が出るまで待機します。

以下のコマンドを実行するとHerokuのログ内容を確認することができます。

default


heroku logs -n 100

 

デプロイが正常した場合は、ログの最後に「Build succeded」と表示されます。

 Herokuデプロイが異常終了した場合は、上記のログ参照コマンドでエラー箇所を特定していきます。

数十行くらいだとエラー箇所が表示されない場合があるので、300行くらい表示させた方がよいと思います。

 

以下のコマンドを実行してHerokuのHTTPプロセスを起動しておきます。

default


heroku ps:scale web=1

 

以上でHerokuへのデプロイは完了です。

 

Djangoのマイグレーションを実行

DJangoのマイグレーションの実行と、管理者ユーザを作成しておきます。

Herokuにログオンした状態のDOS画面で以下のコマンドを実行します。

default


heroku run python manage.py makemigrations

heroku run python manage.py migrate

heroku run python manage.py createsuperuser

 

Herokuのアプリサイトにアクセスしてアプリ画面が表示できることを確認しましょう!

https://<アプリケーション名>.herokuapp.com/

 

以上でDjangoのHerokuデプロイは完了です。

 

user@sinyblog:~/article 04_django.mdDjangoカスタムコマンドをスケジュール

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へデプロイしてジョブスケジュール」までの手順の説明でした。

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

 

 

 

おすすめの記事