24 Herokuへのデプロイ
Heroku は、スケーラブルな多言語クラウドアプリケーションプラットフォームです。好みの言語でアプリケーションを作成することに集中し、サーバー、ロードバランシング、ログの集約などを手動で管理することなく、クラウドに簡単にデプロイできます。 Herokuは、JVMアプリケーションの一般的なサポート以外に、特別なRatpackサポートを必要としません。Herokuは、Postgres、Redis、Memcache、RabbitMQ、New Relicなどの多くの要素を備えた豊富なプラットフォームです。Ratpackアプリケーションを提供するための魅力的なオプションです。
Herokuへのデプロイは、通常、ソース形式で行われます。デプロイは、CIパイプラインの最後にGitプッシュを実行するのと同じくらい簡単です。drone.ioやTravis-CI(その他多数)など、多くの一般的なクラウドCIツールは、Herokuへのプッシュを便利にサポートしています。
Herokuを初めて使用する場合は、HerokuクイックスタートとBuildpackのドキュメントを読むことをお勧めします。この章の残りの部分では、RatpackアプリケーションをHerokuにデプロイするための要件と必要な設定について概説します。
1.24 Gradleベースのビルド
Ratpackアプリケーションは、どのビルドシステムでもビルドできますが、RatpackチームはGradleを推奨しています。Herokuは、Gradleビルドパックを介してGradleをネイティブにサポートしており、Ratpack Gradleプラグインでうまく機能します。
すべてのGradleプロジェクトでは、Gradleラッパーを使用する必要があります。ラッパースクリプトがプロジェクトに存在する場合、HerokuはプロジェクトがGradleでビルドされていることを検出します。
1.1.24 ビルド
Gradleビルドパックは、Ratpackが使用されていることを検出すると、デフォルトで./gradlew installDist -x test
を呼び出します。 installDist
タスクはRatpack Gradleプラグインによって追加され(Gradle 2.3より前はinstallApp
)、デフォルトで機能するはずです。これにより、アプリケーションがビルドされ、build/install/«プロジェクト名»
ディレクトリにインストールされます。
別のタスクを実行する必要がある場合は、build.gradle
にstage
タスクを追加できます。典型的なstage
タスクは次のようになります
task stage {
dependsOn clean, installDist
}
stage
タスクが存在する場合、Herokuはデフォルトのタスクではなくこれを実行します。
1.1.1.24 プロジェクト名の設定
デフォルトでは、Gradleはプロジェクトのディレクトリ名をプロジェクト名として使用します。Heroku(および一部のCIサーバー)では、プロジェクトはランダムに割り当てられた名前の一時ディレクトリにビルドされます。プロジェクトで一貫した名前が使用されるようにするには、プロジェクトのルートにあるsettings.gradle
に宣言を追加します
rootProject.name = "«project name»"
これは、Gradleプロジェクトでは良い習慣です。
2.1.24 実行 (Procfile)
デフォルトでは、Herokuはアプリを起動するために次のスクリプトを実行します
build/install/«project name»/bin/«project name»
アプリケーションのルートにProcfile
を作成し、Herokuがアプリケーションの起動に使用するコマンドをweb:
というプレフィックスで指定することで、このコマンドをカスタマイズできます。
3.1.24 設定
Herokuにデプロイされたアプリケーションの環境を設定するには、いくつかの方法があります。これらのメカニズムを使用して、環境変数またはJVMシステムプロパティを設定してアプリケーションを設定できます。
ratpack
およびratpack-groovy
Gradleプラグインを使用する場合に使用されるアプリケーションエントリポイントは、JVMシステムプロパティを使用してServerConfig
に貢献することをサポートしています(詳細については、起動の章を参照してください)。Ratpack Gradleプラグインによって作成されたスタータースクリプトは、標準のJAVA_OPTS
環境変数とアプリ固有の«PROJECT_NAME»_OPTS
環境変数をサポートしています。アプリケーション名がfoo-Bar
の場合、環境変数名はFOO_BAR_OPTS
になります。
これらすべてをまとめる1つの方法は、env
を介してアプリケーションを起動することです
web: env "FOO_BAR_OPTS=-Dapp.dbPassword=secret" build/install/«project name»/bin/«project name»
Herokuはこれをプラットフォームの有用なデフォルトに設定するため、一般にJAVA_OPTS
を使用しない方が望ましいです。
もう1つのアプローチは、設定変数を使用することです。Procfileを介して環境を設定することの利点は、この情報がバージョン管理されたソースツリーにあることです。設定変数を使用することの利点は、Herokuでそれらを表示/変更する権限を持つユーザーのみが使用できることです。秘密にする必要がある値(パスワードなど)に設定変数を設定し、Procfileでそれらを参照することで、両方のアプローチを組み合わせることができます。
web: env "FOO_BAR_OPTS=-Dapp.dbPassword=$SECRET_DB_PASSWORD" build/install/«project name»/bin/«project name»
これで、ソースツリーでどのプロパティと環境変数が設定されているかを簡単に確認できますが、機密性の高い値はHeroku管理ツールを介してのみ表示されます。
2.24 その他のビルドツールとバイナリデプロイ
Ratpackプロジェクトは、他のビルドツールとの「公式の」統合を提供していません。ただし、好きなツールを使用して、Heroku用のRatpackアプリケーションをビルドしたり、バイナリ形式でデプロイしたりすることは可能です。
コンパイルされたRatpackアプリケーションがHeroku環境にある場合(別のビルドツールでビルドするか、バイナリデプロイメントによって)、java
を直接使用してアプリケーションを起動するだけです。
web: java ratpack.groovy.GroovyRatpackMain
Ratpackアプリケーションの起動の詳細については、起動の章を参照してください。
3.24 一般的な考慮事項
1.3.24 ポート
Herokuは、各アプリケーションに一時的なポート番号を割り当て、PORT
環境変数によって使用できるようにします。 ratpack.port
システムプロパティが設定されていない場合、Ratpackはデフォルトでこの環境変数を尊重します。