Herokuにデプロイする

2022年11月28日をもってHerokuの無償プランは廃止されます。今後Herokuの使用はオススメしません。

はじめに

この手順書ではパソコンのLinux環境で開発したFlaskアプリをHerokuにデプロイして公開するまでの手順を説明します。この サイト を参考にさせていただきました。

Heroku

Heroku は無料で使えるサーバーです。無料枠の説明 に書いてあるように550時間/月まで無料で使えます。無料枠で使用する場合、一定時間(30分)アクセスしないとスリープモードに切り替わり、次回動作時に少し時間がかかります。スリープモードは利用時間にカウントされませんので、24時間動作するようなアプリ(24時間×31日=744時間)でなければ、多くの場合無料枠に収まります。プロトタイプの実験用にデプロイするには最適なサーバーです。

Herokuにはアプリケーションを5個まで無料で登録することができます。

必要なツールのインストール

以下の手順は、特に断りが無い限りパソコンのターミナルソフトで操作します。WindowsならPowerShell、Macならターミナルです。PowerShellはスタートメニューの”Windows PowerShell”にあります。

  • Gitのインストールと初期設定

Gitを使用しますので、Windows版またはMac版のGitをインストールしてください。既にインストール済みならこの手順は不要です。
ここ からダウンロードできます。

インストールしたらGitの初期設定を行ってください。

  • Herokuにアカウントを登録

ここ からHerokuにサインアップしてください。登録は無料です。

・”Primary development language” は Python を指定してください。
・申請したメールアドレスにメールが届きます。メール内のリンクをクリックしてください。
・パスワードの設定を求められるので設定してください。

  • Heroku CLI をインストール

ここ からHeroku CLIをダウンロードしてインストールしてください。インストーラーのデフォルト設定で進めて大丈夫です。Macの場合はページに書いてあるコマンドを実行するだけです。インストールが終わるとHeroku用のコマンドが使えるようになっているはずです。

ヘルプ情報が表示されればOKです。

デプロイに必要なファイルを準備

ここで、前回 FlaskでHello World! で作成したアプリの環境に戻って、Herokuに必要なファイルを追加作成します。

  • 必要に応じてアプリ名を変更

以下の説明ではアプリ名(作業フォルダ名)は仮に「myproject」としていますが、このままではうまくいきません。Herokuにデプロイするにはアプリ名はユニークな名前でなければならないので、自分だけの特徴的な名前に変更しておいてください。あとでHerokuにデプロイするときにエラーになった場合は、このことを覚えておいて名前を変更してやり直してください。以下の手順の「myproject」は変更した名前に読み替えてください。

  • Procfileを作る

Herokuでアプリを動作させるためにProcfileという名前のファイルが必要になります。内容は次の1行です。

gunicornというツールにHTTPサーバーの働きをさせます。gunicornはマルチプロセスをサポートしており、デフォルトで2つのプロセスが走ります。それが都合が悪い場合は次のようにオプションを追加します。

“myproject” はアプリの名前に変更してください。”app” はFlaskアプリで定義しているインスタンス名です。例えば、app = Flask(__name__) のようなコードになっているはずです。もしこの名前を変更していたらここも変更が必要です。

  • Requirements.txtを作る

Flaskアプリが動作するときに必要なライブラリをHerokuに教えて、同じ環境で動作させるために必要なファイルです。Flaskアプリが動作しているLinux環境(WSL等)で、pip3コマンドを使います。

virtualenvを使っている場合は、アプリの環境に切り替えてから下のようにします。

virtualenvを使わずにLinuxのシステム環境下でアプリを動作させている場合はこのようにします。

作った requirements.txt を確認して、gunicorn が含まれていなければ追加してください。gunicorn はローカル環境では不要ですが、Heroku上で必要です。ローカル環境にもgunicornをインストールしておけば、実際には使いませんが requirements.txt に反映されるので手間が省けます。

virtualenv を使っている場合、requirements.txt に virtualenv が
出てきますが、Herokuでは不要なので削除してください。

ローカル環境に無用なライブラリがインストールされていた場合(特に virtualenv を使っていない場合)requirements.txt に余計なライブラリ名が現れ、Heroku側で Not found(ライブラリが見つからない)のようなエラーになることがあります。その場合は、エラーになるライブラリを requirements.txt から削除してください。

  • .gitignoreの作成

virtualenv を使っている場合は、アプリのディレクトリ内に仮想環境の名前でサブディレクトリがあるはずです。この中には仮想環境で使用されるファイルが格納されていますが Heroku では必要ありません。Gitの操作対象から virtualenv の環境ディレクトリを除外するために .gitignore という名前のファイルを作ってください。内容は virtualenv の環境ディレクトリの名前を書くだけです。

.gitignoreの例:

Herokuへデプロイする

ここからは再びターミナルソフトでの操作です。

  • アプリのフォルダに移動する
  • Herokuにログインする
何かキーを押すとブラウザが起動してログイン画面になります。”Log in” のアイコンを押してログインしてください。

  • Herokuにアプリを作成する
これによって Herokuのダッシュボード に、作成したアプリが登録されます。

  • Gitを初期化してHerokuのアプリに関連付ける
  • FlaskのソースコードをGitでプッシュする
  • 動作を確認する

Herokuのダッシュボード からデプロイしたアプリの状態を確認できます。アプリ管理画面の右上、[More]メニューの[View logs] からログを確認してください。[Settings]→[Domains] にURLが書いてあるのでアクセスするとアプリが動作します。

問題がある場合はログを確認してください。アプリ内部から print() でデバッグ出力した内容もログに表示されます。

git push コマンドで “No default language could be detected for this app.” のようなエラーが出る場合は、アプリ管理画面 [Settings]→[Buildpacks] で “heroku/python” となっていることを確認してください。

Flaskアプリの更新

Flaskアプリのソースコードを修正した場合は以下のような手順でHerokuに反映できます。

(1) 操作対象のアプリを切り替える場合は、このコマンドを実行してください。同じアプリの編集を続けて行う場合は不要です。

(2) ローカル環境でソースコードを修正する。requirements.txt など関連ファイルも必要に応じて調整する。

(3) Herokuにプッシュする。

(4) 動作確認する。

Heroku側の環境を直接確かめたい場合は、SSH接続することも可能です。Heroku のログインした状態で実行してください。

Herokuの環境をそっくりローカルにダウンロードするのはこうします。

GitHubと連携

上記の手順ではローカル環境から Heroku に直接アプリをアップロードしましたが、ソースコードを GitHub のリポジトリで管理していれば、GitHub と Heroku を連携させることもできます。

  • Herokuのダッシュボードからアプリ管理画面に進み、上部のタブから [Deploy] を選びます。
  • [Deployment method] の [GitHub] を選びます。
  • [Connect to GitHub] に接続するリポジトリの情報を設定し、[Connect] ボタンを押します。
  • [Manual deploy] の [Deploy Branch] を押すと、GitHub からソースコードを取得してコンパイル・ビルドが始まります。

コメント