текст перекладу
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