HerokuへPythonアプリ(Django)をデブロイする方法
HerokuへPythonアプリ(Django)をデブロイする方法を試したので、メモ。
最初、Django Girls Tutorial にあったHerokuへのデブロイ方法を試したのですが、Herokuの公式ドキュメント をみると、pipenvを使用したアプリのデブロイ方法で更新されていたのでそちらで試してみました。
Djangoの理解は、下記2つのページが大変役に立ちました。
- モダンDjango入門連載一覧:CodeZine(コードジン)
- 現在連載中なので、続きが早くみたい
- Django Girls Tutorial
Herokuとは
- PaaSを提供する事業者、および提供サービスであるPaaSの1つ
- PasS(Platform as a Service)は、アプリケーションを実行するためのプラットフォームをインターネット越しに使えるサービス
Herokuにアプリを公開するための準備
- Herokuアカウントのサインアップ => a free Heroku account
- Heroku Toolbeltのインストール => Heroku CLI
- Pipenv をインストール (pythonアプリの場合)
- Postgres をインストール(ローカルでアプリを動かしたい場合)
- Heroku 上でsqllite3 は使えないようです
Herokuを使うにあたり必要な知識
- herokuコマンド(Herokuを操作するために使用するコマンドラインツール)
- Git
Herokuにデブロイする方法
- 上記チュートリアルを一通りやると、DjangoのアプリをHerokuにデブロイする方法を一通り体験できます
- 英語ですが、とてもわかりやすいので、最初にここをみるのがオススメです!
- Python のpipenvを使った方法でかかれています
◆Heroku へデブロイする流れ
1. Herokuへのログイン、メールアドレスとパスワードを入力
$ heroku login
一度heroku loginを行うと、明示的にheroku logoutコマンドでログアウトしない限り、以降のコマンド実行はそのアカウントとして実行されます。
2. サンプルアプリのクローン(Djangoアプリ)
今回Heroku公式ドキュメントに沿ってサンプルアプリを使用したので、とりあえずクローン
$ git clone https://github.com/heroku/python-getting-started.git
$ cd python-getting-started
3. Herokuへデプロイ
$ heroku create $ git push heroku master
heroku create [APPNAME]
$ git remote -v heroku https://git.heroku.com/stark-dusk-55796.git (fetch) heroku https://git.heroku.com/stark-dusk-55796.git (push) origin https://github.com/heroku/python-getting-started.git (fetch) origin https://github.com/heroku/python-getting-started.git (push)
4. 確認
$ heroku open #URLをデフォルトブラウザで開く $ heroku logs --tail #ログを確認 $ heroku ps === web (Free): gunicorn gettingstarted.wsgi (1)
たったこれだけ!!
◆ローカルでコードを変更してHerokuにデプロイ
1. ローカルでコードを修正する
下記、pipenvで作成した仮想環境上で動作させる
$ pipenv --three #python3を指定 $ pipenv install #仮想環境を作成し、依存関係をインストール $ pipenv shell #仮想環境への切り替え $ python manage.py collectstatic #Djangoで必要処理(静的ファイルを一カ所に集める)
2. ローカルで確認する
$ heroku local
http://localhost:5000 にアクセスしてローカルで変更を確認
3. 修正のgitリポジトリへの反映
$ git add . $ git commit -m "Demo"
4. 修正のHerokuへの反映
$ git push heroku master
5. 確認
$ heroku open
Herokuに必要なファイル
Procfile
web: gunicorn gettingstarted.wsgi
- 最初の「web:」はDynoの種別の指定で、Httpリクエストを受け付けるWebアプリケーションの場合は「web」を指定する。
- それに続くコマンドがアプリケーションの起動コマンド
Pipfile または requirement.txt
- Pipfile または requirement.txt のどちらかのファイルがある場合、Pythonと判断されるらしい。
Heroku Postgres
- Heroku Postgresは、Heroku社自らが提供するHeroku Add-onの1つ
- Heroku Postgresは、オープンソースRDBMS「PostgreSQL」がSaaS形態で提供されているもの
$ heroku addons # アプリに追加されているAdd-onの一覧を表示 Add-on Plan Price State ─────────────────────────────────────────────── ───────── ───── ─────── heroku-postgresql (postgresql-horizontal-81279) hobby-dev free created └─ as DATABASE
- heroku-postgresql のaddons はデフォルトで追加される
- ローカル環境にpsqlコマンド(PostgreSQLのコマンドラインクライアント)がインストールされている場合には、「heroku pg:psql」コマンドでデータベースにアクセスすることが可能
感想など
- アプリのデブロイはgit pushするだけ!
- 今回pipenvを使用しましたが、最初brew コマンドでpipenvをインストールしようとしてエラーになりそこではまりました…. (Herokuへのデプロイとは全く関係なし...)
最初から素直に下記でインストールすればよかった…。
$ pip3 install pipenv
- こんな簡単にWEB公開できるとは知らなかった。よいです。