【Python】HerokuにDjangoアプリをデプロイ・Web公開|GitHub連携も言及

当ページには広告が含まれています。

こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!

こんな方におすすめ!
  • DjangoアプリをデプロイしWeb公開したい
  • DjangoアプリをHEROKUでデプロイする方法が知りたい
目次

【Salesforce】Herokuとは

【Heroku】https://www.heroku.com/home

Herokuとは、Salesforceが提供するPaaS(Platform as a Service)の一種であり、Webアプリケーションやサービスを開発・デプロイするためのクラウドプラットフォームです。

Herokuの利用メリット

Heroku利用上のメリットには、次のようなものがあります。

簡単なデプロイ

Herokuは、Gitを使ったデプロイが可能であり、コマンド1つでアプリケーションをデプロイできます。

また、Herokuが提供するビルドパックを活用すると、開発言語やフレームワークに合わせた環境を自動的にセットアップすることができます。

スケーラビリティ

Herokuは、アプリケーションのスケールアップが容易です。Herokuのプランによっては、自動スケーリング機能も提供されています。

多様なプログラミング言語およびフレームワークに対応

Herokuでは、Java、Ruby、Python、Node.js、PHP、Goなど、多様なプログラミング言語およびフレームワークに対応しています。

セキュリティ

Herokuは、セキュリティにも配慮しており、SSL対応やアクセス制限などのセキュリティ機能が提供されています。

低コストでサービス公開可能

Herokuは、$5〜のプランに格安プランからアプリ公開することができます。

詳しくは、Herokuの価格をご覧下さい。

【概要】DjangoアプリをHerokuへデプロイする方法・Git連携

本記事で解説するDjangoアプリをHerokuへ公開する流れを上図に示します。

まず、お手元のローカル環境でDjangoアプリを作成し、GitHubのリモートリポジトリへPushします。

続いてGitHubとHerokuを連携させ、最後にDjangoアプリをデプロイ・Web公開します。

【Django】Webアプリ作成・デプロイ設定

はじめに、ローカル環境でDjangoプロジェクトおよびアプリを作成します。続いて、HEROKUをもとにアプリをWeb公開するために必要なデプロイ設定を行います。

  1. Djangoプロジェクト・アプリ作成
  2. Pythonライブラリのインストール
  3. デプロイ設定(settings.py)

Djangoプロジェクト・アプリ作成

Djangoプロジェクトおよびアプリを作成しておきましょう。作成が未済の方はこちらの記事をご覧下さい。

Pythonライブラリのインストール

HerokuでのDjangoアプリ起動に際して、必要なPythonライブラリを事前にインストールします。

gnicon

pip install gunicorn

django-on-heroku

pip install django-on-heroku

デプロイ設定(settings.py)

DjangoアプリをHerokuをもとにデプロイするために、settings.pyを一部修正します。

以下、それぞれ対応しましょう。

① Pythonライブラリの追加

Pathをインポートしている部分の下に、以下のコードを追記します。

Before

from pathlib import Path

After

from pathlib import Path
import django_on_heroku
import dj_database_url
② staticのディレクトリ設定

前述でインポートしたdjango_on_herokuに対して、主にCSSやJavaScriptファイルを格納するstaticフォルダのディレクトリを紐付けます。STATIC_URL直下に次のコードを追記しましょう。

Before

STATIC_URL = 'static/'

After

STATIC_URL = 'static/'
STATIC_ROOT = BASE_DIR / "static"
STATICFILES_DIRS = [STATIC_DIR,]

django_on_heroku.settings(locals())
③ ドメインのアクセス設定

Web公開後にアクセス許可するドメイン設定を行います。

今回は、どのドメインからでもアクセスできるように設定します。

Before

ALLOWED_HOSTS = []

After

ALLOWED_HOSTS = ['*']

【Django】Heroku用Pythonセットアップファイル作成

Djangoアプリ作成後、Herokuでのデプロイ時に必要なPythonセットアップファイルを作成してきます。

  1. Pythonバージョンを指定するためのruntime.txt
  2. Pythonライブラリをインストールするためのrequirements.txt
  3. Djangoアプリを起動するProcfile

runtime.txtの作成

runtime.txtとは、HerokuでDjangoアプリを実行する際、Pythonバージョンを指定するためのファイルです。

ディレクトリ

はじめに、manage.pyと同じ階層にruntime.txtというファイルを作成します。

Django Project
|_ Django Project
|_ Django Application
|_ db.sqlite3
|_ manage.py
|_ runtime.txt             ★追加

runtime.txt

続いて、runtime.txtを開き、利用中のPythonバージョンを記述します。例えば、Python 3.9.5を利用の際は、次のように記述すると良いです。

※HerokuでサポートしているPythonバージョンは、HerokuのPythonサポートで確認しましょう。

python-3.9.14

requirements.txtの作成

