今回、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を通して基本的な実装はできるようになったので今後も記事を書いていきたいですね。