AIイノベーションズ
Railway/Guides

NestJS アプリをデプロイする

このステップバイステップガイドでは、Railway に NestJS アプリをデプロイする方法を紹介します。クイックセットアップ、データベース統合、ワンクリックデプロイ、その他のデプロイ戦略について解説します。

著者: AIイノベーションズ 阿部隼也X / Twitter

Railwayはこちら

NestJS アプリをデプロイする

Nest は、効率的で信頼性が高く、スケーラブルなサーバーサイドアプリケーションを作成するために設計された最新の Node.js フレームワークです。強力な HTTP サーバーフレームワーク上に構築されており、デフォルトでは Express を使用しますが、パフォーマンスと柔軟性を高めるために Fastify もシームレスにサポートします。

このガイドでは、4 つの方法で Railway に Nest アプリをデプロイする手順を説明します。

  1. テンプレートからのワンクリックデプロイ
  2. GitHubリポジトリから
  3. CLIを使用
  4. Dockerfileを使用

それでは、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 データベースパッケージを選択してください。

  1. nestjshelloworld_dev という名前のデータベースを作成します。
  2. 次のパッケージをインストールします。
npm i @nestjs/typeorm typeorm pg
  • TypeORM は TypeScript および JavaScript 用の ORM ライブラリです。
  • pgはPostgresデータベースと通信するためのものです。
  1. 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 コマンドを使用してアプリを起動します。上記のコードは、アプリが起動するとデータベースに接続しようとします。資格情報のいずれかが間違っている場合は、アプリがデータベースに接続できないという警告が表示されます。

  1. 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!';
  }
}
  1. アプリを再度実行して、変更が反映されていることを確認してください!

デプロイのための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を最速で開始したい場合は、ワンクリックデプロイオプションが最適です。

下のボタンをクリックして開始します。

Railwayにデプロイ

デプロイ後はテンプレートから Eject して、GitHub アカウントにリポジトリのコピーを作成することを強くおすすめします。

注: コミュニティによって作成されたさまざまなNestアプリテンプレートから選択することもできます。

CLIからデプロイ

  1. Railway CLIのインストール
    • CLIをインストールし、Railwayアカウントで認証します。
  2. Railwayプロジェクトの初期化
    • Nestアプリディレクトリで以下のコマンドを実行します。
      railway init
    • プロンプトに従ってプロジェクトに名前を付けます。
    • プロジェクトが作成されたら、提供されたリンクをクリックしてブラウザで表示します。
  3. Postgresデータベースサービスの追加
    • railway add -d postgres を実行します。
    • Enter を押してプロジェクトに追加します。
    • データベースサービスがRailwayプロジェクトに追加されます。
  4. サービスと環境変数の追加
    • railway add を実行します。
    • オプションのリストから Empty Service を選択します。
    • Enter a service name プロンプトで app-service と入力します。
    • Enter a variable プロンプトで入力します
  5. アプリケーションのデプロイ
    • railway up を実行してアプリをデプロイします。
      • このコマンドは、アプリのファイルをスキャン、圧縮し、Railwayにアップロードします。ターミナルにはリアルタイムのデプロイログが表示されます。
    • デプロイが完了したら、アプリサービスのドメインを生成に進むことができます。
  6. 公開URLの設定
    • railway domain を実行して、アプリの公開URLを生成します。
    • 新しいURLにアクセスして、アプリがライブで動作していることを確認してください!

GitHubリポジトリからデプロイ

NestアプリをGitHubから直接Railwayにデプロイするには、以下の手順に従ってください。

  1. Railwayで新しいプロジェクトを作成
    • Railwayにアクセスして、新しいプロジェクトを作成します。
  2. GitHubからデプロイ
    • Deploy from GitHub repo を選択し、リポジトリを選択します。
      • RailwayアカウントがまだGitHubにリンクされていない場合は、リンクするように求められます。
  3. 環境変数の追加とデータベースサービスのプロビジョニング
    • Add Variables をクリックしますが、まだ何も追加しないでください。まず、次の手順に進んでください。
    • Railwayプロジェクトキャンバスを右クリックするか、Create ボタンをクリックし、Database を選択して Add PostgreSQL を選択します。
      • これにより、プロジェクト用に新しいPostgreSQLデータベースが作成され、デプロイされます。
    • データベースがデプロイされたら、必要な環境変数を追加に戻ることができます。
  4. アプリサービスのデプロイ
    • Railwayプロジェクトキャンバスで Deploy をクリックして、変更を適用します。
  5. デプロイの確認
    • デプロイが完了したら、View logs に移動して、サーバーが正常に実行されていることを確認します。 注: デプロイプロセス中に、RailwayはNixpacksを介してNode.jsアプリであることを自動的に検出します。
  6. 公開URLの設定
    • 新しいサービスの「設定」タブのNetworkingセクションに移動します。
    • 「Generate Domain」をクリックして、アプリの公開URLを作成します。

Dockerfileの使用

  1. Nestアプリのルートディレクトリに Dockerfile を作成します。
  2. Dockerfile に以下の内容を追加します。
    # Node公式イメージを使用
    # https://hub.docker.com/_/node
    FROM node:lts
    # アプリディレクトリを作成して変更
    WORKDIR /app
    # ローカルコードをコンテナイメージにコピー
    COPY . ./
    # パッケージのインストール
    RUN npm ci
    # アプリの提供
    CMD ["npm", "run", "start:prod"]
  3. CLIまたはGitHubからデプロイします。

Railwayは Dockerfile を自動的に検出し、それを使用してアプリをビルドおよびデプロイします。

注: Railwayは、パブリックおよびプライベートのDockerイメージからのデプロイもサポートしています。

このガイドでは、Railwayの主なデプロイオプションについて説明しました。セットアップに適したアプローチを選択し、Nestアプリをシームレスにデプロイし始めてください!

次のステップ

Railwayでのエクスペリエンスを最大限に活用するために、これらのリソースを調べてください。

Railwayはこちら

PR