Pythonスキルの習得

【Python × Heroku × GitHub】Flaskアプリのデプロイ方法

【Python × Heroku × GitHub】Flaskアプリのデプロイ方法

こんにちは、Zero-Cheeseです。

本記事では、

  • Flaskアプリを
  • GitHubを使って、自動的にHerokuにデプロイする方法

をご紹介します。

なぜ、Herokuの無料サービスが終わる、このタイミングで記事に・・・?

本記事は、下記の方々を対象にしております。

  • Flaskを、少しでも触った事のある方
  • GitHub、入門者以上の方
  • Herokuは、初めてでも大丈夫です。

Herokuとは?

Heroku社が提供しているPaaSで

  • ハードウェア、ネットワーク環境
  • OS環境
  • PostgreSQL等の、DB環境
  • Python等のアプリケーション実行環境

等が既に構築済みで(もしくは、簡単に構築でき)、簡単にアプリケーションを公開する事ができます。

Herokuのその他の特徴として

  • 拡張機能が豊富(メール送信機能、cronみたいなスケジューラ 等)
  • 運用向け機能が充実(ログ管理、応答時間計測、負荷状況モニタリング等)

などが、あげられます。

Herokuには大きく4つの料金プランがあり、リソース量(CPU、メモリ量)、対応可能なトラフィック量 等に違いがあります。

詳細は公式サイトまで

上記の無料プランですが、2022年11月28日で終了になりました。

フィッシング等、不正目的で使われる事が多く、対策に並外れた労力が発生しているとのことです。本当に残念・・( ;∀;)

Herokuへのデプロイ方法

下記の順番で、紹介しています。

  • Webアプリの準備
  • GitHubの準備
  • Herokuの準備
  • 動作確認

Webアプリの準備

Webアプリの手順は、以下の通りです。

  1. Flaskアプリ の準備
  2. Gunicorn の準備
  3. requirements.txt の準備

① Flaskアプリの準備

「Hello World」 が表示されるだけの、簡単なアプリを準備しました。

「app.py」というファイル名で、下記コードを保存して下さい。

Flaskを使用する際は、パッケージのインストールが必要です。

pip install flask
from flask import Flask

app = Flask(__name__)

@app.route('/')
def home():
    return 'Hello World'

if __name__ == '__main__':
    app.run(host="0.0.0.0")

② Gunicornの準備

Gunicornとは?

Gunicornは、WSGIと実装するHTTPサーバーです。

Flask等のWebフレームワークにもWebサーバーが備わっていますが、簡易的なもので、1つのリクエストしか処理できません。

Gunicornを使用する事により、Webアプリケーションを並列して、実行する事が可能となります。

Gunicornを使用する際も、パッケージのインストールが必要です。

pip install gunicorn

先程作った「app.py」と同じ階層に、

  • Procfile

という名前で、テキストファイルを作って下さい。(拡張子不要)

そのProcfileに、下記を記載して下さい。

web: gunicorn app:app

gunicornを使って、「qpp.py ファイルの中の、appを実行するよ!」 という意味になっています。

③ requirements.txt の準備

下記コマンドにて、本アプリに必要なパッケージ一覧を、「requirements.txt」ファイルに書き出します。

コマンドプロンプト(Windows)、ターミナル(Mac)から実行して下さい。

pip freeze > requirements.txt

GitHubの準備

本章での手順は、以下の通りです。

  1. GitHubで、新たにリポジトリを作る(名前は任意)
  2. 作成したリポジトリに、pushする

下記に、Gitのコマンドを記載します。(コマンドプロンプト、もしくはターミナル上から実施して下さい。)

① GitHubで、新たにリポジトリを作る(名前は任意)

本記事では、「heroku_github_test」という名前で、リポジトリを作ります。

公開範囲は、publicでも、privateでもどちらでもOKです。

(他は空欄でOKです。下図を参照下さい。)

画面一番下にある、「Create repository」ボタンを押下して下さい。

② 作成したリポジトリに、pushする

ボタンを押下すると、下記画面が出現するので、コマンドプロンプト(Macの場合、ターミナル)を開いて、下図の枠で囲った通りのコマンドを入力して下さい。

コマンドを入力する際、

  • 現在の作業ディレクトリが、app.pyと同じ場所である事

に注意して下さい。

またコマンドプロンプト(ターミナル)から、GitHubへアクセスする場合、下記のいずれかの方法で接続する必要があります。

  • SSH経由で公開鍵を使う
  • HTTPS経由で、アクセストークンを使う

Herokuの準備

Herokuにログインして下さい。

(初めて利用される方は、アカウントを作成して下さい。)

新しいAppを作成する。

Topページから、

  • Newボタン → Create new app 

を押下して下さい。

App nameが聞かれるので、任意の名前を入力して下さい。(ここでは、「heroku-github-test2」にします。)

入力後、「Create app」ボタンを押下します。

Pythonを実行できるようにする

BuildPackという機能を追加することで、Heroku上で、Pythonが実行できるようになります。

Settingsサイトから、Buildpacksという箇所を探します。

下図に従って、Pythonを追加して下さい。

すると、ポップアップが出現するので、Pythonを選択、「Save changes」を押下します。

Githubと連携する

次に、下記画面に遷移するので、下記手順にて、Githubのリポジトリと連携します。

「Search」ボタンを押下すると、GitHubで作成したリポジトリが、表示されます。

「Connect」ボタンを押下して、連携して下さい。

デプロイする

GitHubのmainブランチにpushされたら、自動デプロイを設定します。

さきほど設定した、Herokuサイト(同じページ)上で、「Automatic deploys」という箇所があります。

「Enable Automatic Deploys」ボタンを押下します。

動作確認

「Open app」を押下すると、デプロイしたアプリが、開きます。

動作確認して下さい。

実行結果

無事に、「Hello World」が表示されています。

オリジナルドメインにする

今回の方式では、URLが

  • https://<アプリ名>.herokuapp.com/

のように、なってしまいます。

個人利用では問題ないとは思いますが、外部への公開となると、オリジナルのドメインに変更したい所です。

オリジナルドメインへの変更を、別記事にて紹介する予定です。

公開次第、本ページにも、リンクを記載いたします。

少々、お待ち下さい・・

最後に

無料でのサーバー運用を考えると、

  • Heroku+PostgreSQL+Redis+Cloudflare

が、一つの答えだと思っていましたが、Herokuの無料サービスが終了してしまいました・・

本当に残念ですが、今まで大変お世話になった気持ちを込めて、本記事を書いてみました。

有料になりましたが、一番安いプランだと、月に1000円程度と、まあお得かな?と思っています。(DBを使用すると、さらに、追加で料金が発生してしまいますが・・)

特にAWSみたいに、従量制でく、定額制なのが魅力的です。

是非、検討の1つにして頂けたらと思います。

最後まで、お付き合い頂き、ありがとうございました。

それではまた、お会いしましょう!