herokuで公開

herokuでデプロイ(2022/11/28から有料になりました)

pythonをWeb公開するためにherokuを準備します

前回の解説ではPythonをherokuで公開することを目的としてgitを行いました。gitはバージョン管理を行うもので、リモートのgithubとローカルのgitを組み合わせて使います。herokuを使うと、このgitで管理された環境をherokuにデプロイして公開することができます。

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をダウンロードインストールしてください。

heroku download

ダウンロードしたらダブルクリックで起動して「next」「next」で入れていきます。bit bashで

heroku login

とすると、ログイン画面が表示されるのでID,passwordを入れてログインしてください。

heroku login

今回は、gitの回で作成したpythonWebSampleの環境をherokuにデプロイするので、まず移動します

cd pythonWebSample
herokuのデータ作成

ここでこのプロジェクトの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では動かない場合、バージョンの違いで動かない時がありますが、これでわかります。