2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

bottleで作ったWebアプリをHerokuで公開(デプロイ)するまで

Last updated at Posted at 2020-09-19

結論

bottleを使ったアプリケーションをHerokuで公開する。

はじめに

PythonのbottleでWebアプリケーションを作りHerokuなるものを使ってデプロイしようとしたものの、なかなか上手くいかなかったためアウトプットとして記事を書いてみます。初めての投稿かつ初心者なため色々指摘していただければありがたいです。

環境

  • Windows10
  • Python 3.8.3
  • bottle 0.12.18
  • numpy 1.18.5
  • scikit-learn 0.23.1

参考にしたサイト

基本的にこれらのサイトの手順で問題ないと思いますが、僕は何かとバグってしまったのでその際に参考にしていただければと思います。

手順

  1. Herokuのアカウントを作る
  2. Heroku CLIをインストールする
  3. Webアプリを作る
  4. デプロイしたいファイルを格納するディレクトリを作る(以下のファイルが必要)
    • main.py
    • requirement.txt
    • Procfile
    • runtime.txt
    • その他のファイル(bottleのテンプレートファイルとか)
  5. gitコマンドでコミットする
  6. Herokuにデプロイする

Herokuのアカウント作成

ここからアカウントを作成できます。

Heroku CLIのインストール

ここからHeroku CLIをインストールします。
僕はWindowsだったので、インストーラーをDLした後heroku-x64.exeを実行しました。選ぶところは全てデフォルトのままでやりました。

Webアプリの作成

作ってください。リモート環境で動くかに注意してください。
リモート環境で動かすときは、以下のコードにしていましたが、

run(host="localhost",port=8080,debug=True)

デプロイする際は以下のコードに変えました。このあたり何をしているのかよく分かっておらず、とりあえず写経したというところです。

run(host="0.0.0.0", port=int(os.environ.get("PORT", 5000)))

デプロイしたいファイルを格納するディレクトリを作る

main.pyとその他のファイルについては特に言うことはありません。
注意ポイント
requirement.txt, Procfile, runtime.txtの文字コードに注意しましょう。
utf-16 LEなる文字コードではデプロイできず、utf-8ならばデプロイできました。

requirement.txt

これは、インポートしたいモジュールとそのバージョンを記述するファイルです。numpyなどを利用する際にはパッケージがあるようなのですが、僕はエラーを修正できなかったため止めました。
以下のような内容になりました。
モジュール名==バージョンという記法です。

requirement.txt
bottle==0.12.18
numpy==1.18.5
scikit-learn==0.23.1

Procfile

これは、実行するpythonのファイルを記述するファイルだと思います(理解が浅い)。また、Procfile.windowsというファイルも作成し、以下のように記述しました。
以下のmain.pyの部分は自分のPythonファイルの名前に変更してください。bottleではなく、flaskを利用している場合以下の書き方ではないようです。

Procfile
web: python main.py
Procfile.windows
web: python main.py runserver 0.0.0.0:5000

runtime.txt

これは実行するPythonのバージョンです。Herokuのサポートするバージョンが決まっているらしく、とりあえずPython-3.8.5にしました。自分の実行環境と違いましたが、イケました(おそらく良くない)。
大文字と小文字を間違えるとエラーになるようなので、注意しましょう。

runtime.txt
python-3.8.5

注意(もう一度)

requirement.txt, Procfile, runtime.txtの文字コードに注意しましょう。
utf-16 LEなる文字コードではデプロイできず、utf-8ならばデプロイできました。

gitコマンドでコミットする

デプロイしたいディレクトリに移動し、そのディレクトリをコミットします。

cd (デプロイしたいディレクトリ)
git init
git add --all
git commit -m "first commit"

Herokuにデプロイする

いよいよHerokuにデプロイします。
僕はアプリ作成よりもこちらで時間を喰ってしまいました

Herokuへのログイン

まずHerokuにログインします。Herokuに登録したメールアドレスとパスワードを聞かれるので入力します。

heroku login

上手くいくと、以下のように表示されます。

Logged in as 自分のメアド

アプリ作成からデプロイ

次に以下のように実行します。これは、アプリをHerokuで作成しています。heroku createをすると、アドレスを教えてくれますが、そのアドレスがWebアプリのアドレスになります。この場合、名前は適当に設定されますが自分でも設定できるようです。

heroku create

最後に、プッシュします。

git push heroku master

上手くいくと、以下のようなコードが表示されるはずです。

remote: Verifying deploy... done.

逆に、上手く行かないと、以下のようなコードが表示されてしまいます。

error: failed to push some refs to 'https://git.heroku.com/XXXXXXX.git'

このとき、エラーコードの上をよく見るとどこで詰まったのかを教えてくれますがそこまで親切ではありません。そこで、https://git.heroku.com/XXXXXXX.gitのページに行くと、詳しいログを確認できるためそこで詳しい情報を知りましょう。

アプリの確認

デプロイすることができれば、

heroku open

でそのアプリを確認できます。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?