こんにちは、ミナピピン(@python_mllover)です。今回は前回使用したHerokuを使ってPythonのwebアプリケーションフレームワークであるFlaskを使ったサーバレスアプリをデプロイしたいと思います。
Herokuにログインする
# herokuにターミナルからログイン $ heroku login
新規プロジェクトを作成
# 新規プロジェクトの場合は作成(プロジェクト名は任意) $ heroku create himajin-flask-test
プロジェクトに接続したらcdコマンドでローカルの作業フォルダに作成します。
# 既存のプロジェクトに接続する $ heroku git:remote -a himajin-flask-test
次にgit cloneで表示されたgitのURLからリポジトリをクローンしてローカルの作業フォルダを作成します。
# ローカルにリポジトリを作成する $ heroku git:clone -a himajin-flask-test
これでローカルにリポジトリが作成されるので、そこに移動します。
# 作業ディレクトリを移動する $ cd himajin-flask-test
作業ディレクトリに移動したら、そこにサンプルの「main.py」[Procfile]「requirements.txt」「runtime.txt」の4つのファイルを作成して配置します。
<main.py>
from flask import Flask import os app = Flask(__name__) @app.route("/") def hello(): return "Hello, Heroku" if __name__ == "__main__": port = int(os.getenv("PORT", 5000)) app.run(host="0.0.0.0", port=port)
<Procfile>
web: python main.py
<requirements.txt>
flake8==3.7.8 Flask==1.1.1 Flask-Devices==0.0.1 Flask-SQLAlchemy==2.4.1
<runtime.txt>
python-3.7.10
デプロイ時にRequested runtime (python-●●) is not available for this stack (heroku-20).というエラーが表示されている場合は https://devcenter.heroku.com/articles/python-support で対応されているバージョンかを確認してみてください。
プロジェクトに接続して更新内容をデプロイする
ローカルリポジトリに必要なファイルを配置したら、gitコマンドでデプロイします。
# git経由でデプロイする $ git init $ git add . $ git commit -m "first commit" $ git push heroku master
https://<プロジェクト名>.herokuapp.com/ にアクセスするとデプロイ状況が確認できます。
デプロイ時のよくあるエラー
$ git push heroku master fatal: 'heroku' does not appear to be a git repository fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
configにリモート先が指定されていないのが原因なので.git/configをコマンドなりテキストエディタで以下のように付け加える
[remote "origin"] url = https://hoge@bitbucket.org/hoge/hoge.git fetch = +refs/heads/*:refs/remotes/origin/* [branch "master"] remote = origin merge = refs/heads/master # ↓を追加し、URLとFetchにはoriginのものと同じにする [remote "heroku"] url = https://git.heroku.com/hoge.git fetch = +refs/heads/*:refs/remotes/heroku/*
また複数のアプリを管理していてどのアプリのgitと接続しているかわからなくなったときは以下のコマンドで確認できます。
$ heroku info
Flaskでサーバレスアプリが作れると機械学習アプリなんかを簡単にデプロイすることができるので知っておいて損はないです。他にもfirebaseとか最近はクラウドで無料でWebサービスを公開できるサービスが増えてきています。
コメント
[…] 関連記事:【Python】Heroku+Flaskでサーバレスアプリをデプロイする […]
not a git repository が出た場合は自分のGITアカウントに接続している
ために起こる git init で初期化する
[…] 関連記事:【Python】Heroku+Flaskでサーバレスアプリをデプロイする […]
[…] 【Python】Heroku+FlaskでサーバレスWebアプリをデプロイする […]