NestJS アプリをデプロイする
このステップバイステップガイドでは、Railway に NestJS アプリをデプロイする方法を紹介します。クイックセットアップ、データベース統合、ワンクリックデプロイ、その他のデプロイ戦略について解説します。
著者: AIイノベーションズ 阿部隼也(X / Twitter)NestJS アプリをデプロイする
Nest は、効率的で信頼性が高く、スケーラブルなサーバーサイドアプリケーションを作成するために設計された最新の Node.js フレームワークです。強力な HTTP サーバーフレームワーク上に構築されており、デフォルトでは Express を使用しますが、パフォーマンスと柔軟性を高めるために Fastify もシームレスにサポートします。
このガイドでは、4 つの方法で Railway に Nest アプリをデプロイする手順を説明します。
それでは、Nest アプリを作成しましょう。
Nest アプリの作成
注: すでにローカルまたは GitHub に Nest アプリがある場合は、この章をスキップして「Nest アプリを Railway にデプロイする」へ進んでください。
新しい Nest アプリを作成するには、Node と NestJS がインストールされていることを確認してください。
ターミナルで以下を実行して、新しい Nest アプリを作成します。
nest new helloworld
helloworld
ディレクトリに新しい Nest アプリが作成されます。
Nest アプリをローカルで実行
以下でアプリをローカル起動します。
npm run start
ブラウザで http://localhost:3000
にアクセスして表示を確認します。
別ポートで実行する場合は PORT=8080 npm run start
を使用します。その場合は http://localhost:8080
にアクセスします。
データベースの追加と設定
注: このアプリでは Postgres を使用します。ローカルに未インストールの場合はインストールするか、別の Node.js データベースパッケージを選択してください。
nestjshelloworld_dev
という名前のデータベースを作成します。- 次のパッケージをインストールします。
npm i @nestjs/typeorm typeorm pg
- TypeORM は TypeScript および JavaScript 用の ORM ライブラリです。
- pgはPostgresデータベースと通信するためのものです。
src/app.module.ts
ファイルを開き、内容を以下のコードに変更します。
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { TypeOrmModule } from '@nestjs/typeorm';
@Module({
imports: [
TypeOrmModule.forRoot({
type: 'postgres',
host: 'localhost',
port: 5432,
username: 'username',
password: 'password',
database: 'nestjshelloworld_dev',
entities: [],
synchronize: true,
}),
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
npm run start:dev
コマンドを使用してアプリを起動します。上記のコードは、アプリが起動するとデータベースに接続しようとします。資格情報のいずれかが間違っている場合は、アプリがデータベースに接続できないという警告が表示されます。
src/app.service.ts
ファイルを開き、内容をHello World, Welcome to Railway!
を返すように変更します。
import { Injectable } from '@nestjs/common';
@Injectable()
export class AppService {
getHello(): string {
return 'Hello World, Welcome to Railway!';
}
}
- アプリを再度実行して、変更が反映されていることを確認してください!
デプロイのためのNestJSアプリの準備
src/app.module.ts
ファイルで、ハードコードされたPostgresデータベースの資格情報を環境変数に置き換えます。
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { TypeOrmModule } from '@nestjs/typeorm';
@Module({
imports: [
TypeOrmModule.forRoot({
type: 'postgres',
host: process.env.DB_HOST,
port: 5432,
username: process.env.DB_USERNAME,
password: process.env.DB_PASSWORD,
database: process.env.DB_DATABASE,
entities: [],
synchronize: true,
}),
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
これにより、アプリはデプロイ中にRailwayから正しいデータベース構成を動的にプルできます。
NestアプリをRailwayにデプロイする
Railwayは、セットアップと好みに応じて、Nestアプリをデプロイする複数の方法を提供します。
テンプレートからのワンクリックデプロイ
Postgresデータベースに接続されたNestを最速で開始したい場合は、ワンクリックデプロイオプションが最適です。
下のボタンをクリックして開始します。
デプロイ後はテンプレートから Eject して、GitHub アカウントにリポジトリのコピーを作成することを強くおすすめします。
注: コミュニティによって作成されたさまざまなNestアプリテンプレートから選択することもできます。
CLIからデプロイ
- Railway CLIのインストール:
- CLIをインストールし、Railwayアカウントで認証します。
- Railwayプロジェクトの初期化:
- Nestアプリディレクトリで以下のコマンドを実行します。
railway init
- プロンプトに従ってプロジェクトに名前を付けます。
- プロジェクトが作成されたら、提供されたリンクをクリックしてブラウザで表示します。
- Nestアプリディレクトリで以下のコマンドを実行します。
- Postgresデータベースサービスの追加:
railway add -d postgres
を実行します。- Enter を押してプロジェクトに追加します。
- データベースサービスがRailwayプロジェクトに追加されます。
- サービスと環境変数の追加:
railway add
を実行します。- オプションのリストから
Empty Service
を選択します。 Enter a service name
プロンプトでapp-service
と入力します。Enter a variable
プロンプトで入力しますDB_DATABASE=${{Postgres.PGDATABASE}}
DB_USERNAME=${{Postgres.PGUSER}}
DB_PASSWORD=${{Postgres.PGPASSWORD}}
DB_HOST=${{Postgres.PGHOST}}
- Postgresの値は、新しいPostgresデータベースの資格情報を参照します。サービス変数の参照について詳しくはこちら。 注: さまざまなオプションについては、Railway CLIリファレンスを参照してください。
- アプリケーションのデプロイ:
railway up
を実行してアプリをデプロイします。- このコマンドは、アプリのファイルをスキャン、圧縮し、Railwayにアップロードします。ターミナルにはリアルタイムのデプロイログが表示されます。
- デプロイが完了したら、アプリサービスのドメインを生成に進むことができます。
- 公開URLの設定:
railway domain
を実行して、アプリの公開URLを生成します。- 新しいURLにアクセスして、アプリがライブで動作していることを確認してください!
GitHubリポジトリからデプロイ
NestアプリをGitHubから直接Railwayにデプロイするには、以下の手順に従ってください。
- Railwayで新しいプロジェクトを作成:
- Railwayにアクセスして、新しいプロジェクトを作成します。
- GitHubからデプロイ:
- Deploy from GitHub repo を選択し、リポジトリを選択します。
- RailwayアカウントがまだGitHubにリンクされていない場合は、リンクするように求められます。
- Deploy from GitHub repo を選択し、リポジトリを選択します。
- 環境変数の追加とデータベースサービスのプロビジョニング:
- Add Variables をクリックしますが、まだ何も追加しないでください。まず、次の手順に進んでください。
- Railwayプロジェクトキャンバスを右クリックするか、Create ボタンをクリックし、Database を選択して Add PostgreSQL を選択します。
- これにより、プロジェクト用に新しいPostgreSQLデータベースが作成され、デプロイされます。
- データベースがデプロイされたら、必要な環境変数を追加に戻ることができます。
DB_DATABASE=${{Postgres.PGDATABASE}}
DB_USERNAME=${{Postgres.PGUSER}}
DB_PASSWORD=${{Postgres.PGPASSWORD}}
DB_HOST=${{Postgres.PGHOST}}
- Postgresの値は、新しいPostgresデータベースの資格情報を参照します。サービス変数の参照について詳しくはこちら。
- アプリサービスのデプロイ:
- Railwayプロジェクトキャンバスで Deploy をクリックして、変更を適用します。
- デプロイの確認:
- デプロイが完了したら、View logs に移動して、サーバーが正常に実行されていることを確認します。 注: デプロイプロセス中に、RailwayはNixpacksを介してNode.jsアプリであることを自動的に検出します。
- 公開URLの設定:
- 新しいサービスの「設定」タブのNetworkingセクションに移動します。
- 「Generate Domain」をクリックして、アプリの公開URLを作成します。
Dockerfileの使用
- Nestアプリのルートディレクトリに
Dockerfile
を作成します。 Dockerfile
に以下の内容を追加します。# Node公式イメージを使用 # https://hub.docker.com/_/node FROM node:lts # アプリディレクトリを作成して変更 WORKDIR /app # ローカルコードをコンテナイメージにコピー COPY . ./ # パッケージのインストール RUN npm ci # アプリの提供 CMD ["npm", "run", "start:prod"]
- CLIまたはGitHubからデプロイします。
Railwayは Dockerfile
を自動的に検出し、それを使用してアプリをビルドおよびデプロイします。
注: Railwayは、パブリックおよびプライベートのDockerイメージからのデプロイもサポートしています。
このガイドでは、Railwayの主なデプロイオプションについて説明しました。セットアップに適したアプローチを選択し、Nestアプリをシームレスにデプロイし始めてください!
次のステップ
Railwayでのエクスペリエンスを最大限に活用するために、これらのリソースを調べてください。
PR