GitHub から Heroku に gunicorn 上で動作する Python Webアプリをデプロイする3つの方法

4 min

本記事では、Heroku に Web アプリを公開するまでの内部処理の概要を理解して、GitHub から Heroku に gunicorn 上で動作する Python Webアプリをデプロイする方法を紹介します。

Heroku とは?

Herokuは、AWS上に構築されていてアプリケーションの開発から実行、
運用までのすべてをクラウドで完結できるPaaS

GitHubとの連携も可能であり、既にリポジトリが登録されていればものの数分で公開まで可能

利用制限はありますが無料版も用意されており、無料で Web サービスが開始可能

利用制限はあるが無料版も用意

とりあえず自作Webアプリの公開を始めてみたいというユーザーにおすすめのサービスです。

広告_零号機

Web アプリを Heroku で公開するまでの流れを知る

Heroku では、Dyno と呼ばれる独自の軽量 Linux コンテナ上にアプリがデプロイされます。

Dyno 上でアプリケーションを動作させるために Slug と呼ばれる Dyno への配備に最適されたアプリケーションのコピーを作成します。

Heroku では Slug コンパイラを使用して Git もしくは GitHub から Slug を作成します。

全体の流れをまとめる以下のようになります。

Heroku での公開までの全体の流れ

前提

Heroku で公開するためにはまず Heroku アプリの作成が必要

Heroku CLI を使用するか、もしくはブラウザから個人のダッシュボードを起動して GUI から Herokuアプリが作成出来ます。

これから先の説明では、Heroku アプリが作成されていることを前提とします。
また、Heroku では使用するプログラミング言語ごとに必要なファイルが微妙に異なりますが、ここでは Python を使用します。

① commit

GitHub連携を使用するにしても Git 連携を使用するにしても、
いずれしろ Git レポジトリの用意が必要

詳細は後述しますが、通常のアプリケーションを実行するためのファイル以外にも「③ビルド」に必要なファイル(runtime.txt、requirements.txt)と「⑤アプリケーション起動コマンド実行」に必要なファイル(Procfile)も合わせて commit します。

② Heroku に push or GitHub に push

Heroku アプリを作成時、アプリ毎に Heroku という名前のレポジトリが作成

Git 連携の場合は、Heroku CLI を使用してローカル Git から Heroku レポジトリにプッシュします。

GitHub 連携の場合は、Heroku から直接 GitHub のレポジトリに連携するので通常と同じ方法でGitHub にプッシュします。

Heroku CLI はそれなりに大変なので初めての方には GitHub 連携がおすすめ

③ビルド

「③ビルド」「④ Dyno にダウンロード・展開」「⑤アプリケーション起動コマンド実行」は一連の処理として実行

また、設定によってはレポジトリに push すると自動で③〜⑤が実行されて常に最新の環境が反映されるようにも出来ます。

本処理では、Slug コンパイラを使用してレポジトリからSlugを作成します。

全体の流れは下記です。

  1. runtime.txtを読み込んでランタイムを選択する
  2. requirements.txtを読み込んで依存関係のあるライブラリをインストールする
  3. Slugコンパイラを使用してSlugを作成する

なお、runtime.txt、requirements.txtの中身は下記のようなものです。

python-3.7.12
notebook>=5.3
ipywidgets>=7.2
jupyterlab<3.0.0
pandas
plotly==4.10.0
dash==1.15
dash-daq==0.5.0
dash-bio==0.4.8
dash-canvas==0.1.0
dash-auth==1.4.1
dash-cytoscape==0.2.0
networkx==2.5
jupyter-dash==0.4.0
dash_bootstrap_components==0.13.1
xlrd>=1.0,<2.0
gunicorn

④ Dyno にダウンロード・展開

③で作成した Slug を Dyno にダウンロードして展開します。

⑤アプリケーション起動コマンド実行

ここまでで、Dyno(Linuxベースの軽量コンテナ)上にアプリケーションが実行可能な状態で配備されていることになります。

あとは、実際に実行するためにアプリケーションの起動コマンドを実行するのみですが、ここで、Procfileの記載内容を使用します。

Procfileは例えば下記のようなものです。

web: gunicorn app:server

ここが一番わかりづらいです。詳しく説明します。

Procfileには下記フォーマットで記述します。

<process type>: <command>

例の場合では、<process type>に「web」を指定しています。

これは、Heroku からの HTTPトラフィックがルーティングされるプロセスであることを示しています。

次に、<commad>に「gunicorn app:server」を指定しています。

gunicorn はWSGIサーバーで、gunicorn コマンドで起動できます。コマンドは下記フォーマットです。

gunicorn [Options] $(MODULE_NAME):$(VARIABLE_NAME)

「gunicorn app:server」は、appというモジュール(拡張子不要)のserverという変数をサWSGIアプリケーションとして使用するという意味です。

from MyDashCytoscape import MyDashCytoscape

app = MyDashCytoscape("*** matching ***")

# gunicornで起動時
server = app.server

if __name__ == "__main__":
    # 直接実行時
    app.run_server(debug=True)

⑥ ブラウザからアクセス・使用

ここまでで、使用可能になっているのでブラウザからURLを指定することでアクセス可能になります。

Herokuにデプロイ可能なファイルを用意してGitHubにプッシュする

ローカルで動作可能であり、Heroku への公開に必要なファイル(Procfile、runtime.txt、requirements.txt)を GitHub に用意しています。Heroku アプリを作成後に Web アプリを公開する方法を参考にサンプルコードを使用して Heroku に公開してみてはいかがでしょうか?

Heroku でのログ確認イメージ

Chromebook に Python 開発環境を構築する場合は注意が必要です

VS Code を使用した GitHub リポジトリのクローンとプッシュ方法
( Chromebook 対応)

まとめ

本日は、Chromebook を使用して Heroku にデプロイ可能なファイル構成で GitHubにプッシュしました。ご参考になりましたら twitter をフォローして SNS でシェアして頂ければ幸いです。

ご参考

ちなみに今回は下記 Chromebook を使用しました。
14.0型フルHD × Core i3 × メモリ8GB を満たす数少ない端末です。
軽くて持ち運びしやすく開発に耐えうるスペックなのでおすすめです。

富士通|FUJITSU ノートパソコン FMV Chromebook 14F(タッチパネル) ダーククロム FCB143FB [14.0型 /Chrome OS /intel Core i3 /メモリ:8GB /SSD:128GB /タッチパネル対応 /2021年12月モデル]【point_rb】

価格:70,510円
(2022/2/23 18:35時点)
感想(1件)

Chromebook でプログラミングを始める方法

広告_零号機-エリア2
kewton

kewton

大学院卒業後、某大手SIerで10年以上SEとして従事。
社会人3年目までに基本情報・応用情報技術者、データベーススペシャリスト、簿記3級・2級を取得。
基幹系システム・IoTシステム開発のプロジェクト経験多数。AI活用システムの企画・プロト開発経験あり。
強みは、プロマネだけでなく自身で開発も実施してきたこと。
【扱える言語】
C#、java、python、javascript、Excel VBA
【扱えるDB】
oracle、sql server、postgreSQL、mongoDB

FOLLOW

関連記事

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA