開発環境と本番環境の区別とその設定方法(NestJS + MySQL + TypeScript)
- 788単語
- 4分
- 06 Jul, 2024
前回の記事(https://jp.blog.jasonzk.com/nestjs/nesttsmysql/)では、NestJS + MySQL + TypeScript環境の構築方法について詳細に説明しました。本文では、開発環境と本番環境の区別、異なる設定の読み込み、そしてPM2を使用した本番環境でのNestJSプロジェクトのデプロイ方法について詳しく説明します。
環境変数を使用して環境を区別する
まず、プロジェクトのルートディレクトリに、開発環境用の.env.development
と本番環境用の.env.production
の2つの環境変数ファイルを作成し、dotenvをインストールします。
.env.development
1NODE_ENV=development2DB_HOST=localhost3DB_PORT=33064DB_USERNAME=root5DB_PASSWORD=password6DB_DATABASE=test
.env.production
1NODE_ENV=production2DB_HOST=your-production-host3DB_PORT=33064DB_USERNAME=your-production-username5DB_PASSWORD=your-production-password6DB_DATABASE=your-production-database
dotenvのインストール
1npm install dotenv
src
ディレクトリにconfig
ディレクトリを作成し、その中に環境変数を読み込むためのconfiguration.ts
ファイルを作成します:
1import * as dotenv from "dotenv";2
3const env = process.env.NODE_ENV || "development";4
5dotenv.config({ path: `.env.${env}` });6
7export default () => ({8 environment: env,9 database: {10 host: process.env.DB_HOST,11 port: parseInt(process.env.DB_PORT, 10) || 3306,12 username: process.env.DB_USERNAME,13 password: process.env.DB_PASSWORD,14 database: process.env.DB_DATABASE,15 },16});
異なるデータベース接続の設定
次に、src/app.module.ts
で、ConfigModule
とTypeOrmModule
を使用してデータベースの設定を読み込みます:
1import { Module } from "@nestjs/common";2import { ConfigModule, ConfigService } from "@nestjs/config";3import { TypeOrmModule } from "@nestjs/typeorm";4import configuration from "./config/configuration";5import { UsersModule } from "./users/users.module";6import { User } from "./users/user.entity";7import { AppController } from "./app.controller";8import { AppService } from "./app.service";9
10@Module({11 imports: [12 ConfigModule.forRoot({13 isGlobal: true,14 load: [configuration],15 }),16 TypeOrmModule.forRootAsync({17 imports: [ConfigModule],18 useFactory: (configService: ConfigService) => ({19 type: "mysql",20 host: configService.get("database.host"),21 port: configService.get("database.port"),22 username: configService.get("database.username"),23 password: configService.get("database.password"),24 database: configService.get("database.database"),25 entities: [User],26 synchronize: true,27 }),28 inject: [ConfigService],29 }),30 UsersModule,31 ],32 controllers: [AppController],33 providers: [AppService],34})35export class AppModule {}
異なる設定ファイルの読み込み
設定ファイルの読み込みを確実に行うために、ConfigModule
のforRoot
メソッドでisGlobal
とload
オプションを正しく設定し、TypeOrmModule
のforRootAsync
メソッドを使用して非同期に設定を読み込み、ConfigService
を使ってデータベース接続情報を取得します。
開発環境でのプロジェクト起動
開発環境では、Nest CLIのstart
コマンドを使用してプロジェクトを起動します:
1npm run start
本番環境でのプロジェクトのデプロイ
本番環境では、PM2を使用してNestJSプロジェクトを管理および実行することをお勧めします。
PM2のインストール
まず、PM2をグローバルにインストールします:
1npm install -g pm2
PM2の設定
プロジェクトのルートディレクトリにecosystem.config.js
ファイルを作成し、PM2の設定を行います:
1module.exports = {2 apps: [3 {4 name: "my-nestjs-project",5 script: "dist/main.js",6 env: {7 NODE_ENV: "development",8 },9 env_production: {10 NODE_ENV: "production",11 },12 },13 ],14};
プロジェクトのビルド
プロジェクトを起動する前に、プロジェクトをビルドする必要があります:
1npm run build
PM2を使用したプロジェクトの起動
以下のコマンドを使用してプロジェクトを起動します:
1pm2 start ecosystem.config.js --env production
このコマンドは、ecosystem.config.js
の設定に基づいて、NestJSプロジェクトを本番環境で起動します。
まとめ
本文では、開発環境と本番環境の区別とその設定方法について、環境変数の使用、異なるデータベース接続の設定、異なる設定ファイルの読み込み、およびPM2を使用した本番環境でのNestJSプロジェクトのデプロイ方法を詳細に紹介しました。適切に環境を区別し設定することで、プロジェクトの管理と保守がより容易になり、開発およびデプロイの効率が向上します。