PaaS(Platform as a Service)のherokuを使って見る。言語はとりあえずJavaで。
下準備
- herokuの公式ページに接続
- 登録がまだであれば、[Sign up]から登録してログインする
- Javaの[Get Started]をクリック
Maven 3をインストールする
Maven 3とは、Apacheプロジェクトの1つで、ソフトウェアプロジェクトのビルドを支援するツールである。同様のツールに、makeやantがある。
- herokuページの[Maven 3]へのリンクをクリック
- Maven 3.x.x (Binary zip)の行のLinkのファイルをクリックしてダウンロード
- ファイルを解凍する
- 解凍したフォルダを適当な場所に置き、binフォルダにパスを通す
- 環境変数のJAVA_HOMEが、JDKのフォルダを指していることを確認する(設定方法はこちら→
PATHの設定及び環境変数JAVA_HOMEの設定 - Javaダウンロードとインストール
)
- コマンドラインから"mvn --version"と実行してバージョンが表示されればOK
Herokuの環境を構築
- コマンドウィンドウが開いていたら閉じる
- [Download Heroku Toolbelt for Windows]をダウンロードしてインストール
- コマンドを開く
- heroku loginと入力して、herokuのアカウントでログインする
- ログインに成功したらここまでの作業完了
簡単なアプリの公開の事前準備
アプリを公開する
- heroku create で、Heroku上のアプリを作成する
- heroku アプリが作成されると、herokuという名前のgit remoteが作成されて、ローカルリポジトリと紐付けられる
- herokuは、アプリにランダムな名前(dry-stream-401など)を生成する。これはあとでheroku apps:renameで変更できる
- 生成が終わったら git push heroku master で公開する。完了するまで1分ほど時間がかかる
- heroku ps:scale web=1 を実行すると、少なくとも1つのインスタンスが動作する
- heroku open でページにアクセスできる。URLは、https://アプリ名.herokuapp.com となる
ログを見る
- heroku logs --tail を入力すると、herokuのサービスのログを監視できる
- 公開したページを再読み込みすると、ログにアクセス履歴が追加される
- ログ表示は[CTRL]+[C]で停止できる
Procfileの定義
- Procfileは、アプリフォルダに入っているテキストファイル
- テキストエディタで開くと設定が見れる
- Procfileは、アプリをどのコマンドで起動するかを明示的な宣言である
- サンプルは web: java -cp target/classes:target/dependency/* Main とあり、1つのプロセス型であるwebの定義であり、アプリを起動するのに必要なコマンドである
- web は重要な定義であり、herokuのHTTP routing スタックに接続されており、公開した時にwebの交信を受信するものである
- Herokuの実行単位であるdynoがこのコマンドで実行される。これはUnixのコマンドである
- Windows上で動作させるためには、このままでは文法エラーになるので、以下のように修正する
- 新しくProcfile.windowsというファイルを作成
- 作成したファイルをメモ帳などで開き、以下のように追加
web: java -cp target¥classes;"target¥dependency¥*" Main
foreman start web -f Procfile.windows
- Procfilesは追加のProcess typeを追加できる
アプリのスケール
- 現在、アプリが1 web dynoで動作している。dynoは、Procfileで指定されたコマンドを動作させる軽量なコンテナである。
- いくつのdynoが動作しているかは、 heroku ps で見ることができる
- 1つのweb dynoで動作させている場合、1時間動きがないとスリープに移行する。スリープしたアプリが起動するには数秒かかる。その後はすぐに動作するようになる。
- この症状をなくすには、もう一つのdynoを追加する。これをscaleという。
heroku ps:scale web=2
- 不正防止のため、アプリをスケーリングをするには、承認アカウントが必要である
- アカウントをまだ承認していない場合は、認証ページにいって登録する
- アプリごとに、1時間に750 dynoが無料で提供される。アプリを2 dynoで動かすとこの制約を越えることになる。越えたら1 dynoに戻る(最低で、1日24 dyno。31日で744 dyno)
アプリの依存関係の定義
- Herokuはルートディレクトリのpom.xmlファイルで、アプリがJavaであることを認識する
- アプリのための設定は、 mvn clean install で生成できる
- サンプルのプロジェクトには、あらかじめpom.xmlが入っている
- pom.xmlで、アプリの動作に必要な環境が書かれている。アプリが公開される際に、Herokuはこのファイルを読み込んで、mvn clean installコマンドを使って、必要な環境をインストールする
- system.properties ファイルでは、javaのバージョンを定義している。このファイルはオプション
- mvn clean install を実行すると、ローカルディレクトリに依存環境がインストールされるので、ローカル環境でアプリの動作を確認することができる
ローカルでアプリを動かす
- foreman を使って、アプリを開始できる
foreman start web
- エラーが発生したら、先の -f Procfile.windows を追加する
- ローカルアプリは http://localhost:5000 で動作する。curlやWeb Browserで確認する。curlの場合、[Ctrl]+[C]で停止
- この状態ではまだ自由なアプリは実行できない。あとで出てくる config vars の設定が必要
アプリの更新方法
- チュートリアルの指示に従って各ファイルを編集
- 依存環境が変更になったので、 mvn clean install でインストールをし直して、foremanでローカルで起動
- 動作が確認できたら、デプロイする
- gitに追加
git add .
- gitにDemoとメッセージを添えてコミット
git commit -m "Demo"
- リモートにプッシュする
git push heroku master
- herokuに公開する
heroku open