
目次
はじめに
これまでに Django で作成したアプリケーションを Azure > GCP (GAE Flexible) とデプロイ先を移行してきましたが、今度は Heroku へと移行することにしました。 前回、既存の Django アプリケーションを Heroku へデプロイする手順のうち、下記についてまとめました。
- Heroku の設定
- settings.py の修正
- 設定ファイル(runtime.txt,requirements.txt,Procfile)の作成
- Heroku にデプロイする
- データベースのマイグレーション
設定ファイルの作成
runtime.txt の作成
Python のバージョンを記述した runtime.txt を ~/workspace/myapp に置きます。
python-3.6.6
おまけSpecifying a Python Runtime | Heroku Dev Center によれば、2018/08/15 現在では、python-3.7.0 と python-3.6.6 が利用できるようです。ご自身の環境に合わせて設定してください。
requirements.txt の作成
requirements.txt は、Python の実行に必要なパッケージを記述したファイルです。下記を実行すれば作成できます。
$ pip freeze > requirements.txt
なお、requirements.txt に記述されたパッケージに依存するパッケージは自動的にインストールされます。したがって、requirements.txt にすべてのパッケージを書く必要はなく、必須のものだけを記述しておけば良いでしょう。
下記は一例です。
Django==2.0.1 psycopg2-binary==2.7.5 django-debug-toolbar==1.9.1 wheel==0.30.0 python-dateutil==2.6.1 django-heroku==0.3.1 gunicorn==19.7.1
作成した requirements.txt を ~/workspace/myapp に置きます。
Procfile の作成
Procfile には、Heroku 上でのアプリケーション動作を定義します。下記のように記述します。
web: gunicorn appname.wsgi --log-file -
appname は Django のアプリケーション名です。Heroku の URL が呼ばれると appname/wsgi.py が gunicorn によって実行されます。Procfile も ~/workspace/myapp に置きます。
Heroku にデプロイする
Heroku へのデプロイは git で Heroku のリモートリポジトリ (heroku) の master ブランチへ push するだけです。下記の出力は一例です。
$ git push heroku master Counting objects: 1555, done. Delta compression using up to 12 threads. Compressing objects: 100% (540/540), done. Writing objects: 100% (1555/1555), 668.12 KiB | 83.51 MiB/s, done. Total 1555 (delta 861), reused 1536 (delta 852) remote: Compressing source files... done. remote: Building source: remote: remote: -----> Python app detected remote: -----> Installing python-3.6.6 ・ ・ remote: -----> $ python manage.py collectstatic --noinput ・ ・ remote: -----> Launching... remote: Released v4 remote: https://heroku-myapp.herokuapp.com/ deployed to Heroku remote: remote: Verifying deploy... done. To https://git.heroku.com/heroku-myapp.git * [new branch] heroku -> master
上記出力にあるように、途中で manage.py collectstatic も自動的に実行されています。
データベースのマイグレーション
Heroku 上で必要なデータベーステーブルを作るために migrate, createsuperuser (管理用ユーザが必要な場合) を実行します。
$ cd ~/workspace/myapp $ heroku run python manage.py migrate $ heroku run python manage.py createsuperuser
おすすめすでに初期化したデータベースが手元にある場合は、上記を実行する代わりに Heroku とローカルの PostgreSQL 間のデータコピー の記事を参考にローカルから Heroku へデータをコピーすると楽です。
ここまででアプリケーションにアクセスできるようになったはずです。