ジャンゴ(django)プロジェクトをヘロク(Heroku)へアップロードする

2019-06-03

ジャンゴ(django)プロジェクトを実際サービスで使うためヘロク(Heroku)サービスへアップロードしてウェブサービスを提供する方法について説明します。

개요

ジャンゴ(django)で作ったプロジェクトをウェブサービスをするためヘロク(Heroku)にジャンゴ(django)プロジェクトをアップロードしてウェブサービスを開始してみましょう。

このブログはシリーズです。下記のリンクでシリーズの他の記事を見ることができます。

また、このブログシリーズで説明したソースコードはgithubに公開されております。下記のリンクで確認できます。

ヘロク(Heroku)会員登録

ヘロク(Heroku)サービスを使うためにはヘロク(Heroku)サービスに会員登録する必要があります。下記のリンクを押してヘロク(Heroku)サービスへ会員登録やログインをします。

会員登録やログインは一般サービスの会員登録やログインの手続きと一緒なので詳しく説明は省略します。

ジャンゴ(django)プロジェクトヘロク(Heroku)アップロード - 会員登録

ヘロク(Heroku)アプリ生成

ヘロク(Heroku)でウェブサービスを運営するためにはヘロク(Heroku)にアプリ(App)を作る必要があります。

会員登録やログインした後、下記のようにダッシュボード(Dashboard)画面が見えます。Create new appを押して新しアプリを生成します。

ジャンゴ(django)プロジェクトヘロク(Heroku)アップロード - アプリ生成

ヘロク(Heroku)アプリを生成するため、アプリ情報を入力します。無料なので地域はアメリカ(United State)とヨーロッパ(Europe)しか選択できません。アプリの情報を入力したらCreate appを押してアプリを生成します。

ジャンゴ(django)プロジェクトをヘロク(Heroku)へアップロード - アプリ情報入力

ヘロク(Heroku) CLI インストール

私たちはヘロク(Heroku)のCLI(Command Line Interface)を使って私たちが作ったジャンゴ(djanog)プロジェクトをヘロク(Herkou)へアップロード(Deploy)する予定です。下記のリンクを押して各OSに会うヘロク(Heroku) CLIをダウンロードしてください。このブログではmacOSを基準として説明します。를

macOSには下記のコマンドでヘロク(Heroku) CLIをインストールすることができます。

brew tap heroku/brew && brew install heroku

ヘロク(Heroku)ログイン

ヘロク(Heroku)へウェブサービスをデプロイ(Deploy)するためには、ヘロク(Heroku) CLIを使ってヘロク(Heroku)にログインする必要があります。下記のコマンドを使ってヘロク(Heroku)サービスにログインします。

heroku login

上のヘロク(Heroku)コマンドを実行すると、下記のようにログイン画面がウェブブラウザに表示されます。Log inボタンを押してログインします。

ジャンゴ(django)プロジェクトをヘロク(Heroku)へアップロード - ヘロクログイン

ログインが完了されたら下記のようにログイン成功画面が表示されます。

장고(django) 프로젝트 헤로쿠(Heroku) 업로드 - 헤로쿠 로그인 성공

またはヘロク(Heroku)コマンドを使ったターミナルで下記のようにログイン成功メッセージを確認することができます。

heroku: Press any key to open up the browser to login or q to exit:
Opening browser to https://cli-auth.heroku.com/auth/browser/f844937e-aaaf-4620-998f-1f938ed3dea7
Logging in... done
Logged in as dev.yakuza@gmail.com

ジャンゴ(django)プロジェクト修正

ヘロク(Heroku)サービスへデプロイ(Deploy)する準備が終わりました。私たちはジャンゴ(django)プロジェクトをヘロク(Heroku)サービスで起動するため修正する必要があります。manage.pyがあるフォルダでProcfileファイルを生成して下記のように修正します。

web: gunicorn django_exercise.wsgi --log-file -

上の内容でdjango_exercise.wsgiの部分を自分のプロジェクト名前で更新してください。([project name].wsgi)私たちはgunicornと言うパイソンHTTPサーバー(Python WSGI HTTP Server)を使ってウェブサービスをすることをヘロク(Heroku)に知らせます。

下記のコマンドでヘロク(Heroku)でジャンゴ(django)を使うため必要なモジュールをインストールします。

