こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!
- DjangoアプリをデプロイしWeb公開したい
- DjangoアプリをHEROKUでデプロイする方法が知りたい
【Salesforce】Herokuとは
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公開するために必要なデプロイ設定を行います。
- Djangoプロジェクト・アプリ作成
- Pythonライブラリのインストール
- デプロイ設定(settings.py)
Djangoプロジェクト・アプリ作成
Djangoプロジェクトおよびアプリを作成しておきましょう。作成が未済の方はこちらの記事をご覧下さい。
【Django】開発環境構築・プロジェクト開始チュートリアル|Python・Webアプリ作成入門#1
この記事は「Djangoフレームワークを活用したウェブアプリをゼロから開発したい方向け」です。事前に必要な環境設定方法や新規プロジェクト作成、簡易なWebアプリ作成に至るまでの流れを全て網羅した内容となっております。
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セットアップファイルを作成してきます。
- Pythonバージョンを指定するためのruntime.txt
- Pythonライブラリをインストールするためのrequirements.txt
- 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します。
- Gitをダウンロード
- GitHubにリモートリポリジトリを作成
- ローカルPCにローカルリポジトリを作成
- Djangoアプリをローカルリポジトリに追加
- ローカルリポジトリにコミット
- ローカルリポジトリにリモートリポジトリの情報追加
- ローカルリポジトリをPushしてリモートリポジトリへ反映
gitをダウンロード
GitHubとは、ソフトウェア開発プロジェクトのためのソースコード管理サービスになります。
Gitのダウンロードが未済の方は上記リンクにアクセスし、ダウンロードしましょう。
GitHubにリモートリポジトリを作成
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上でデプロイ作業を実行します。
- Herokuアプリを作成
- HerokuアプリとGitHubを連携
- Herokuアプリと連携するGitHubリモートレポジトリを選択
- Djangoアプリのデプロイ
Herokuアプリを作成
上記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 Command Line Interface (CLI) とは、Herokuアプリをターミナルから直接、作成・管理できるものです。
上図の流れに従い、Heroku CLIを用いてDjangoアプリをデプロイする方法についても解説します。
- Heroku CLIのインストール
- Heroku CLIにログイン
- Herokuにアプリを作成
- 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でできること・お仕事探し
最後に
お問い合わせフォーム
上記課題に向けてご気軽にご相談下さい。
お問い合わせはこちら