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").toInt()) { // ... }.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 login
heroku 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.