Heroku入門、Flaskアプリをデプロイ


はじめに

herokuとは?

2007年にアメリカで創業したheroku社が提供しているPaaS(Platform as a Service)。

PaaSとは、サーバーの初期設定をすることなく、アプリを公開することのできるサービスのことである。これにより、開発者はアプリケーションの開発に集中することが可能。

herokuを使うメリットは?

拡張機能が豊富

スケールアウトとは、システムを構成するサーバーの台数を増やすことで、システムの処理能力を高める、コンピュータの環境を増強する方法の1つでアプリを開発して公開した後、スムーズに運用を進めるためには「最適な環境を維持すること」が必要不可欠です。
アプリを利用するユーザーの増加などに合わせて、アプリが滞りなく動くために、環境を増強する必要が出てきます。多くのユーザに合わせてサービスを安定的に供給するためには、ハードウェアの性能を上げるためのスケールアウトが重要となってきます。
また、herokuではダッシュボード画面で操作したり、簡単なコマンドを実行するだけですぐにスケールアウトを変更することが可能となっています。

スケールアウトが簡単

スケールアウトとは、システムを構成するサーバーの台数を増やすことで、システムの処理能力を高める、コンピュータの環境を増強する方法の1つでアプリを開発して公開した後、スムーズに運用を進めるためには「最適な環境を維持すること」が必要不可欠です。
アプリを利用するユーザーの増加などに合わせて、アプリが滞りなく動くために、環境を増強する必要が出てきます。多くのユーザに合わせてサービスを安定的に供給するためには、ハードウェアの性能を上げるためのスケールアウトが重要となってきます。
また、herokuではダッシュボード画面で操作したり、簡単なコマンドを実行するだけですぐにスケールアウトを変更することが可能となっています。

Heroku

Herokuコマンド環境のインストール

brew tap heroku/brew && brew install heroku

Herokuでアカウントを作成してログイン用のメールアドレスとパスワードをメモしておきます。
Terminalでloginコマンドを打ちます。

heroku login

上のコマンドを実行した様子が以下の感じです。

FlaskアプリをHerokuにデプロイ

必要なリソースを作成

プロジェクトファイル置くディレクトリを作成し、ディレクトリに移動します。
以下のコマンドをターミナルで実行します。

mkdir flaskonheroku
cd flaskonheroku

必要なファイルを作成します。

touch app.py Procfile

app.py を下記の通り編集する。

app.py
# -*- coding: utf-8 -*-
from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return 'hello, world'

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

Procfile を下記の通り編集する。

web: gunicorn app:app --log-file=-

pip install にて今回必要なライブラリーをインストールしておきます。
以下をターミナルにて実行しましょう。

pip3 install Flask
pip3 install gunicorn

デプロイに必要なファイルを作成

requirements.txtを作成する。

pip freeze > requirements.txt

requirements.txt を下記の通り編集する。

Flask==1.1.2
click==7.1.2
gunicorn==20.0.4
Jinja2==2.11.2

ローカル環境で動くか確認

$ python app.py
 * Serving Flask app "app" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

アドレスにアクセスし、以下のような画面が出ればOKです。

gitリポジトリの準備

以下のコマンドをターミナルにて実行してgitリポジトリとして初期化

git init
git add .
git commit -m "first commit"

Herokuアプリの作成

heroku createコマンドでHeroku上にアプリを作成します。

$ heroku create
Creating app... done, ⬢ secret-refuge-44790
https://secret-refuge-●●●●●●●●.herokuapp.com/ | https://git.heroku.com/secret-refuge-●●●●●●●●.git

heroku create アプリ名でアプリ名を指定することもできます。
アプリ名を指定しないと、自動的にアプリ名が付けられます。(あとで変更可能です)

Herokuへアプリをデプロイ

リモートリポジトリが作られているので、プッシュします。

$ git remote
heroku
git push heroku master

コマンドを実行しdeployしている様子が以下。

アプリの確認

以下のコマンドを実行すると自動的にブラウザが立ち上がりデプロイしたFlaskアプリが立ち上がります。

heroku open

以下の画面が実際に立ち上がったブラウザ画面の様子。

参考にさせていただいた記事

herokuとは?初心者でも5分で分かる基本や特徴をまるっと紹介 | 侍エンジニア塾ブログ(Samurai Blog) - プログラミング入門者向けサイト
macでheroku deploy - Qiita
herokuを利用したPythonアプリケーションのデプロイ方法を現役エンジニアが解説【初心者向け】 | TechAcademyマガジン
Heroku CLIの導入と初期設定
Heroku操作 CLI - Qiita