Tatsuya Oiwa About Archive Feed Github Twitter

JavaアプリケーションをHerokuにデプロイする

背景

JavaでRestletを使ったREST APIのサンプルを書いていたら、どこかにデプロイしたくなったのでPaaSを色々検討した。その結果、過去にNodeのアプリのデプロイしたこともあるHerokuをJavaでも使ってみることにした。

概要

基本的に、以下のドキュメントを一通り読んでいったらできた。

必要なもの

手順

Heroku Toolbeltのインストール

最初にHeroku Toolbeltをインストールする。インストールするとherokuコマンドやforemanコマンド(後述)が使えるようになる。以降の手順はほぼすべてherokuコマンドを使って行うことになる。

Herokuへログイン

まずはHerokuにログインする。

$ heroku login

Mavenプロジェクトの作成

次にMavenプロジェクトを用意する。既にあるものを使っても良いが、Herokuが提供しているサンプルもあるので、そっちを使っていく。

$ git clone https://github.com/heroku/java-getting-started.git
$ cd java-getting-started

Procfileの作成

続いてProcfileを作成する。ProcfileはHeroku用の設定ファイルで、アプリケーションの起動時に実行するコマンドを記載する。

$ web: java $JAVA_OPTS -cp target/classes:target/dependency/* Main

上記のwebというのはプロセスタイプと呼ばれる宣言部分で、このwebを使うとHTTPを利用してHeroku上のアプリケーションにアクセスできるようになる。

Herokuアプリケーションの作成

Heroku上にアプリケーションを作成する。

$ heroku create
Creating warm-eyrie-9006... done, stack is cedar-14
http://warm-eyrie-9006.herokuapp.com/ | https://git.heroku.com/warm-eyrie-9006.git
Git remote heroku added

heroku createを実行すると、適当なアプリケーション名 + herokuapp.com のドメインが振り分けられる(後から変更可能)。また、新たにherokuというGitのリモートレポジトリがGitプロジェクトに登録される。

Herokuへデプロイ

アプリケーションのコードをHerokuにデプロイする。

$ git push heroku master

herokuのリモートレポジトリにコードをPushすると、自動的にMavenのビルドが開始され、ビルドが正常に完了すると変更がリモートに反映される。

アプリケーションはURL(http://warm-eyrie-9006.herokuapp.com/ など)または以下のコマンドを使って参照 できる。

$ heroku open

ログの確認

デプロイされたアプリケーションのログは、次のコマンドで確認できる。

$ heroku logs --tail

foremanを使ったローカル実行

Heroku Toolbeltをインストールすると、foremanというコマンドが実行できるようになる。Foremanを使うと、Herokuへデプロイした環境と同じ環境をローカルで再現できるようになる。ForemanはProcfileを読むので、コマンドの引数としてプロセスタイプwebを指定して実行する。

$ foreman start web

上記のコマンドを実行すると、http://localhost:5000でアプリケーションが起動する。

その他

Maven dependency pluginの設定

Deploying Java Apps on Herokuを読んでpom.xmlに設定しておく。

ポート番号

Herokuのwebプロセスタイプで使われるHTTPのポート番号は、環境変数$PORTから取得できる。Foreman実行時は$PORTの値は5000となる。

サンプル