Розгортання додатків NestJS: найкращі практики

текст перекладу
NestJS став одним з найпопулярніших фреймворків для створення ефективних та масштабованих серверних додатків. Він використовує TypeScript і сучасний JavaScript, що робить його улюбленим серед багатьох розробників. Однак розгортання додатків на NestJS може бути складним, якщо ви не знайомі з найкращими практиками та різними інструментами, які є у вашому розпорядженні. У цій статті ми розглянемо найкращі практики для безперешкодного розгортання додатків на NestJS.

1. Оптимізація збірки

Перед розгортанням необхідно оптимізувати процес зборки. Оптимізуйте ваш додаток, щоб забезпечити найменший можливий розмір бандлу.

Налаштування компілятора TypeScript

Оптимізуйте ваш файл tsconfig.json, щоб переконатися, що непотрібний код не буде включений:

{  
 "compilerOptions": {  
 "module": "commonjs",  
 "target": "es2017",  
 "noImplicitAny": true,  
 "removeComments": true,  
 "sourceMap": false,  
 "outDir": "./dist",  
 "rootDir": "./src",  
 "strict": true  
 },  
 "include": ["src/**/*.ts"],  
 "exclude": ["node_modules", "dist"]  
}

Tree Shaking

Використовуйте tree shaking для видалення мертвого коду з вашої продакшн збірки. Це можна досягти за допомогою інструментів, таких як webpack або rollup.

Наприклад, використовуючи webpack, ви можете створити файл webpack.config.js:

const path = require('path');  
const { CleanWebpackPlugin } = require('clean-webpack-plugin');  

module.exports = {  
 entry: './src/main.ts',  
 target: 'node',  
 module: {  
 rules: [  
 {  
 test: /\.ts$/,  
 use: 'ts-loader',  
 exclude: /node_modules/,  
 },  
 ],  
 },  
 resolve: {  
 extensions: ['.ts', '.js'],  
 },  
 output: {  
 filename: 'bundle.js',  
 path: path.resolve(__dirname, 'dist'),  
 },  
 plugins: [  
 new CleanWebpackPlugin(),  
 ],  
};

2. Конфігурація середовища

Використовуйте змінні середовища для управління різними налаштуваннями для розробки, тестування та продакшн середовища.

Файл config.module

NestJS надає зручну бібліотеку @nestjs/config, яка дозволяє керувати конфігураційними налаштуваннями:

// src/configuration.ts  
export default () => ({  
 database: {  
 host: process.env.DATABASE_HOST,  
 port: parseInt(process.env.DATABASE_PORT, 10) || 5432,  
 },  
});

Перевірка змінних середовища

Використовуйте бібліотеку перевірки, таку як class-validator та class-transformer, щоб переконатися, що важливі змінні середовища налаштовані правильно:

// src/env.validation.ts  
import { plainToInstance } from 'class-transformer';  
import { IsNotEmpty, IsNumber, IsString, validateSync } from 'class-validator';  

class EnvironmentVariables {  
 @IsString()  
 @IsNotEmpty()  
 DATABASE_HOST: string;  

 @IsNumber()  
 @IsNotEmpty()  
 DATABASE_PORT: number;  
}  

export function validate(config: Record) {  
 const validatedConfig = plainToInstance(EnvironmentVariables, config, {  
 enableImplicitConversion: true,  
 });  
 const errors = validateSync(validatedConfig, { skipMissingProperties: false });  

 if (errors.length > 0) {  
 throw new Error(errors.toString());  
 }  
 return validatedConfig;  
}

3. Dockerизація вашого додатка

Контейнеризуйте ваш додаток за допомогою Docker для забезпечення сумісності в різних середовищах.

Dockerfile

Ось базовий Dockerfile для додатка на NestJS:

# Base image  
FROM node:14-alpine  

# Set working directory  
WORKDIR /app  

# Copy package files  
COPY package*.json ./  

# Install dependencies  
RUN npm install --production  

# Copy remaining application files  
COPY . .  

# Build the application  
RUN npm run build  

# Expose the application port  
EXPOSE 3000  

# Start the application  
CMD ["node", "dist/main"]

Docker Compose (опціонально)

Для більш складних налаштувань з використанням баз даних, використовуйте docker-compose:

version: '3'  
services:  
 app:  
 build: .  

текст перекладу
ports:  
 - '3000:3000'  
 environment:  
 DATABASE_HOST: db  
 DATABASE_PORT: 5432  
 db:  
 image: postgres  
 environment:  
 POSTGRES_DB: nest  
 POSTGRES_USER: nest  
 POSTGRES_PASSWORD: nest_password  
 ports:  
 - '5432:5432'

## 4. Безперервна інтеграція / Безперервне розгортання (CI/CD)

Автоматизуйте ваші процеси розгортання, використовуючи CI/CD пайплайни.

## Приклад GitHub Actions

Ось приклад використання GitHub Actions для побудови та розгортання вашого контейнеризованого додатка на NestJS:

name: CI/CD

on:
push:
branches:
- main

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Налаштувати Node.js
uses: actions/setup-node@v2
with:
node-version: '14'
- run: npm install
- run: npm run build
- name: Побудувати Docker Image
run: docker build . -t my-nest-app:latest
- name: Увійти в Docker Hub
env:
DOCKERUSERNAME: ${{ secrets.DOCKERUSERNAME }}
DOCKERPASSWORD: ${{ secrets.DOCKERPASSWORD }}
run: echo $DOCKERPASSWORD | docker login -u $DOCKERUSERNAME --password-stdin
- name: Завантажити на Docker Hub
run: docker push my-nest-app:latest
- name: Розгорнути в Kubernetes
# Додайте кроки розгортання, наприклад, kubectl apply -f k8s/deployment.yaml
run: echo "Deploying to Kubernetes"
```

Висновок

Розгортання додатка на NestJS можна спростити, дотримуючись найкращих практик оптимізації збірки, конфігурації середовища, контейнеризації та CI/CD. Використовуючи сучасні інструменти та методології, ви можете забезпечити надійність, масштабованість і легкість в обслуговуванні вашого додатка.

Сподіваюся, цей посібник був корисним! Якщо у вас є запитання або коментарі, не соромтесь залишити їх нижче. Успіхів у розгортанні!

Перекладено з: Deploying NestJS Applications: Best Practices

Leave a Reply

Your email address will not be published. Required fields are marked *