Heroku
このチュートリアルでは、KtorアプリケーションをHerokuに準備してデプロイする方法を説明します。
前提条件
このチュートリアルを開始する前に、以下の前提条件が満たされていることを確認してください。
- Herokuアカウントを持っていること。
- お使いのマシンにHeroku CLIがインストールされていること。
サンプルアプリケーションの作成
新しいKtorプロジェクトの作成、開く、実行で説明されているように、サンプルアプリケーションを作成します。
Ktorには、サーバーを作成および設定する2つのアプローチがあります。コードで設定するか、構成ファイルを使用するかです。デプロイにおける唯一の違いは、着信リクエストをリッスンするために使用するポートを指定する方法です。
アプリケーションの準備
ステップ1: ポートの構成
まず、着信リクエストをリッスンするために使用するポートを指定する必要があります。HerokuはPORT環境変数を使用するため、この変数の値を使用するようにアプリケーションを構成する必要があります。Ktorサーバーを構成する方法に応じて、以下のいずれかを実行します。
サーバー構成がコードで指定されている場合、
System.getenvを使用して環境変数の値を取得できます。src/main/kotlin/com/exampleフォルダーに配置されているApplication.ktファイルを開き、以下に示すようにembeddedServer関数のportパラメーター値を変更します。kotlinfun main() { embeddedServer(Netty, port = System.getenv("PORT")?.toIntOrNull() ?: 8080) { // ... }.start(wait = true) }サーバー構成が
application.confファイルで指定されている場合、${ENV}構文を使用して環境変数をportパラメーターに割り当てることができます。src/main/resourcesに配置されているapplication.confファイルを開き、以下に示すように更新します。ktor { deployment { port = 8080 port = ${?PORT} } }
ステップ2: stageタスクの追加
build.gradle.ktsファイルを開き、HerokuがHerokuのプラットフォームで実行される実行可能ファイルを作成するために使用するカスタムstageタスクを追加します。
tasks {
create("stage").dependsOn("installDist")
}installDistタスクはGradleのアプリケーションプラグインに含まれており、これはすでにサンプルプロジェクトに追加されていることに注意してください。
ステップ3: Procfileの作成
プロジェクトのルートにProcfileを作成し、以下の内容を追加します。
web: ./build/install/ktor-get-started-sample/bin/ktor-get-started-sampleこのファイルは、stageタスクによって生成されたアプリケーションの実行可能ファイルへのパスを指定し、Herokuがアプリケーションを起動できるようにします。 ktor-get-started-sampleをプロジェクト名に置き換える必要がある場合があります。
アプリケーションのデプロイ
Gitを使用してアプリケーションをHerokuにデプロイするには、ターミナルを開いて以下の手順に従ってください。
前のセクションで行った変更をローカルでコミットします。
Bashgit add . git commit -m "Prepare app for deploying"Heroku CLIにログインします。
Bashheroku loginheroku createコマンドを使用してHerokuアプリケーションを作成します。ktor-sample-herokuをアプリケーションの名前に置き換える必要があります。Bashheroku create ktor-sample-herokuこのコマンドは2つのことを行います。
- 新しいHerokuアプリケーションを作成します。これはWebダッシュボードで利用可能です。
- ローカルリポジトリに
herokuという新しいGitリモートを追加します。
アプリケーションをデプロイするには、変更を
heroku mainにプッシュします...Bashgit push heroku main...そして、Herokuがアプリケーションをビルドして公開するまで待ちます。
... remote: https://ktor-sample-heroku.herokuapp.com/ deployed to Heroku remote: remote: Verifying deploy... done.
