Herokuとは
HerokuとはPaaS環境をレンタルすることができるサービスです。 よくあるロリポップやXサーバーのようなレンタルサーバーとの違いとしては、レンタルサーバーはHTMLやCSSを使用してブログを解説するのにはむいていますが、Pythonのライブラリをインストールして Webアプリを開発することはできません。
実はロリポップサーバー などもマネージドクラウドをレンタル可能なPaaS環境として提供してくれていますがHerokuの良いところは無料で始められると言う点です。
Heroku CLIの導入
Heroku環境に開発したソースを上げる方法はいくつかあるようですが、今回は時運の環境のソースをgitコマンドでアップロードすることのできるHeroku CLIの導入を行います。
インストール方法は公式だと以下のページになります。
The Heroku CLI | Heroku Dev Center
私の環境はMacなので以下のコマンドでインストールすることができます。
brew tap heroku/brew && brew install heroku
プロジェクトを作ろう
gitで言う所のプロジェクトを作ります。Herokuではアプリケーションと呼んでいるようです。
Herokuのサイトにいき左上のアイコンをクリックすると、プロジェクト一覧画面に飛びます。
右上の「new」を押すとアプリケーションかパイプラインを選んで作成することができます。
アプリケーションはgitlabで言う所のプロジェクト
パイプラインはパイプラインに相当するようです。
この時アプリケーション名をつけますがこれは後の節でも<アプリケーション名>として使用するので覚えておきましょう。
デプロイ
Heroku CLIがインストールできたら、自分のソースコードを環境にデプロイする方法について見ていきましょう。
以下の3つがあるようです。
- gitコマンドによるデプロイ
- githubと連携してデプロイ
- dockerイメージによるデプロイ
プロジェクトの作成
まずはログインしてみます。ターミナルで以下を入力し、IDとパスワードを入力します。 ブラウザが開きますのでログインします。
$ heroku login
ターミナルに戻って以下のコマンドを打ち込みます。 my-projectとなっていますが名前はなんでも良いのでアプリケーションに関する作業用フォルダを作って中で行ってください。
$ cd my-project/ $ git init $ heroku git:remote -a testapp20201230
gitコマンドによるデプロイ
ここからはgitの要領でソースをアップします。
# ↓herokuからログアウトしたりターミナルを一回終了した場合などはログインし直しましょう。 $ heroku login $ git add . $ git commit -am "make it better" $ git push heroku master
コマンドはプロジェクトのディレクトリ内で行う必要があります。
Dockerイメージによるデプロイ
こっちが大本命なのではないかと思います。
Docker によるデプロイ | Heroku Dev Center 以下の節で何回か出てくる<process-type>は「web」を設定しておけばいいようです。 (なんとなくイメージを表すタグ的なものとして利用していると理解)
また、この先出てくるアプリケーション名はプロジェクトをブラウザで作成した時のもの(git remote -aで選んだもの)を入れてください。
共通:レジストリにログイン
イメージのプッシュの仕方としては
- ①Dockerfileからビルドしてプッシュする方法
- ②既存のイメージをプッシュする方法 の2種類ありますが
Herokuのレジストリにログインする必要があります。
# ↓herokuからログアウトしたりターミナルを一回終了した場合などはログインし直しましょう。 $ heroku login $ heroku container:login または $ docker login --username=_ --password=$(heroku auth:token) registry.heroku.com
①Dockerfileからビルドしてプッシュする方法
こちらはDockerfileを作ってHerokuのコンテナレジストリ上でビルドします。
- イメージビルド・プッシュ ディレクトリにDockerfileがあることが必須条件です
$ heroku container:push <process-type>
②既存のイメージをプッシュする方法
出来合いのイメージをプッシュする方法です。
イメージのビルドに時間がかかるのであればこちらの方がいいかもしれません。
あらかじめイメージがローカルに存在するものとして進めます。
①との違いはプッシュするときにdockerのコマンドを使いうと言うことです。
- イメージをプッシュします。
# 環境に存在するイメージにHeroku用の名前をつけます。(latestはタグなので別にいらない) $ docker tag ubuntu:latest registry.heroku.com/<アプリケーション名>/<process-type>:latest # あとはプッシュするだけ(上記でつけたイメージ&タグを使用します。) $ docker push registry.heroku.com/<アプリケーション名>/<process-type>:latest
もし以下のようなエラーが出たらMacのキーチェーンへの書き込みでトラブルが発生しているようなので以下のコマンドをクリックします。 参考: qiita.com
イメージからリリースを作成
上記の①または②の手順でイメージをコンテナレジストリにプッシュしたら、
イメージからリリースを作成します。
リリースと呼ばれていますが実質はイメージからのコンテナ作成だと思ってくれて良いです。
heroku container:release web # 複数のイメージがある場合は以下のようにする heroku container:release web worker
もしも「Error: Missing required flag:」といったエラーが出てしまったら以下の記事を参照してください。 gitによるデプロイで行っていたリポジトリの紐付けがされていないことが原因のようです。
その他お役立ち
- 公式の方法でログインすると、ブラウザが立ち上がって認証するが、コマンドのみでログインすることもできる。
-i のオプションを使用することで可能。メールアドレスは設定されたものでよければEnterのみパスワードは $ heiroku login -i heroku: Enter your login credentials Email [<あなたのメールアドレス>]: Password:
- Herokuの環境に入る。 ★このコマンドはプロジェクトが格納されているディレクトリで行う必要があります。
$ heroku run bash
- Heroku環境のログを表示する。
$ Heroku logs
- アプリケーションの再起動
$ heroku restart
- 自環境のターミナルからherokuのコンソールでコマンドを実行 docker execのようなものです。結構時間がかかる。
$ heroku run “ls -la”