ちょいちょいと試せる localhost でないサーバーで検証したいことがあったので Flask のアプリを Heroku にデプロイしてみました。(DB無し)
Flask アプリの準備
# 仮想環境を作成 $ python -m venv .venv # 仮想環境を実行 $ source .venv/bin/activate # Flask をインストール (.venv) pip install Flask
app.py
from flask import Flask @app.route('/') def hello_heroku(): return "Hello flask APP!" if __name__ == '__main__': app.run(debug=True)
Gunicorn の設定を作成する
Heroku に Python アプリをデプロイするには Gunicorn を使う必要があるっぽい
The Django and Flask web frameworks feature convenient built-in web servers, but these blocking servers only process a single request at a time. If you deploy with one of these servers on Heroku, your dyno resources will be underutilized and your application will feel unresponsive.
Gunicorn is a pure-Python HTTP server for WSGI applications. It allows you to run any Python application concurrently by running multiple Python processes within a single dyno. It provides a perfect balance of performance, flexibility, and configuration simplicity.
cf. Deploying Python Applications with Gunicorn | Heroku Dev Center
DjangoやFlaskなどのWebフレームワークを使っているとき、開発時にもサーバーを起動して動作確認をしていると思います。 例えばDjangoであれば python manage.py runserver というコマンドでサーバーを起動できます。 なぜこのサーバーを使わずにgunicornを使うのでしょうか?
理由は簡単に言うと、動作が速いからです。gunicorn やuWSGI、 waitress といったWSGIサーバーは速く、 安定して動作することを考慮して作られています (何をもって「速い」と言うのかは別の機会に詳しく解説できればと思います)。
なので、一般に公開して多くの人に使ってもらうサーバーなどでは、専用のWSGIサーバーを使うほうが良いです。 「本番環境ではgunicornなど別のWSGIサーバーを使う」と、プラクティスとして覚えておくと良いでしょう。
cf. gunicornでPython製Webアプリケーションを動作させよう(DjangoとFlask) - Make組ブログ
Gunicornのインストール と設定の作成
# gunicorn のインストール (.venv) pip install gunicorn # 設定ファイルの作成 (.venv) touch Procfile
Procfile
web: gunicorn app:app
Heroku へのデプロイ
1. Flask App の依存パッケージのファイルを作成
# Flask App の依存パッケージのファイルを作成 (.venv) pip freeze > requirements.txt # 仮想環境を終了 (.venv) deactivate
2. git リポジトリの準備
git を使って Heroku にデプロイするので、ここまでのアプリを git 管理下に置きます。
$ git init # .venv 以外をコミット $ git add app.py Procfile requirements.txt $ git commit -m init
3. Heroku CLI のインストール
$ brew install heroku/brew/heroku
4. Heroku にアプリを作成してデプロイする
$ heroku login # heroku にアプリを作成 $ heroku create <APP_NAME> Creating ⬢ <APP_NAME>... done https://<APP_NAME>.herokuapp.com/ | https://git.heroku.com/<APP_NAME>.git # heroku 側のリポジトリを追加 $ heroku git:remote -a <APP_NAME> set git remote heroku to https://git.heroku.com/<APP_NAME> # デプロイ $ git push heroku main # アプリの確認 $ heroku open
これで Flask アプリを Hreoku にデプロイすることができました!
めっちゃ簡単〜 ₍ ᐢ. ̫ .ᐢ ₎
4. GitHub に push したら Heroku にデプロイされるようにする
毎回コマンドでデプロイするのはちょい面倒なので GitHub の main リポジトリが更新されたら自動で Heroku にデプロイさるようにします。
まずは Heroku の管理画面にアクセスして、作成したアプリのコンソールを開きます。
メニューから「Deploy」を選択
Automatic Deploy の欄で、変更をトリガーに Deploy させるブランチを選択して「Enable Automatic Deploys」をクリック
これで GitHub との接続が完了して、選択しブランチに push したり PR をマージしたりで変更があると自動的に Heroku にデプロイされるようになりました!
簡単で助かる〜 ₍ ᐢ. ̫ .ᐢ ₎
所管
Heroku あまり使ってなかったのですが、めちゃめちゃ楽に Deploy できるので実験用途などで積極的に使っていこうと思いました。
おわり。
[参考]
これはフラスコ