2018/10/28
Python デプロイ HerokuHerokuで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"