requirements.txtとは、HerokuでDjangoアプリ実行の際に必要なPythonライブラリをインストールするための要件ファイルです。

ディレクトリ

はじめに、manage.pyと同じ階層にrequirements.txtというファイルを作成します。

Django Project
|_ Django Project
|_ Django Application
|_ db.sqlite3
|_ manage.py
|_ runtime.txt       
|_ requirements.txt        ★追加

requirements.txt

続いて、requirements.txtにDjangoアプリ起動に必要なライブラリを記述しましょう。

例えば、次のように記載します。

dj-database-url==0.5.0
Django==3.2.4
django-on-heroku==1.1.2
gunicorn==20.1.0
psycopg2-binary==2.9.6
whitenoise==6.4.0

Procfileの作成

Procfileとは、Djangoアプリ実行を命令するコマンドが記載されたHerokuファイルです。

ディレクトリ

はじめに、manage.pyと同じ階層にProcfileというファイルを作成します。

※拡張子は特段指定せず、Procfileという名称でファイルを作成すると良いです。Herokuファイルとして自動で認識してくれます。

Django Project
|_ Django Project
|_ Django Application
|_ db.sqlite3
|_ manage.py
|_ runtime.txt  
|_ requirements.txt
|_ Procfile                 ★追加

Procfile

Procfileには、次のようなDjangoアプリ実行コマンドを記述します。

web: gunicorn <Djangoプロジェクト名>.wsgi:application --log-file -

例えば、Djangoプロジェクト名がmydjangoProjectである場合、次のように入力します。

web: gunicorn mydjangoProject.wsgi:application --log-file -

【GitHub】リモートリポジトリにDjangoアプリ公開

続いて、前述で作成したDjangoアプリをGitHubへPushします。

  1. Gitをダウンロード
  2. GitHubにリモートリポリジトリを作成
  3. ローカルPCにローカルリポジトリを作成
  4. Djangoアプリをローカルリポジトリに追加
  5. ローカルリポジトリにコミット
  6. ローカルリポジトリにリモートリポジトリの情報追加
  7. ローカルリポジトリをPushしてリモートリポジトリへ反映

gitをダウンロード

gitダウンロード:https://git-scm.com/downloads

GitHubとは、ソフトウェア開発プロジェクトのためのソースコード管理サービスになります。

Gitのダウンロードが未済の方は上記リンクにアクセスし、ダウンロードしましょう。

GitHubにリモートリポジトリを作成

gitリポジトリ:https://github.com/new

GutHubにログインし、リポジトリを作成しましょう。

ローカルPCにローカルリポジトリを作成

ローカルPC上にリポジトリを作成します。コマンドプロンプト(Windows)またはターミナル(MacOS)を開き以下を作業を実施してきましょう。

Djangoアプリのディレクトリに移動

Djangoプロジェクトおよびmanage.pyがあるディレクトリに移動します。

|_ Django Project
|_ Django Application
|_ db.sqlite3
|_ manage.py
|_ runtime.txt  
|_ requirements.txt
|_ Procfile                 

ローカルリポジトリを作成

前述のディレクトリ上で、以下のコマンドを実行し、ローカルリポジトリを作成します。

git init 

Djangoアプリをローカルリポジトリに追加

Djangoアプリのファイル群をローカルリポジトリに追加します。前述と同じディレクトリ上で以下のコマンドを実行し、インデックスに追加します。

git add .

※インデックスとは、ローカルリポジトリへのコミット準備のための変更内容を一時的に保存する場所です。

インデックス状況を確認

インデックスにDjangoアプリに追加した後、状態を確認しましょう。

git status

次のような結果が得られます。

On branch main
Changes to be committed:
 (use "git restore --staged <file>..." to unstage)
 new file: xxxx.py
 new file: xxxx.html
 new file: xxxx.css

ローカルリポジトリにコミット

コミットとは、ファイルやディレクトリの追加・変更をローカルリポジトリに記録する操作です。

インデックスに追加されたファイルをコミットします。

git commit -m "add file"

ローカルリポジトリにリモートリポジトリの情報追加

ローカルリポジトリに、リモートリポジトリの情報を紐付けます。リモートリポジトリのURLを指定した次のコマンドを実行しましょう。

git remote add origin https://github.com//xxxxxxxx.git

ローカルリポジトリをPushしてリモートリポジトリへ反映

Pushとは、ローカルリポジトリのファイルやディレクトリをリモートリポジトリにアップロードするために使用するコマンドです。

GitHubのメインブランチを指定した次のようなコマンドを実行しましょう。

git push origin main

これでGitHubへのDjangoアプリ公開は完了しました。

【Django】GitHub連携とHerokuでのデプロイ・Web公開

