herokuでデプロイ(2022/11/28から有料になりました)
前回の解説ではPythonをherokuで公開することを目的としてgitを行いました。gitはバージョン管理を行うもので、リモートのgithubとローカルのgitを組み合わせて使います。herokuを使うと、このgitで管理された環境をherokuにデプロイして公開することができます。
(2022/11/28からすべて有料となりました)まずは、heroku.comに行ってherokuのアカントを取っておきましょう。herokuアカウントにはFree dyno時間という実行時間が割り当てられていて、550時間までは無料で使えます。クレジットカード登録するとさらに450時間使えるので、1000時間は無料です。dyno時間は30分間Webトラフィックがなければ休眠状態に入ります。
Freeはメモリは512MBで休眠状態がありますが、ホビー$7/月では休眠状態がなくなります。スタンダード、パフォーマンスとメモリーやCPUシェアやコンピューティングを増やすと、$25,$50,$250,$500とdynoタイプを契約できます。
heroku CLIをdownloadしてインストールしますまずgitの環境が必要になりますので、ない場合は前のドキュメントを読んでインストールしてください。そして Herokuのdev centerでherokuのCLIをダウンロードインストールしてください。
ダウンロードしたらダブルクリックで起動して「next」「next」で入れていきます。bit bashで
heroku login
とすると、ログイン画面が表示されるのでID,passwordを入れてログインしてください。
今回は、gitの回で作成したpythonWebSampleの環境をherokuにデプロイするので、まず移動します
cd pythonWebSample
ここでこのプロジェクトのheroku環境を作成します。今回はcreateの後ろに名前を指定しましたが、この名前はheroku全体で一つのものですから、一般的な名前ではすでに使用されているので使えません。そこでcreateの後ろを書かない方法もあります。そうすると空いているぶつからない名前が自動で作成されます。
heroku create eternal-websample
これを行うと、herokuのダッシュボードに作成したappが作成されています。ただし中身はまだありません。
公開するにあたり、このappで使用しているライブラリーのバージョンを宣言する必要があります。そこでまず requirements.txtというファイルを宣言します。次のコマンドを入力して、まず現在インストール済みのライブラリー一覧を取って雛形を作ります。
pip3 freeze > requirements.txt
そして、関係ありそうな行だけ残します。
requirements.txt
click==7.1.2 Flask==1.1.2 gunicorn==20.0.4 itsdangerous==1.1.0 Jinja2==2.11.2 MarkupSafe==1.1.1 Werkzeug==1.0.0
この内容はそのappによって変わりますので、同じにする必要はありませんし、このバージョンは私の環境での話です。なので無ければないでも動きます。
続いて、Procfileを作ります。これは必須です。拡張子はありません。今回はマルチスレッド対応にしたので gunicornを使いますが、そうでなくても構いません
Procfile
web: gunicorn app:app --log-file=-
gunicornでwebを起動し、app.pyを動かしなさい、ただしlogは標準エラーに出力してねという意味です
次に、runtime.txtを作ります。どのバージョンで動かすかを指定します。以下のどれか一つを選んで記述してください。
python-3.10.0 python-3.9.7 python-3.8.12 python-3.7.12 python-3.6.15
指定なしでも動きます。
さてここまで準備できたら、herokuのリモートを確認しましょう
git remote -v
heroku側とgit側の名前が確認できると思います。
ではpushします。前回のgitへのpush以来更新していないのでgitに再登録します。
git add . git commit -m "heroku deploy" git push origin main
これでgitに登録できたら、herokuに公開します
git push heroku main
コンパイルが走って、エラーが無ければOKです。エラーが出たら今回作った3つのファイルを調整してトライしてください
エラーを修正したら、この上の4行 git add .から git push heroku mainまでを繰り返してください。ただし、無料の場合は1日に10回までです。
また、今回は masterを mainにブランチした環境の続きでやっていますので、masterのままであれば、mainをmasterに読み替えてやってください。
実行は、herokuのサイトを開くか https://eternal-websample.herokuapp.com/ 、herokuのコマンドで実行します
heroku open
実はherokuは、bashの実行もできます。
heroku run bash
ここで ls -l や python やwindowsのコマンドプロンプトでやっていたことができます。ただし、linuxコマンドですので、勉強してからやりましょう。 例えば pip list とかすると現在の使用しているライブラリのバージョンが分かり、ローカルでは動くのに herokuでは動かない場合、バージョンの違いで動かない時がありますが、これでわかります。