こんにちは、Zero-Cheeseです。
本記事では、
- Flaskアプリを
- GitHubを使って、自動的にHerokuにデプロイする方法
をご紹介します。
なぜ、Herokuの無料サービスが終わる、このタイミングで記事に・・・?
本記事は、下記の方々を対象にしております。
- Flaskを、少しでも触った事のある方
- GitHub、入門者以上の方
- Herokuは、初めてでも大丈夫です。
Herokuとは?
Heroku社が提供しているPaaSで
- ハードウェア、ネットワーク環境
- OS環境
- PostgreSQL等の、DB環境
- Python等のアプリケーション実行環境
等が既に構築済みで(もしくは、簡単に構築でき)、簡単にアプリケーションを公開する事ができます。
Herokuのその他の特徴として
- 拡張機能が豊富(メール送信機能、cronみたいなスケジューラ 等)
- 運用向け機能が充実(ログ管理、応答時間計測、負荷状況モニタリング等)
などが、あげられます。
Herokuには大きく4つの料金プランがあり、リソース量(CPU、メモリ量)、対応可能なトラフィック量 等に違いがあります。
上記の無料プランですが、2022年11月28日で終了になりました。
フィッシング等、不正目的で使われる事が多く、対策に並外れた労力が発生しているとのことです。本当に残念・・( ;∀;)
本記事では、外部パッケージのインストールに
- pip
を使った事例でご紹介しています。
pipの詳細は、下記記事にて、解説しています。
Herokuへのデプロイ方法
下記の順番で、紹介しています。
- Webアプリの準備
- GitHubの準備
- Herokuの準備
- 動作確認
Webアプリの準備
Webアプリの手順は、以下の通りです。
- Flaskアプリ の準備
- Gunicorn の準備
- 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の準備
本章での手順は、以下の通りです。
- GitHubで、新たにリポジトリを作る(名前は任意)
- 作成したリポジトリに、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つにして頂けたらと思います。
最後まで、お付き合い頂き、ありがとうございました。
それではまた、お会いしましょう!