Cómo Diferenciar el Entorno de Desarrollo y el Entorno de Producción y su Configuración (NestJS + MySQL + TypeScript)
- 526Palabras
- 3Minutos
- 06 Jul, 2024
En el artículo anterior https://es.blog.jasonzk.com/nestjs/nesttsmysql/, explicamos detalladamente cómo configurar un entorno de desarrollo NestJS + MySQL + TypeScript. En este artículo, explicaremos detalladamente cómo diferenciar entre entornos de desarrollo y producción, la carga de configuraciones diferentes y cómo usar PM2 para desplegar proyectos NestJS en producción.
Uso de Variables de Entorno para Diferenciar Entornos
Primero, necesitamos crear dos archivos de variables de entorno en el directorio raíz del proyecto: .env.development y .env.production, para los entornos de desarrollo y producción, respectivamente, e instalar 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-databaseInstalar dotenv
1npm install dotenvCrea un directorio config en el directorio src y dentro de él, crea un archivo configuration.ts para cargar las variables de entorno:
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});Configuración de Conexiones de Base de Datos Diferentes
A continuación, en src/app.module.ts, utiliza ConfigModule y TypeOrmModule para cargar la configuración de la base de datos:
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 {}Carga de Archivos de Configuración Diferentes
Para asegurar la carga de archivos de configuración, el método forRoot de ConfigModule debe configurar correctamente las opciones isGlobal y load, y el método forRootAsync de TypeOrmModule se utiliza para cargar la configuración de forma asíncrona y utilizar ConfigService para obtener la información de conexión a la base de datos.
Iniciar el Proyecto en el Entorno de Desarrollo
En el entorno de desarrollo, usa el comando start de Nest CLI para iniciar el proyecto:
1npm run startDesplegar el Proyecto en el Entorno de Producción
En el entorno de producción, recomendamos usar PM2 para gestionar y ejecutar proyectos NestJS.
Instalar PM2
Primero, instala PM2 globalmente:
1npm install -g pm2Configurar PM2
En el directorio raíz del proyecto, crea un archivo ecosystem.config.js para configurar 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};Construir el Proyecto
Antes de iniciar el proyecto, necesitas construirlo:
1npm run buildUsar PM2 para Iniciar el Proyecto
Usa el siguiente comando para iniciar el proyecto:
1pm2 start ecosystem.config.js --env productionEste comando iniciará el proyecto NestJS en el entorno de producción según la configuración en ecosystem.config.js.
Conclusión
Este artículo explica detalladamente cómo diferenciar entre entornos de desarrollo y producción y su configuración, incluyendo el uso de variables de entorno, la configuración de conexiones de base de datos diferentes, la carga de archivos de configuración diferentes y cómo usar PM2 para desplegar proyectos NestJS en producción. Al diferenciar y configurar correctamente los diferentes entornos, se puede gestionar y mantener mejor el proyecto, mejorando la eficiencia de desarrollo y despliegue.