Flask Python Webアプリケーション

【Python】Heroku+Flaskでサーバレスアプリをデプロイする

この記事は約5分で読めます。

 

こんにちは、ミナピピン(@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からリポジトリをクローンしてローカルの作業フォルダを作成します。

 

# ローカルリポジトリを作成する
$ git clone https://git.heroku.com/<アプリケーション名>.git

 

これでローカルにリポジトリが作成されるので、そこに移動します。

 

# 作業ディレクトリを移動する
$ 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サービスを公開できるサービスが増えてきています。

 

 

 

 

コメント

タイトルとURLをコピーしました