python flaskで作成したアプリをherokuにデプロイする方法

今回、pythonのフレームワーク「flask」をherokuにデプロイして公開する方法についてご紹介します。flaskの環境構築の手順は省き、既にローカル環境は開発したアプリをherokuに上げる方法のみをご紹介します。

herokuに必要なパッケージをインストるする

herokuにデプロイしていく前に必要なパッケージを準備していきます。まずは、仮装環境を有効化するために、以下のコマンドを実行します。(source activate 仮想環境名)

source activate 仮想環境名

gunicornをインストール

続いてgnicornをインストールします。gnicornはPython製のWSGIサーバ(Web Server Gateway Interface)でwebサーバーとwebアプリケーションをつなぐ役割を果たします。

(venv)$ pip install gunicorn

psycopg2-binary のインストール

pythonでPostgreSQLを使用するためのpsycopg2をインストールします。

(venv)$ pip install psycopg2-binary

Procfile の準備

Procfileファイルを作成し、web: gunicorn app:appを追記します。

vim Procfile
Procfile
web: gunicorn app:app

requirements.txt を準備する

続いてアプリに必要なライブラリをrequirements.txtに用意してあげます。ちなみにpip freezeをコマンドで実行するとインストール済みのパッケージを確認できます。

$ pip freeze > requirements.txt
$ pip freeze
alembic==0.9.9
bcrypt==3.1.6
blinker==1.4
certifi==2019.3.9
cffi==1.12.3
chardet==3.0.4
click==6.7
Flask==1.0.2
Flask-Bcrypt==0.7.1
Flask-Dance==0.14.0
Flask-DebugToolbar==0.10.1
Flask-Login==0.4.1
Flask-Mail==0.9.1
Flask-Migrate==2.1.1
Flask-OAuth==0.12
Flask-OAuthlib==0.9.4
Flask-Scss==0.5
Flask-SQLAlchemy==2.3.2
Flask-WTF==0.14.2
gunicorn==19.9.0
httplib2==0.11.3
idna==2.6
itsdangerous==0.24
Jinja2==2.10
lazy==1.3
Mako==1.0.7
MarkupSafe==1.0
oauth2==1.9.0.post1
oauthlib==2.0.7
Pillow==6.0.0
psycopg2-binary==2.8.2
pycparser==2.19
pyScss==1.3.5
python-dateutil==2.7.2
python-dotenv==0.10.2
python-editor==1.0.3
requests==2.18.4
requests-oauthlib==0.8.0
six==1.11.0
SQLAlchemy==1.2.6
SQLAlchemy-Utils==0.33.2
urllib3==1.22
URLObject==2.4.3
Werkzeug==0.14.1
wincertstore==0.2
WTForms==2.1

Herokuにログインしデプロイする

まずはHerokuniログイン、,heroku create アプリ名をコマンドに入力、実行し、herokuにデプロイするためのアプリを作成します。今回、アプリ名をflask-appにしています。

$ heroku login
heroku create flask-app

heroku addons:create heroku-postgresql:hobby-devを実行することで
postgresql アドオンが追加され、データベースが作成されます。

heroku addons:create heroku-postgresql:hobby-dev

Creating heroku-postgresql:hobby-dev on ⬢ flask-app... free
Database has been created and is available
 ! This database is empty. If upgrading, you can transfer
 ! data from another database with pg:copy
Created postgresql-rugged-3847392 as DATABASE_URL
Use heroku addons:docs heroku-postgresql to view documentation

herokuへpushする

続いてgitを使ってflaskアプリをcommitします。

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

Herokuへデプロイする

git push heroku masterでflaskアプリをherokuへデプロイします。

git push heroku master

Counting objects: 8, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (8/8), 3.38 KiB | 3.38 MiB/s, done.
Total 8 (delta 2), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote: 
remote: -----> Python app detected
remote: -----> Installing requirements with pip
remote: 
remote: -----> Discovering process types
remote:        Procfile declares types -> web
remote: 
remote: -----> Compressing...
remote:        Done: 55.9M
remote: -----> Launching...
remote:        Released v8
remote:        https://flask-app.herokuapp.com/ deployed to Heroku

herokuにデータベースを作成する

herokuにデータベースを作成するためにmodel.pyに以下を追記します。

def init():
    db.create_all()

以下を実行するとデータベースが作成されます。

heroku run python -c "import blog.models; blog.models.init()"

›   Warning: heroku update available from 7.18.10 to 7.24.4
Running python -c "import blog.models; blog.models.init()" on ⬢ flask-app... up, run.2031 (F 

heroku openを実行してデプロイしたアプリを確認します。

heroku open

無事、デプロイできました! flask関連の情報が少ないので、デプロイするまで時間がかかると思いましたが、意外とスムーズにデプロイできました。flaskを通して基本的な実装はできるようになったので今後も記事を書いていきたいですね。

>文系エンジニア大学生の技術ブログ

文系エンジニア大学生の技術ブログ

社会が多様化していく中、大学生の学生生活も多様であるべきと考えています。主にエンジニア向けにITやプログラミングなどの技術系と大学生向けに休学、留学、海外生活、トビタテ留学、長期インターンに関する記事を書いています。