Herokuでflaskアプリをデプロイする方法

herokuでflaskをデプロイする記事のアイキャッチFlask

flaskアプリをHerokuにデプロイする方法について解説していきます!

事前準備

Heroku CLIのインストールやログインが済んでいる方は飛ばしてくださいね。

Heroku CLIのインストール

コマンドでHerokuを操作できるようにするためにも、まずはHeroku CLIをインストールしていきましょう。
macでは以下のコマンドをターミナルで叩くとHeroku CLIをインストールできます。

$ brew tap heroku/brew && brew install heroku


Linux等のインストール方法はこちらを参照してください。

Heroku CLI | Heroku Dev Center
Heroku CLI をダウンロード、インストール、および使用を開始する方法。Heroku Toolbelt の一部として使用される Heroku CLI。

Heroku CLIでログイン

以下のコマンドでHeroku CLIからHerokuにログインしてください。

$ heroku login

Herokuにデプロイする

flaskアプリを用意する

今回は簡単なHello Heroku from flask!を返すflaskアプリをデプロイしていきます。

まずはフォルダとapp.pyを用意しましょう。
(app.py以外の名前でもOK)

heroku-deploy-dir
└── app.py

app.pyの中身はこんな感じです。

from flask import Flask

app = Flask(__name__)


@app.route('/')
def hello_heroku():
    return "Hello Heroku from flask!"

if __name__ == '__main__':
    app.run(debug=True)

Herokuにデプロイするのに必要なファイルの用意

Herokuにデプロイして動作させるにはProcfilerequirements.txtが必要になります。
どちらもアプリのルートディレクトリに配置しておきましょう。

heroku-deploy-dir
├── Procfile
├── app.py
└── requirements.txt

Procfileの用意

Procfileって何??
という人のためにも
Procfileの説明をHerokuから引用すると

Heroku apps include a Procfile that specifies the commands that are executed by the app on startup.

Heroku https://devcenter.heroku.com/articles/procfile

とあります。

日本語にすると、「HerokuのアプリはProcfileを含み、Procfileはアプリ起動時に実行するコマンドを指定する」です。

では具体的にflaskアプリをHerokuにデプロイする上でProcfileに何を記述すべきかというと、app.pyを実行するコマンドを記述します。

ローカルでPytnonファイルを実行するときはpython3といったコマンドを使いますが、Herokuではgunicornでアプリを起動します。
ですので、Procfileにはgunicornのコマンドを記述します。

$ pip install gunicorn

app.py以外のファイル名の人は適宜app(左)を書き換えてください。

web: gunicorn --bind 0.0.0.0:$PORT app:app

これでProcfileの準備は完了です。

requirements.txt

requirements.txtは必要なPythonパッケージを記載したテキストファイルで,
Herokuでもこのファイルを元にしてパッケージが自動インストールされます。

以下のコマンドで現在のPython環境にインストールされているパッケージをrequirements.txtに書き出しましょう。

$ pip freeze > requirements.txt

Procfileの解説ところでgunicornをインストールしてない方はインストールしてからrequirements.txtを作りましょう。

Herokuへデプロイ

Herokuではheroku createでアプリを作った時に、作られるgitリポジトリのmasterにpushすることで、デプロイすることができます。

  1. heroku create アプリ名 でHerokuにアプリを作る(HerokuのページからでもOK)
  2. git init でgitを初期化
  3. heroku git:remote -a アプリ名でリモートリポジトリを追加する(originでなくheroku)
  4. add & commit する
  5. git push heroku masterでリモートリポジトリにpushしてデプロイ完了!
$ heroku create アプリ名
$ git init
$ heroku git:remote -a アプリ名(createで作った)
$ git add .
$ git commit -m 'first commit'
$ git push heroku master

pushすれば自動的にデプロイされるので気軽に待ちまーす

デプロイが完了したら
heroku openでページを見ることができるので確認してみましょう!

$ heroku open
herokuで公開されたflaskアプリ