# source venv/bin/activate
pip install gunicorn dj-database-url psycopg2-binary whitenoise
  • gunicorn: 上で説明したパイソンHTTPサーバー(Python WSGI HTTP Server)です。
  • dj-database-url, psycopg2-binary: ヘロク(Heroku)はpostgresqlを使います。そこに必要な設定モジュールです。
  • whitenoise: ヘロク(Heroku)でStaticファイルを使うため必要なモジュールです。

インストールが完了されたら下記のコマンドでrequirements.txtを更新します。

pip freeze > requirements.txt

更新したら、dajgno_exercise/settings.pyを開いて下記のように修正します。

...
import dj_database_url
...
ALLOWED_HOSTS = ['127.0.0.1', '.herokuapp.com']
...
MIDDLEWARE = [
    'whitenoise.middleware.WhiteNoiseMiddleware',
    ...
]
...
db_from_env = dj_database_url.config(conn_max_age=500)
DATABASES['default'].update(db_from_env)

そして、私たちはヘロク(Heroku)に私たちのジャンゴ(django)プロジェクトがどのバージョンのパイソン(python)を使ってるか知らせる必要があります。下記のコマンドでパイソン(python)のバージョンをチェックします。

# source venv/bin/activate
python --version
# Python 3.7.2

パイソン(python)のバージョンが確認できたらmanage.pyがあるフォルダでruntime.txtを生成した後、下記のように修正します。

python-3.7.2

最後にジャンゴ(djanog)を本番(Production)にデプロイする時は、Debugモードを使わないようにする必要があります。django_exercise/settings.pyを開いて下記のように修正します。

...
DEBUG = False
...

今まで作った内容を私たちが管理するgitに保存します。

git add .
git commit -m 'prepare to deploy'
git push origin master

デプロイ(Deploy)

全ての準備が終わりました。今からヘロク(Heroku)へ私たちのジャンゴ(django)プロジェクトをデプロイ(Deploy)してみましょう。下記のコマンドでgitのremoteへヘロク(Heroku)を追加します。

heroku git:remote -a djangoexercise

下記のコマンドでうまく追加されたか確認します。

git remote -v

そしたら下記のようにgitのremoteへヘロク(Heroku)が追加されたことが確認できます。

heroku  https://git.heroku.com/djangoexercise.git (fetch)
heroku  https://git.heroku.com/djangoexercise.git (push)
origin  https://github.com/dev-yakuza/django_exercise.git (fetch)
origin  https://github.com/dev-yakuza/django_exercise.git (push)

下記のコマンドでデプロイ(Deploy)します。

git push heroku master

ヘロク(Heroku)はgitを基盤にしてデプロイ(Deploy)します。上のコマンドですでに私たちのジャンゴ(django)のプロジェクトはヘロク(Heroku)へデプロイ(Deploy)されました。今からは私たちが作ったmigrationを使って新しくデーターベースを構築して、管理者を生成します。下記のコマンドでデーターベースを構築します。

heroku run python manage.py migrate

下記のコマンドでジャンゴ(django)の管理者を生成します。

heroku run python manage.py createsuperuser

確認

私たちがヘロク(Heroku)へデプロイしたジャンゴ(django)のプロジェクトを確認してみましょう。下記のコマンドで私たちが作ったサイトがウェブブラウザへ表示させます。

heroku open

下記のように私たちが作ったジャンゴ(django)プロジェクトがうまく表示されることが確認できます。

ジャンゴ(django)のプロジェクトを(Heroku)へアップロード - ヘロクデプロイ確認

URLの後ろに/adminを入力して管理画面に移動してみます。

ジャンゴ(django)のプロジェクトを(Heroku)へアップロード - ジャンゴ管理画面ログイン画面

私たちがコマンドで生成したsuperuserでログインしてみます。

ジャンゴ(django)のプロジェクトを(Heroku)へアップロード - ジャンゴ管理画面

私たちが開発したPostモデル(Model)が表示することが確認できます。

完了

これでジャンゴ(django)のプロジェクトをヘロク(Heroku)へデプロイ(Deploy)してみました。私たちはもうジャンゴ(django)で簡単なウェブサービスを提供する能力を持つようになりました。今後このブログではサービスを開発した時わかった内容まとめる要諦です。

Buy me a coffeeBuy me a coffee
Posts