【Railway】Scala Playアプリのデプロイ
この記事で、RailwayにScala Playアプリをデプロイする方法を学びます。クイックセットアップ、データベース統合、ワンクリックデプロイ、その他のデプロイ戦略について説明します。
Railwayはこちら (←このリンクから登録すると20ドル分のクレジットがもらえます)
Scala Playアプリのデプロイ
Playは、JavaおよびScala向けの高速で生産性の高いWebフレームワークです。
軽量でステートレスなWebフレンドリーなアーキテクチャに基づいており、Pekko Streamsに基づいたリアクティブモデルのおかげで、高度にスケーラブルなアプリケーションの予測可能で最小限のリソース消費(CPU、メモリ、スレッド)を特徴としています。
この記事では、4つの方法でRailwayにScala Playアプリをデプロイする方法について説明します。
- テンプレートからのワンクリックデプロイ
- GitHubリポジトリから
- CLIを使用
- Dockerfileを使用
それでは、Playアプリを作成しましょう!
Playアプリの作成
注: PlayアプリがローカルまたはGitHubに既にある場合は、この手順をスキップして、「PlayアプリをRailwayにデプロイする」に直接進むことができます。
新しいScala Playアプリを作成するには、お使いのマシンにJDKとsbtがインストールされていることを確認してください。
ターミナルで次のコマンドを実行して、新しいPlayアプリを作成します。
sbt newテンプレートのリストが表示されます。playframework/play-scala-seed.g8 テンプレートを選択します。
helloworldという名前を付けます。- 組織名
com.railwayguideを付けます。 - 残りはEnterキーを押して、play、scala、sbt scaffoldの最新バージョンを使用します。
helloworld ディレクトリに新しいScala Playアプリがプロビジョニングされます。
Scala Playビューの変更とデータベース構成の設定
ステップ1:インデックスファイルの変更
エディタでプロジェクトを開きます。app/views/index.scala.html ファイルに移動します。
次のように変更します。
@()
@main("Welcome to Play") {
<h1>Welcome to Play!</h1>
<h1>Hello World, Railway!</h1>
}この変更により、新しい見出しが追加され、アプリをローカルで実行すると表示されます。
ステップ2:アプリをローカルで実行
- 次に、アプリをローカルで実行して変更を確認します。ブラウザに新しいヘッダーが表示されるはずです。
ステップ3:PostgreSQLドライバーを依存関係として追加
Playには組み込みのデータベースドライバーが提供されていないため、PostgreSQL JDBCドライバーをプロジェクトに手動で追加する必要があります。
build.sbt に、次の依存関係を追加します。
libraryDependencies += "org.postgresql" % "postgresql" % "42.7.4" // 常に最新の安定バージョンを使用ステップ4:application.confでのPostgreSQLの設定
次に、conf/application.conf でPostgreSQLデータベース接続を構成します。
# PostgreSQLを使用したデフォルトのデータベース構成
db.default.driver = org.postgresql.Driver
db.default.url = "jdbc:postgresql://username:[email protected]:5432/scala_play" # 正しい資格情報に置き換えてくださいusername と password をPostgreSQLの資格情報に置き換えてください。
ステップ5:プロジェクトの依存関係の更新
PostgreSQLドライバーと更新された依存関係をダウンロードするには、次を実行します。
sbt updateステップ6:データベース移行ツール(Flyway)の追加
Playにはデータベース移行の組み込みサポートが含まれていないため、Flywayを使用します。
- Flywayプラグインのインストール:
project/plugin.sbtを開き、Flywayプラグインを追加します。
addSbtPlugin("io.github.davidmweber" % "flyway-sbt" % "7.4.0")build.sbtでFlywayを構成する:Flywayを有効にし、build.sbtでデータベース接続を構成します。
name := """helloworld"""
organization := "com.railwayguide"
version := "1.0-SNAPSHOT"
executableScriptName := "main"
lazy val root = (project in file(".")).enablePlugins(PlayScala).enablePlugins(FlywayPlugin)
scalaVersion := "2.13.15"
libraryDependencies += guice
libraryDependencies += "org.scalatestplus.play" %% "scalatestplus-play" % "7.0.1" % Test
libraryDependencies += "org.postgresql" % "postgresql" % "42.7.4" // 最新バージョン
flywayUrl := "jdbc:postgresql://127.0.0.1:5432/scala_play?user=<username>" # 正しい資格情報に置き換えてください
flywayLocations := Seq("filesystem:src/main/resources/db/migration")<username> をデータベースのユーザー名に置き換えます。
ステップ7:移行ファイルの作成
- 移行フォルダの作成:移行ファイルのフォルダ構造を作成します。
src/main/resources/db/migration- 移行SQLファイルの作成:
src/main/resources/db/migrationに、V1_0__create_employees_table.sqlという名前のスキーマ移行ファイルを作成し、次の内容を記述します。
CREATE TABLE employee (
id VARCHAR(20) PRIMARY KEY,
first_name VARCHAR(30),
last_name VARCHAR(30),
email VARCHAR(30),
admin BOOLEAN
);ステップ8:データベース移行の実行
移行ファイルが配置されたら、次のコマンドでFlyway移行を実行します。
sbt flywayMigrateこれにより、移行が適用され、PostgreSQLデータベースにemployeeテーブルが作成されます。
psqlやPostgreSQLクライアントなどのデータベースツールを使用して、employeeテーブルが正常に作成されたことを確認します。
Playアプリをローカルで実行
次に、ターミナルで sbt run を実行してプロジェクトをビルドし、すべての依存関係をインストールして、埋め込みPekko HTTPサーバーを起動します。
ブラウザを開き、http://localhost:9000 にアクセスしてアプリを表示します。
Scala Playアプリをデプロイ用に準備する
- アプリケーションシークレットの設定:
- データベースURLの設定:
- 許可されるホストの設定:
- デフォルトでは、Playにはデフォルトの許可されるホストフィルターのリストが付属しています。これは、許可される有効なホストのリストです=
["localhost", ".local", "127.0.0.1"]。Railwayホストを許可するオプションを追加する必要があります[".up.railway.app"]。
- デフォルトでは、Playにはデフォルトの許可されるホストフィルターのリストが付属しています。これは、許可される有効なホストのリストです=
- sbt-native-packager sbtプラグインの追加:
sbt updateを実行してsbt-native-packagerをインストールし、依存関係を更新します。
build.sbt で JavaAppPackaging プラグインを有効にし、executableScriptName を main に設定します。build.sbt は次のようになります。
name := """helloworld"""
organization := "com.railwayguide"
version := "1.0-SNAPSHOT"
executableScriptName := "main"
lazy val root = (project in file(".")).enablePlugins(PlayScala).enablePlugins(JavaAppPackaging).enablePlugins(FlywayPlugin)
scalaVersion := "2.13.15"
libraryDependencies += guice
libraryDependencies += "org.scalatestplus.play" %% "scalatestplus-play" % "7.0.1" % Test
libraryDependencies += "org.postgresql" % "postgresql" % "42.7.4" // 常に最新の安定バージョンを使用
flywayUrl := sys.env.getOrElse("DATABASE_URL", "jdbc:postgresql://127.0.0.1:5432/scala_play?user=username")
flywayLocations := Seq("filesystem:src/main/resources/db/migration")sbt-native-packager sbtプラグインを project/plugins.sbt に追加します
addSbtPlugin("com.github.sbt" % "sbt-native-packager" % "x.x.x")application.conf ファイルに以下を追加します。
play.filters.hosts.allowed=[".up.railway.app"]注: Railway提供のドメインは .up.railway.app で終わります。カスタムドメインを追加したら、許可されるホストを新しいURLに更新してください。
application.conf ファイルを開き、以下を追加して DATABASE_URL が環境変数から読み取られるようにします。
db.default.url="jdbc:${?DATABASE_URL}"application.conf ファイルを開き、以下を追加してアプリのシークレットを設定します。
play.http.secret.key=${?APPLICATION_SECRET}これで、Railwayにデプロイする準備が整いました!
PlayアプリをRailwayにデプロイする
Railwayは、セットアップと好みに応じて、Scalaアプリをデプロイする複数の方法を提供します。
テンプレートからのワンクリックデプロイ
最速で始めたい場合は、ワンクリックデプロイオプションが最適です。
下のボタンをクリックして開始します。
デプロイ後はテンプレートから Eject して、GitHub アカウントにリポジトリのコピーを作成することを強くおすすめします。
注: コミュニティによって作成されたさまざまなScalaアプリテンプレートから選択することもできます。
CLIからデプロイ
- Railway CLIのインストール:
- CLIをインストールし、Railwayアカウントで認証します。
- Railwayプロジェクトの初期化:
- プロンプトに従ってプロジェクトに名前を付けます。
- プロジェクトが作成されたら、提供されたリンクをクリックしてブラウザで表示します。
- Postgresデータベースサービスの追加:
railway add -d postgresを実行します。- Enter を押してプロジェクトに追加します。
- データベースサービスがRailwayプロジェクトに追加されます。
- サービスと環境変数の追加:
railway addを実行します。- オプションのリストから
Empty Serviceを選択します。 Enter a service nameプロンプトでapp-serviceと入力します。Enter a variableプロンプトでAPPLICATION_SECRET=<generated-app-secret>と入力します。ここで、<generated-app-secret>は、ターミナルでplayGenerateSecretを実行して生成されたシークレットです。Enter a variableプロンプトでDATABASE_URL=${{Postgres.DATABASE_URL}}と入力します。- 値
${{Postgres.DATABASE_URL}}は、新しいPostgresデータベースのURLを参照します。サービス変数の参照について詳しくはこちら。 注: さまざまなオプションについては、Railway CLIリファレンスを参照してください。
- 値
- アプリケーションのデプロイ:
railway upを実行してアプリをデプロイします。- このコマンドは、アプリのファイルをスキャン、圧縮し、Railwayにアップロードします。ターミナルにはリアルタイムのデプロイログが表示されます。
- デプロイが完了したら、アプリサービスのドメインを生成に進むことができます。
- 公開URLの設定:
railway domainを実行して、アプリの公開URLを生成します。- 新しいURLにアクセスして、アプリがライブで動作していることを確認してください!
Luminusアプリディレクトリで以下のコマンドを実行します。
railway initGitHubリポジトリからデプロイ
Scala PlayアプリをGitHubから直接Railwayにデプロイするには、以下の手順に従ってください。
- Railwayで新しいプロジェクトを作成:
- Railwayにアクセスして、新しいプロジェクトを作成します。
- GitHubからデプロイ:
- Deploy from GitHub repo を選択し、リポジトリを選択します。
- RailwayアカウントがまだGitHubにリンクされていない場合は、リンクするように求められます。
- Deploy from GitHub repo を選択し、リポジトリを選択します。
- 環境変数の追加とデータベースサービスのプロビジョニング:
- Add Variables をクリックしますが、まだ何も追加しないでください。まず、次の手順に進んでください。
- Railwayプロジェクトキャンバスを右クリックするか、Create ボタンをクリックし、Database を選択して Add PostgreSQL を選択します。
- これにより、プロジェクト用に新しいPostgreSQLデータベースが作成され、デプロイされます。
- データベースがデプロイされたら、必要な環境変数を追加に戻ることができます。
DATABASE_URL:値を${{Postgres.DATABASE_URL}}に設定します(これは新しいPostgresデータベースのURLを参照します)。サービス変数の参照について詳しくはこちら。APPLICATION_SECRET:値を生成されたアプリシークレットに設定します。
- アプリサービスのデプロイ:
- Railwayプロジェクトキャンバスで Deploy をクリックして、変更を適用します。
- デプロイの確認:
- デプロイが完了したら、View logs に移動して、サーバーが正常に実行されていることを確認します。 注: デプロイプロセス中に、RailwayはScalaアプリであることを自動的に検出します。
- 公開URLの設定:
- 新しいサービスの「設定」タブのNetworkingセクションに移動します。
- 「Generate Domain」をクリックして、アプリの公開URLを作成します。
Dockerfileの使用
- Playアプリのルートディレクトリに
Dockerfileを作成します。 - CLIまたはGitHubからデプロイします。
Dockerfile に以下の内容を追加します。
# Scala sbt公式イメージを使用
# https://hub.docker.com/r/sbtscala/scala-sbt/tags
FROM sbtscala/scala-sbt:eclipse-temurin-21.0.5_11_1.10.5_3.5.2
# アプリディレクトリを作成して変更
WORKDIR /app
# ローカルコードをコンテナイメージにコピー
COPY . ./
# アプリのビルド
RUN sbt stage
# アプリの実行
CMD ["./target/universal/stage/bin/main"]Railwayは Dockerfile を自動的に検出し、それを使用してアプリをビルドおよびデプロイします。
注: Railwayは、パブリックおよびプライベートのDockerイメージからのデプロイもサポートしています。
この記事では、Railwayの主なデプロイオプションについて説明しました。セットアップに適したアプローチを選択し、Scalaアプリをシームレスにデプロイし始めてください!
次のステップ
Railwayでのエクスペリエンスを最大限に活用するために、これらのリソースを調べてください。
Railwayはこちら (←このリンクから登録すると20ドル分のクレジットがもらえます)