DjangoBrothers BLOG ✍️

2018/10/28

このエントリーをはてなブックマークに追加
Python デプロイ Heroku

HerokuでPythonアプリをデプロイする

HerokuでPythonプログラムを動かす手順を紹介します。

下準備

以下3つが必要になりますので、必要なものはそれぞれ準備してください。

1. Herokuアカウント

まずはHerokuのアカウントを作成します。こちらのページから作成してください。

2. Python

ご自身のパソコンにPythonをインストールしてください。インストールページ

3. Git

Herokuではバージョン管理システム「git」を使うことになります。使ったことがない人はこちらから。

Herokuのセットアップ

準備が整ったら、Herokuのセットアップを行いましょう。まずは、Herokuをコマンドライン上で操作できるように、Heroku Command Line Interface (CLI)をインストールします。こちらから、パソコンのOSに合わせてインストールします。

インストールされると、Herokuコマンドが使えるようになります。heroku loginコマンドで、Herokuにログインしてみましょう。

コマンドを打つと、メールアドレスとパスワードを聞かれるので、Herokuアカウントを作ったときと同じものを入力します。

コマンドライン

$ heroku login
Enter your Heroku credentials.
Email: [email protected]
Password: samplepassword
Logged in as [email protected]

最終行のように、Logged in as ~ と出てきたら成功です!

デプロイの実行

まずは、デプロイするアプリケーションを用意します。この記事では、Herokuが練習用として用意してくれているDjangoアプリをクローンして、それを使って説明していきます。任意のディレクトリで以下のコマンドを打ってください。

練習用アプリをクローン

$ git clone https://github.com/heroku/python-getting-started.git
$ cd python-getting-started

アプリをデプロイするためには、そのアプリがgitで管理されている必要があります。練習用アプリは、git cloneしてきたので当然git管理下に置かれていますが、自作アプリをデプロイするときは、git管理下に置くように設定してください。

上記コマンドのように、cdコマンドでデプロイしたいアプリケーションの階層に移動したら、次は以下のコマンドを打ってください。

~/python-getting-started

$ heroku create

このコマンドを打った時に、「heroku」という名前の新しいリモートリポジトリができ、git管理下に置いたローカルリポジトリと関連づけられます。git remoteコマンドを打つことで、herokuというリモートサーバーが存在することが確認できるはずです。

Heroku上のアプリには、ランダムでURLが振られますので、そこにアクセスしてみましょう。直接URLを打ち込んでも良いですし、heroku openコマンドでも開くことができます。すると、以下のような画面が表示されるでしょう。

Herokuのマイページでも、新しいアプリができていることが確認できるはずです。

上の画面が確認できたら、作成したリモートサーバー(Herokuアプリ)に、git pushをすることで、heroku上にソースコードを渡します。

~/python-getting-started

$ git push heroku master

これでデプロイは完了です。もう一度アクセスしてみると、、、

こんな感じでエラーがでますね。これはプロセスが動いていないことが原因なので、以下コマンドでプロセスを動かします。

~/python-getting-started

$ heroku ps:scale web=1

これでアクセスすると、うまくページが表示されるはずです!

各種ファイルの役割

練習用アプリには、デプロイのために必要なファイルがあらかじめ作成されています。それぞれのファイルがどんな役割をしているのかを説明します。

Procfile

ルートディレクトリにあるProcfileは、アプリを起動するために実行するコマンドを宣言しています。

~/python-getting-started/Procfile

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

これは、webというタイプのプロセスを起動するコマンドです。webタイプでは、HTTPルーティングが使えます。

全てのHerokuアプリケーションは、dynoと呼ばれる、軽量Linuxコンテナによって実行されます。dynoによってProcfileで定義したコマンドが実行されると考えてください。

heroku psコマンドを使えば、いくつのdynoが動いているかを確認することができます。

デフォルトでは、無料版のdynoが実行されます。無料版は、30分以上トラフィックがないと、スリープモードに入るので、その後の最初のトラフィックでは実行に少し時間がかかります。

requirements.txt

ルートディレクトリにある、requirements.txtは、依存関係を示します。つまり、アプリケーションに必要なパッケージなどを定義しています。練習用アプリには、django、gunicorn、django-herokuが記述されていますが、自分のアプリをデプロイするときには、ここを適切に書き換えなければなりません。

アプリがデプロイされたとき、Herokuはrequirments.txtに書かれたパッケージを、pip install -rコマンドで自動インストールしてくれます。

runtime.txt

ルートディレクトリにあるruntime.txtでは、使用するPythonのバージョンを指定することができます。

各種コマンド

最後に、使用頻度が多くなるであろうコマンドを紹介します。

heroku run

Djangoで開発するときは、python manage.py shellコマンド等を使う場面があるかと思いますが、heroku上で操作したいときは、heroku runを前につけることで実行できます。

~/python-getting-started/

$ heroku run python manage.py shell
Python 3.7.0 (default, Aug  1 2018, 21:17:03)
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>>

heroku logs

ログを確認したい時は、heroku logsコマンドを使います。

~/python-getting-started/

$ heroku logs --tail

heroku config

環境変数を操作したいときのコマンドです。

~/python-getting-started/

# 環境変数の一覧を表示
$ heroku config

# 指定した環境変数を取得
$ heroku config:get VAR_NAME

# 新たに環境変数を設定
$ heroku config:set NEW_VAR_NAME="name"