最後に、前述でGitHubに公開したDjangoアプリのソースコードをHerokuに連携し、Heroku上でデプロイ作業を実行します。

  1. Herokuアプリを作成
  2. HerokuアプリとGitHubを連携
  3. Herokuアプリと連携するGitHubリモートレポジトリを選択
  4. Djangoアプリのデプロイ

Herokuアプリを作成

【HEROKU新規アプリ作成】https://dashboard.heroku.com/new-app

上記URLからHerokuアプリを作成します。このアプリ内にGitHubに公開したDjangoアプリのソースコードを連携していきます。

【参考】クレジットカード情報の登録

Herokuアプリ利用に際して、クレジットカード登録が未済の場合、https://heroku.com/verifyを開き、クレジットカード情報を登録しておきましょう。

HerokuアプリとGitHubを連携

前述で作成したHerokuアプリのDeployタブを開き、GitHubを連携します。

Herokuアプリと連携するGitHubリモートレポジトリを選択

Herokuアプリと連携するGitHubリモートレポジトリを指定しましょう。

Djangoアプリのデプロイ(1)

GitHubリモートレポジトリのメインブランチを指定し、自動デプロイを有効化します。

Djangoアプリのデプロイ(2)

最後に、「Deploy Branch」をクリックし、DjangoアプリをHeroku上にデプロイします。

デプロイが無事完了後、Web上に公開されたDjangoアプリを確認するためのボタンが表示されます。

これでHerokuへのDjangoアプリの公開は以上となります!

【参考】HEROKU CLIを用いてDjangoアプリをリリース

Heroku CLI:https://devcenter.heroku.com/ja/articles/heroku-cli

Heroku Command Line Interface (CLI) とは、Herokuアプリをターミナルから直接、作成・管理できるものです。

上図の流れに従い、Heroku CLIを用いてDjangoアプリをデプロイする方法についても解説します。

  1. Heroku CLIのインストール
  2. Heroku CLIにログイン
  3. Herokuにアプリを作成
  4. Heroku GitのリモートレポジトリにDjangoアプリを公開

Heroku CLIのインストール

Heroku CLIをインストールしましょう。

MacOSの場合

ターミナルを開き、次のコマンドを実行します。

brew tap heroku/brew && brew install heroku
Windowsの場合

Getting Started Heroku with Pythonを開き、Heroku CLIをダウンロードします。

Heroku CLIにログイン

コマンドライン

Heroku CLIのインストール完了後、ローカルのコマンドライン経由でHerokuにログインします。

heroku login

上記実行後、以下のようなメッセージが表示されるため、Enterを押下します。

Press any key to open up the browser to login or q to exit: 

ログイン画面

上記コマンド実行後、ログイン画面が立ち上がります。ブラウザがすでに Heroku にログインしている場合は、ページに表示される 「ログイン」 ボタンをクリックしましょう。

コマンドライン

前述のログイン認証が成功すると、次のような結果が得られます。

heroku: Press any key to open up the browser to login or q to exit
 ›   Warning: If browser does not open, visit
 ›   https://cli-auth.heroku.com/auth/browser/***
heroku: Waiting for login...
Logging in... done
Logged in as me@example.com

Herokuにアプリを作成

Herokuアプリを作成し、その中にDjangoアプリのソースコードを連携していきます。

コード

以下のコマンドを実行し、Herokuアプリを作成しましょう。

heroku create <アプリ名>

例えば、Herokuアプリ名がmy_first_appの場合、次のように実行します。

heroku create my_first_app

出力結果

Herokuアプリ作成後、Herokuアプリと連携するGitリモートレポジトリのURL(https://xxx.git)が出力されます。後続で利用するため、お手元にメモとして残しておきましょう。

Creating ⬢ my-first-app... done
https://my-first-app.herokuapp.com/ | https://git.heroku.com/my-first-app.git

Heroku GitのリモートレポジトリにDjangoアプリを公開

前述で得られたGitリモートレポジトリにDjangoアプリを公開します。

はじめに、以下のコードを実行しローカルリポジトリを作成しましょう。ここで、gitのダウンロードが未済の場合事前にダウンロードしておきましょう。

git init 

続いて、以下のコマンドを実行し、リモートレポジトリを指定します。

git remote add heroku https://git.heroku.com/my-first-app.git

続いて、Djangoアプリをローカルレポジトリのインデックスに追加します。

git add .

さらに、ローカルリポジトリをコミットします。

git commit -m "add files"

最後に、リモートレポジトリのメインブランチにプッシュします。

git push heroku main

【参考】Djangoの解説記事一覧

最後までご覧いただきありがとうございました。当サイトではDjangoフレームワークを用いた解説記事を多数取り扱っております。次のように体系的に整理しておりますため学習にお役立て下さい。

Django学習に最適!

当サイトが運営するDjango記事一覧

【参考】Pythonでできること・お仕事探し

最後に

この記事が気に入ったら
フォローしてね!

本記事をシェア!
目次