no-image

はじめてのHerokuデプロイ。Bottle×HerokuでWEBアプリを公開する方法。

今回は、初心者のためのFlaskアプリ開発④ FlaskアプリをHerokuにデプロイ!の記事にて、SRさんより頂いた質問の回答記事。
Bottleで作成されたプログラミングをHeroku上にデプロイする方法をまとめてみた。
この記事はやり方を紹介するだけで特に解説等はしてない。とりあえずまずはHeroku上でアプリを動かしてみたい人向け。

デプロイするソースコードは、いちばんやさしいPythonの教本 人気講師が教える基礎からサーバサイド開発までのサンプルコード。

もくじ

  1. ディレクトリ構成
  2. 仮想環境の立ち上げ
  3. 必要なモジュールのインストール
  4. デプロイ用にコードを修正
  5. Herokuにデプロイ!
  6. まとめ
  7. 参考
  8. 追記(2018/10/3)

ディレクトリ構成

まずは今回のディレクトリ構成。

  bottle
  |ーPipfile
  |ーPipfile.lock
  |ーlesson60
    |ーProcfile
    |ーpybot_datetime.py
    |ーpybot_eto.py
    |ーpybot_random.py
    |ーpybot_weather.py
    |ーpybot_wikipedia.py
    |ーpybot.py
    |ーpybot.txt
    |ーpybotweb.py
    |ーrequirements.txt

仮想環境の立ち上げ

では順番にコマンドを入力していく。
今回は仮想環境の立ち上げにpipenvを用いた。

  > cd bottle //仮想環境を立ち上げるディレクトリに移動
  > pipenv install  //pipenvをインストール
  > pipenv shell  //仮想環境の実行

これで名前の横に(アルファベット)が付けば、立ち上げは成功。

必要なモジュールのインストール

仮想環境を立ち上げたら、次に必要なモジュールをインストールしていく。

  > cd lesson60
  > pipenv install requests bottle wikipedia  //モジュールをインストール

インストールできたら、ついでにrequirements.txtも作成しておく。

  > pip freeze > requirements.txt
  > echo web: python pybotweb.py > Procfile

これで準備は完了。

デプロイ用にコードを修正

サンプルコードのままだと、サーバーがlocalhostになっているので、ソースコードを編集する必要がある。
pybotweb.pyを以下の用に編集。
osモジュールのインポートを忘れないように。

  import os  //一行目に追加
  #run(host='localhost', port=8080, debug=True)  //これをコメントアウトさせる
  run(host="0.0.0.0", port=int(os.environ.get("PORT", 5000)))  //最終行に追加

Herokuにデプロイ!

ここまできたらあとは楽勝。

  > heroku login
  > heroku create lesson60test
  > git init
  > heroku git:clone -a lesson60test
  > git add -A .
  > git commit -m "myapp"
  > git push heroku master

無事にデプロイが完了したら、heroku openをしたあとに、/helloにアクセス。
すると、きちんとデプロイされたページが確認できる。

まとめ

デプロイはプログラミング独学で始めた人間にとってはほんとに鬼門になると思う。
僕も初めてデプロイに挑戦したときは随分つまって、3日くらい先に進めなかった。
少しでも同じような人の参考になればいいなと思う。

参考

・BOOK
いちばんやさしいPythonの教本 人気講師が教える基礎からサーバサイド開発まで

・WEB
Bottle

Heroku×bottleを使って4分33秒でWebアプリを公開する

追記(2018/10/3)

今回質問をしてくださったSRさんが、無事に初めてのアプリケーションのデプロイに成功したとのことで、その過程を記事にしてくれた。
自分の勉強したことが誰かの役に立ったというのは本当に嬉しいことだ。
いちばんやさしいpythonの教本のpybotをデプロイする方法