・python+Flaskで作ったWEBアプリを最速で公開する方法がわかる
・WEBアプリを公開するときに発生しやすいエラーの対処方法がわかる
\IT未経験者からのサポートあり!転職サービス3選!!/
サービス名 | |||
---|---|---|---|
未経験 | 未経験OK | 未経験の転職専用 | 経験者向け |
公開の求人数 | ITエンジニア全体で1万件以上 ITエンジニア未経験で600件以上 |
未公開 | 5,000件以上 |
利用対象 | 全職種 | IT特化 | IT特化 |
特徴 | ✓誰もが知る転職サービス ✓経歴を登録しておくとオファーが来る |
✓企業担当者と条件交渉 ✓スキルの身につく企業を紹介 |
✓IT専門のエージェントが対応 ✓転職成功すると年収200万円以上の大幅アップがある |
転職サポート内容 |
|
|
|
公式サイト | リクナビネクスト | テックゲート | レバテックキャリア |
概要
この記事では、HEROKUを使って、gunicorn+Flask+python構成でWEBアプリを公開するところまで紹介します。
また、筆者が遭遇したエラーについても補足します。
プログラミング初心者がWEBアプリを公開することを考えると、HEROKUの方が、awsやGCPよりも楽と言えます。
前提条件
この記事では、以下の前提条件を元にして記載します。
- HEROKUに登録済みでログインできること
- herokuのSDKをインストール済みでコマンドラインから操作できること
- Gitの基本的な操作ができること
- Flaskで「hello world」を出力する方法がわかっていること
HEROKU、gunicorn、Flaskの動作原理
動作原理は、ざっくり以下の通りです。
クライアント(ユーザー)からのアクセス
↓
ここからHEROKUのインフラ内
↓
gunicorn(WSGIサーバー)
↓
Flask
実際の手順
実際の手順を記載すると以下のとおりです。
Flaskでアプリを作る
Flaskアプリの構成は、以下の通りです。
作成したアプリは、getリクエストすると、helloを出力する大変シンプルなものです。
プロジェクトRoot
├── Procfile(ローカル環境では必要ないがHEROKUの設定で必要)
├── app.py
├── requirements.txt(ローカル環境では必要ないがHEROKUの設定で必要)
├── runtime.txt(ローカル環境では必要ないがHEROKUの設定で必要)
└── templates
└── index.html
上記のプロジェクトは、githubに上げました。参考にどうぞ!
https://github.com/jshirius/heroku_bert_mask_flask
気になる人は、上記のurlからダウンロード(タグ「Flask_heroku_comp」)できます。
気をつける点としては、サーバー起動処理のhostは、外部からのアクセスを許可するため
以下のように「0.0.0.0」を指定します。
app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 5000)))
WEBブラウザーでHEROKUにログインする
コンソールにて以下のように入力し、ログインします。
$heroku login
HEROKUの管理画面から新規のアプリを作成する
以下の図を参考にHEROKUの管理画面から新規のアプリを作成します。
また、後の工程でgitのpush先の情報が必要になるので、管理画面の情報をメモしておきます。
コンソールで「heroku create」と入力して、アプリを作成することも可能です。
しかし、適当な名前になるため、あとからアプリ名を変更しようとすると、herokuのgitのリポジトリ名が変わってしまうため面倒です。
よって、管理画面から新規のアプリ登録することをおすすめします。
デプロイに必要なファイルを作成します。
必要なファイルは以下のとおりです。
- Procfile
- herokuにgunicornとFlaskの関係を伝える
- requirements.txt
- pipでインストールするライブラリーを指定します。
- runtime.txt
- pythonのバージョンを指定します。
以下にファイルの内容を記載します。
Procfile
web: gunicorn app:app --log-file -
requirements.txt
gunicorn
flask
runtime.txt
python-3.7.8
git pushしてデプロイする
以下のようなコマンドを参考にpushしてアプリをデプロイします。
git init
heroku git:remote -a bert-mask-app
git add .
git commit -am "make it better"
git push heroku master
動作確認
デプロイが正しくできているか確認します。
問題なければ、ブラウザーが開いて、作成したWEBアプリが起動します。
$heroku open
以上、Flaskで作成したアプリをherokuにアップデートする流れでした。
補足
以下補足を記載します。
・公式のサンプルプロジェクトをダウンロードする(ファイル構成の参考用に)
git clone https://github.com/heroku/python-getting-started.git
・「heroku logs」でログを確認
heroku logs –tail
エラー対処
筆者は、いくつかのエラーに遭遇しました。
その時の対象方法を記載します。
エラー「No default language could be detected for this app」
remote: ! No default language could be detected for this app.
remote: HINT: This occurs when Heroku cannot detect the buildpack to use for this application
原因は、buildpackの設定がないとのこと。
このようなエラーがでたときの解消方法は以下のとおり。
herokuに「このアプリはpythonで実行する」ことを伝えます。
$ heroku buildpacks:set heroku/python
エラー「App not compatible with buildpack: https://buildpack-registry.s3.amazonaws.com/buildpacks/heroku/python.tgz」
remote: -----> App not compatible with buildpack: https://buildpack-registry.s3.amazonaws.com/buildpacks/heroku/python.tgz
remote: More info: https://devcenter.heroku.com/articles/buildpacks#detection-failure
remote:
remote: ! Push failed
以下のファイルが無い、もしくは設定を間違っている。
- requirements.txt
- runtime.txt
- Procfile
私の場合は、Procfileファイルが以下のように設定されていなかったのがエラーの原因でした。
web: gunicorn app:app --log-file -
参考にさせていただいたサイト様
【完全版】Flaskで作ったAPIをHerokuにデプロイする手順(備忘録)
Herokuでgit push heroku masterした時にrejectされたら見る記事
まとめ
いかがですか?
HEROKUは、制限(※)があるものの無料でWEBアプリを公開することができておすすめです。
また、AWSのようにpython本体をインストールしたり、ポートを開放するなどのインフラ作業が発生しないため、ポートフォリオなどをすぐに公開したいときに良いかもしれません。
制限とは以下のとおりです(2020/11/30時点):
・30分間アクセスがないとスリープ状態になる(スリープ状態になると起動までに10数秒ほどの時間がかかる)。
・ストレージ(HDDのこと)が500Mまで。機械学習のモデルをおいたらすぐに一杯になってしまうかもしれません。
\IT未経験者からのサポートあり!転職サービス3選!!/
サービス名 | |||
---|---|---|---|
未経験 | 未経験OK | 未経験の転職専用 | 経験者向け |
公開の求人数 | ITエンジニア全体で1万件以上 ITエンジニア未経験で600件以上 |
未公開 | 5,000件以上 |
利用対象 | 全職種 | IT特化 | IT特化 |
特徴 | ✓誰もが知る転職サービス ✓経歴を登録しておくとオファーが来る |
✓企業担当者と条件交渉 ✓スキルの身につく企業を紹介 |
✓IT専門のエージェントが対応 ✓転職成功すると年収200万円以上の大幅アップがある |
転職サポート内容 |
|
|
|
公式サイト | リクナビネクスト | テックゲート | レバテックキャリア |