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-database
Instalar dotenv
1npm install dotenv
Crea 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 start
Desplegar 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 pm2
Configurar 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 build
Usar PM2 para Iniciar el Proyecto
Usa el siguiente comando para iniciar el proyecto:
1pm2 start ecosystem.config.js --env production
Este 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.