☰ Mục lục series
Tài liệu NestJS tiếng Việt
  1. Nhập môn (Overview)
    1. Giới thiệu
    2. First steps
    3. Controllers
    4. Providers
    5. Modules
    6. Middleware
    7. Exception filters
    8. Pipes
    9. Guards
    10. Interceptors
    11. Custom decorators
  2. Nền tảng (Fundamentals)
    1. Custom providers
    2. Asynchronous providers
    3. Dynamic modules
    4. Injection scopes
    5. Circular dependency
    6. Module reference
    7. Lazy-loading modules
    8. Execution context
    9. Lifecycle events
    10. Discovery service
    11. Platform agnosticism
    12. Testing
  3. Kỹ thuật (Techniques)
    1. Configuration
    2. Database (SQL)
    3. MongoDB
    4. Validation
    5. Caching
    6. Serialization
    7. Versioning
    8. Task scheduling
    9. Queues
    10. Logging
    11. Cookies
    12. Events
    13. Compression
    14. File upload
    15. Streaming files
    16. HTTP module
    17. Session
    18. MVC
    19. Performance (Fastify)
    20. Server-Sent Events
  4. Bảo mật (Security)
    1. Authentication
    2. Authorization
    3. Encryption & Hashing
    4. Helmet
    5. CORS
    6. CSRF
    7. Rate limiting
    8. Vòng đời request
  5. OpenAPI (Swagger)
    1. Introduction
    2. Types and parameters
    3. Operations
    4. Security
    5. Mapped types
    6. Decorators
    7. CLI plugin
    8. Other features
  6. Recipes
    1. REPL
    2. CRUD generator
    3. SWC (fast compiler)
    4. Passport (auth)
    5. Hot reload
    6. MikroORM
    7. Router module
    8. Health checks (Terminus)
    9. CQRS
    10. Prisma
    11. Serve static
    12. Commander
    13. Async local storage
  7. WebSockets
    1. Gateways
    2. Exception filters
    3. Pipes
    4. Guards
    5. Interceptors
    6. Adapters
  8. Microservices
    1. Overview
    2. Redis
    3. MQTT
    4. NATS
    5. RabbitMQ
    6. Kafka
    7. gRPC
    8. Custom transporters
    9. Exception filters
    10. Pipes
    11. Pre-request hooks
    12. Guards
    13. Interceptors
  9. GraphQL
    1. Quick start
    2. Resolvers
    3. Mutations
    4. Subscriptions
    5. Scalars
    6. Directives
    7. Interfaces
    8. Unions and enums
    9. Field middleware
    10. Mapped types
    11. Plugins
    12. Complexity
    13. Extensions
    14. CLI plugin
    15. Generating SDL
    16. Sharing models
    17. Other features
    18. Federation
  10. CLI & triển khai
    1. CLI overview
    2. Workspaces
    3. Libraries
    4. Usage
    5. Scripts
    6. Deployment
    7. Standalone apps
  11. FAQ
    1. Serverless
    2. HTTP adapter
    3. Keep-Alive connections
    4. Global path prefix
    5. Raw body
    6. Hybrid application
    7. HTTPS & multiple servers
    8. Common errors
  12. Phụ lục
    1. Bảng thuật ngữ
CLI & triển khai

Triển khai (Deployment)

Bản dịch từ docs.nestjs.com/deployment

Khi đã sẵn sàng triển khai ứng dụng NestJS lên production, có một số bước quan trọng bạn nên thực hiện để đảm bảo ứng dụng chạy hiệu quả nhất. Trong hướng dẫn này, chúng ta sẽ đi qua các tip và best practice cần thiết để triển khai ứng dụng NestJS thành công.

Nếu bạn không muốn tự quản lý hạ tầng, Mau - nền tảng triển khai chính thức của chúng tôi - giúp bạn đưa ứng dụng lên production trên AWS chỉ với một lệnh duy nhất. Bạn có thể nhảy thẳng tới phần Triển khai dễ dàng với Mau, hoặc đọc tiếp để hiểu các khái niệm nền tảng áp dụng được cho bất kỳ lựa chọn hosting nào.

Yêu cầu trước khi triển khai

Trước khi triển khai ứng dụng NestJS, hãy đảm bảo bạn đã có:

  • Một ứng dụng NestJS hoạt động tốt và sẵn sàng để triển khai.
  • Quyền truy cập vào một nền tảng triển khai hoặc server để host ứng dụng.
  • Toàn bộ biến môi trường (environment variables) cần thiết đã được thiết lập cho ứng dụng.
  • Các service cần thiết, như database, đã được thiết lập và sẵn sàng sử dụng.
  • Ít nhất một phiên bản LTS của Node.js được cài đặt trên nền tảng triển khai.

Gợi ý Với Mau, phần lớn danh sách trên được xử lý sẵn cho bạn: Mau tự provision server, database và broker mà ứng dụng cần, cùng các biến môi trường, nên yêu cầu duy nhất còn lại chỉ là chính ứng dụng của bạn.

Build ứng dụng

Để build ứng dụng NestJS, bạn cần biên dịch code TypeScript sang JavaScript. Quá trình này tạo ra thư mục dist chứa các file đã biên dịch. Bạn có thể build ứng dụng bằng lệnh sau:

$ npm run build

Lệnh này thường chạy lệnh nest build bên dưới, về cơ bản đây là một wrapper bọc quanh TypeScript compiler kèm thêm vài tính năng (copy asset, v.v.). Nếu bạn có build script tùy chỉnh riêng, bạn có thể chạy trực tiếp script đó. Ngoài ra, với monorepo của NestJS CLI, nhớ truyền tên project cần build làm tham số (npm run build my-app).

Sau khi biên dịch thành công, bạn sẽ thấy thư mục dist xuất hiện ở root project chứa các file đã biên dịch, với entry point là main.js. Nếu bạn có các file .ts nằm ở thư mục root của project (và tsconfig.json được cấu hình để biên dịch chúng), chúng sẽ được copy vào thư mục dist, làm thay đổi cấu trúc thư mục đôi chút (thay vì dist/main.js, bạn sẽ có dist/src/main.js, nên hãy lưu ý điều này khi cấu hình server).

Môi trường production

Môi trường production là nơi ứng dụng của bạn có thể truy cập được bởi người dùng bên ngoài. Đây có thể là một nền tảng cloud như AWS (với EC2, ECS, v.v.), Azure, hoặc Google Cloud, hoặc thậm chí là một server riêng do bạn tự quản lý, như Hetzner.

Để đơn giản hóa quá trình triển khai và tránh phải cấu hình thủ công, bạn có thể dùng Mau, nền tảng chính thức của chúng tôi để triển khai ứng dụng NestJS trên AWS. Mau mang lại toàn bộ lợi ích của AWS liệt kê bên dưới mà không cần bạn tự cấu hình bất cứ thứ gì - xem Triển khai dễ dàng với Mau để biết chi tiết.

Một vài ưu điểm khi dùng nền tảng cloud hoặc dịch vụ như Mau:

  • Khả năng mở rộng (Scalability): Dễ dàng scale ứng dụng khi lượng người dùng tăng.
  • Bảo mật (Security): Được hưởng lợi từ các tính năng bảo mật có sẵn và các chứng chỉ tuân thủ (compliance).
  • Giám sát (Monitoring): Theo dõi hiệu năng và tình trạng ứng dụng theo thời gian thực.
  • Độ tin cậy (Reliability): Đảm bảo ứng dụng luôn khả dụng với cam kết uptime cao.

Mặt khác, các nền tảng cloud thường đắt hơn so với self-hosting, và bạn có thể ít quyền kiểm soát hạ tầng bên dưới hơn. VPS đơn giản có thể là lựa chọn tốt nếu bạn muốn một giải pháp tiết kiệm chi phí hơn và có đủ chuyên môn kỹ thuật để tự quản lý server, nhưng hãy nhớ rằng bạn sẽ phải tự lo các việc như bảo trì server, bảo mật, và sao lưu (backup).

Ghi chú người dịch Nếu bạn đã quen deploy ứng dụng Express hay Laravel lên một VPS thuần (Nginx + PM2, hoặc Nginx + PHP-FPM), phần này không có gì khác biệt về bản chất - NestJS sau khi build chỉ là một file main.js chạy bằng Node, bạn vẫn cần tự lo reverse proxy, process manager, TLS như bình thường. Cái Mau (hay các PaaS như Heroku, Render) giải quyết là việc tự động hóa các bước đó, không phải một cơ chế đặc thù của NestJS.

NODE_ENV=production

Mặc dù về mặt kỹ thuật không có sự khác biệt nào giữa development và production trong Node.js và NestJS, việc set biến môi trường NODE_ENV thành production khi chạy ứng dụng trong môi trường production vẫn là một thói quen tốt, vì một số thư viện trong hệ sinh thái có thể hoạt động khác đi dựa trên biến này (ví dụ: bật/tắt debug output, v.v.).

Bạn có thể set biến môi trường NODE_ENV khi khởi động ứng dụng như sau:

$ NODE_ENV=production node dist/main.js

Hoặc chỉ cần set nó trong dashboard của cloud provider/Mau.

Chạy ứng dụng

Để chạy ứng dụng NestJS trong production, chỉ cần dùng lệnh sau:

$ node dist/main.js # Điều chỉnh lệnh này tùy theo vị trí entry point của bạn

Lệnh này khởi động ứng dụng, ứng dụng sẽ lắng nghe trên port đã cấu hình (mặc định thường là 3000). Hãy đảm bảo port này khớp với port bạn đã cấu hình trong ứng dụng.

Ngoài ra, bạn có thể dùng lệnh nest start. Lệnh này là một wrapper bọc quanh node dist/main.js, nhưng có một điểm khác biệt quan trọng: nó tự động chạy nest build trước khi khởi động ứng dụng, nên bạn không cần tự chạy npm run build trước.

Health check

Health check rất quan trọng để giám sát tình trạng và hoạt động của ứng dụng NestJS trong production. Bằng cách thiết lập một endpoint health check, bạn có thể liên tục kiểm tra xem ứng dụng có đang chạy đúng như mong đợi hay không, và phản ứng với sự cố trước khi chúng trở nên nghiêm trọng.

Trong NestJS, bạn có thể dễ dàng implement health check bằng package @nestjs/terminus, package này cung cấp công cụ mạnh mẽ để thêm health check, bao gồm kiểm tra kết nối database, service bên ngoài, và các check tùy chỉnh.

Xem hướng dẫn này để biết cách implement health check trong ứng dụng NestJS, đảm bảo ứng dụng của bạn luôn được giám sát và phản hồi tốt.

Logging

Logging là yếu tố thiết yếu với bất kỳ ứng dụng production-ready nào. Nó giúp theo dõi lỗi, giám sát hành vi ứng dụng, và debug sự cố. Trong NestJS, bạn có thể dễ dàng quản lý logging bằng logger có sẵn hoặc dùng thư viện bên ngoài nếu cần thêm tính năng nâng cao.

Best practice khi logging:

  • Log lỗi, không log exception thô: Tập trung log các thông điệp lỗi chi tiết để tăng tốc quá trình debug và xử lý sự cố.
  • Tránh log dữ liệu nhạy cảm: Không bao giờ log thông tin nhạy cảm như mật khẩu hay token để bảo vệ bảo mật.
  • Dùng Correlation ID: Trong hệ thống phân tán, hãy đính kèm định danh duy nhất (như correlation ID) vào log để trace request xuyên qua các service khác nhau.
  • Dùng log level: Phân loại log theo mức độ nghiêm trọng (ví dụ: info, warn, error) và tắt log debug hoặc verbose trong production để giảm nhiễu.

Gợi ý Nếu bạn đang dùng AWS (với Mau hoặc trực tiếp), hãy cân nhắc dùng JSON logging để dễ parse và phân tích log hơn.

Với các ứng dụng phân tán, việc dùng một dịch vụ logging tập trung như ElasticSearch, Loggly, hay Datadog có thể cực kỳ hữu ích. Các công cụ này cung cấp những tính năng mạnh mẽ như tổng hợp log (aggregation), tìm kiếm, và trực quan hóa, giúp việc giám sát và phân tích hiệu năng cũng như hành vi ứng dụng dễ dàng hơn.

Observability

Health check và log cho bạn biết ứng dụng có đang chạy hay không; nhưng chúng không cho biết route nào chậm đi sau lần deploy gần nhất, class nào đang ngốn thời gian, hay dòng code nào ném ra lỗi. Để làm được điều đó, bạn cần instrument ứng dụng với NestJS Observe, nền tảng observability chính thức của chúng tôi: chỉ cần cài SDK @nestjs/observe, truyền vào một API key, và request, job, lỗi, log, trace sẽ được stream về một dashboard mà không cần tự nối span thủ công hay chạy collector nào.

const app = await NestFactory.create(AppModule, {
  instrument: ObserveInstrument,
});

Xem chương Observability để biết cách thiết lập đầy đủ, bao gồm cả việc đánh version cho từng lần deploy bằng serviceVersion để mỗi bản release được so sánh với bản trước đó.

Ghi chú người dịch Nếu bạn từng dùng OpenTelemetry hay APM (Datadog, New Relic) thủ công với Express hoặc Go, bạn sẽ quen với việc phải tự khai báo tracer, exporter, và wrap middleware để tạo span. Điểm khác biệt ở đây là NestJS Observe được thiết kế để cắm thẳng vào NestFactory.create qua option instrument, tận dụng cơ chế lifecycle có sẵn của framework nên không cần bạn tự viết instrumentation code cho từng route hay provider.

Scale lên hoặc scale ra

Scale ứng dụng NestJS hiệu quả là yếu tố then chốt để xử lý lượng traffic tăng lên và đảm bảo hiệu năng tối ưu. Có hai chiến lược scale chính: scale theo chiều dọc (vertical scaling) và scale theo chiều ngang (horizontal scaling). Hiểu rõ hai cách tiếp cận này sẽ giúp bạn thiết kế ứng dụng quản lý tải hiệu quả hơn.

Scale theo chiều dọc, thường gọi là “scale up”, là việc tăng tài nguyên của một server đơn lẻ để nâng cao hiệu năng. Điều này có thể là thêm CPU, RAM, hoặc storage cho máy hiện tại. Một số điểm cần lưu ý:

  • Đơn giản: Scale dọc nhìn chung dễ triển khai hơn vì bạn chỉ cần nâng cấp server hiện có thay vì quản lý nhiều instance.
  • Giới hạn: Có giới hạn vật lý về việc bạn có thể scale một máy đơn lẻ tới đâu. Khi đạt tới dung lượng tối đa, bạn có thể cần cân nhắc các phương án khác.
  • Tiết kiệm chi phí: Với các ứng dụng có traffic vừa phải, scale dọc có thể tiết kiệm chi phí vì giảm nhu cầu về hạ tầng bổ sung.

Ví dụ: Nếu ứng dụng NestJS của bạn được host trên một máy ảo và bạn nhận thấy nó chạy chậm vào giờ cao điểm, bạn có thể nâng cấp VM lên instance lớn hơn với nhiều tài nguyên hơn. Để nâng cấp VM, chỉ cần vào dashboard của provider hiện tại và chọn loại instance lớn hơn.

Scale theo chiều ngang, hay “scale out”, là việc thêm nhiều server hoặc instance để phân tán tải. Chiến lược này được dùng rộng rãi trong môi trường cloud và thiết yếu với các ứng dụng dự kiến có traffic cao. Lợi ích và điều cần lưu ý:

  • Tăng năng lực xử lý: Bằng cách thêm nhiều instance ứng dụng, bạn có thể xử lý lượng người dùng đồng thời lớn hơn mà không làm giảm hiệu năng.
  • Dự phòng (Redundancy): Scale ngang mang lại khả năng dự phòng, vì việc một server gặp sự cố sẽ không làm sập toàn bộ ứng dụng. Traffic có thể được phân phối lại cho các server còn lại.
  • Load balancing: Để quản lý nhiều instance hiệu quả, hãy dùng load balancer (như Nginx hoặc AWS Elastic Load Balancing) để phân phối traffic đến đều cho các server.

Ví dụ: Với một ứng dụng NestJS có traffic cao, bạn có thể triển khai nhiều instance của ứng dụng trong môi trường cloud và dùng load balancer để định tuyến request, đảm bảo không có instance nào trở thành điểm nghẽn (bottleneck).

Quá trình này trở nên đơn giản hơn nhiều với các công nghệ containerization như Docker và các nền tảng điều phối container (container orchestration) như Kubernetes. Ngoài ra, bạn có thể tận dụng các load balancer đặc thù của từng cloud như AWS Elastic Load Balancing hoặc Azure Load Balancer để phân phối traffic giữa các instance ứng dụng.

Gợi ý Mau hỗ trợ sẵn scale ngang trên AWS, cho phép bạn dễ dàng triển khai nhiều instance ứng dụng NestJS và quản lý chúng chỉ với vài cú click.

Một vài tip khác

Còn một vài tip khác cần ghi nhớ khi triển khai ứng dụng NestJS:

  • Bảo mật: Đảm bảo ứng dụng của bạn an toàn và được bảo vệ khỏi các mối đe dọa phổ biến như SQL injection, XSS, v.v. Xem thêm ở chuyên mục “Security”.
  • Giám sát: Dùng các công cụ monitoring như Prometheus hoặc New Relic để theo dõi hiệu năng và tình trạng ứng dụng. Nếu bạn dùng cloud provider/Mau, họ có thể cung cấp sẵn dịch vụ monitoring (như AWS CloudWatch, v.v.)
  • Không hardcode biến môi trường: Tránh hardcode thông tin nhạy cảm như API key, mật khẩu, hoặc token trong code. Dùng biến môi trường hoặc secrets manager để lưu trữ và truy cập các giá trị này một cách an toàn.
  • Backup: Sao lưu dữ liệu định kỳ để tránh mất dữ liệu khi có sự cố.
  • Tự động hóa việc deploy: Dùng CI/CD pipeline để tự động hóa quá trình deploy và đảm bảo tính nhất quán giữa các môi trường.
  • Rate limiting: Implement rate limiting để ngăn chặn lạm dụng và bảo vệ ứng dụng khỏi các cuộc tấn công DDoS. Xem thêm ở chương Rate limiting, hoặc dùng dịch vụ như AWS WAF để có bảo vệ nâng cao hơn.

Đóng gói ứng dụng với Docker

Docker là một nền tảng dùng containerization để cho phép developer đóng gói ứng dụng cùng với các dependency của nó vào một đơn vị chuẩn hóa gọi là container. Container nhẹ, portable, và cô lập (isolated), khiến chúng trở nên lý tưởng để triển khai ứng dụng trong nhiều môi trường khác nhau, từ local development đến production.

Lợi ích khi Dockerize ứng dụng NestJS:

  • Tính nhất quán: Docker đảm bảo ứng dụng chạy giống nhau trên bất kỳ máy nào, loại bỏ vấn đề “chạy được trên máy tôi mà”.
  • Cô lập: Mỗi container chạy trong môi trường cô lập riêng, tránh xung đột giữa các dependency.
  • Khả năng mở rộng: Docker giúp dễ dàng scale ứng dụng bằng cách chạy nhiều container trên các máy hoặc instance cloud khác nhau.
  • Tính di động (Portability): Container có thể dễ dàng di chuyển giữa các môi trường, giúp việc triển khai ứng dụng trên các nền tảng khác nhau trở nên đơn giản.

Để cài Docker, làm theo hướng dẫn trên trang chủ chính thức. Sau khi cài xong Docker, bạn có thể tạo file Dockerfile trong project NestJS để định nghĩa các bước build container image.

Dockerfile là một file text chứa các chỉ dẫn Docker dùng để build container image.

Dưới đây là một Dockerfile mẫu cho ứng dụng NestJS:

# Dùng image Node.js chính thức làm base image
FROM node:20

# Thiết lập thư mục làm việc bên trong container
WORKDIR /usr/src/app

# Copy package.json và package-lock.json vào thư mục làm việc
COPY package*.json ./

# Cài đặt dependency của ứng dụng
RUN npm install

# Copy phần còn lại của các file ứng dụng
COPY . .

# Build ứng dụng NestJS
RUN npm run build

# Expose port của ứng dụng
EXPOSE 3000

# Lệnh để chạy ứng dụng
CMD ["node", "dist/main"]

Gợi ý Nhớ thay node:20 bằng phiên bản Node.js phù hợp mà bạn đang dùng trong project. Bạn có thể tìm các image Docker Node.js có sẵn trên Docker Hub chính thức.

Đây là một Dockerfile cơ bản thiết lập môi trường Node.js, cài dependency ứng dụng, build ứng dụng NestJS, và chạy nó. Bạn có thể tùy chỉnh file này theo yêu cầu project của mình (ví dụ: dùng base image khác, tối ưu quá trình build, chỉ cài dependency cho production, v.v.).

Hãy tạo thêm file .dockerignore để chỉ định những file và thư mục nào Docker nên bỏ qua khi build image. Tạo file .dockerignore ở root project:

node_modules
dist
*.log
*.md
.git

File này đảm bảo các file không cần thiết không bị đưa vào container image, giữ cho image nhẹ hơn. Sau khi đã thiết lập Dockerfile, bạn có thể build Docker image. Mở terminal, điều hướng tới thư mục project, và chạy lệnh sau:

docker build -t my-nestjs-app .

Trong lệnh này:

  • -t my-nestjs-app: Gắn tag cho image với tên my-nestjs-app.
  • .: Chỉ định thư mục hiện tại là build context.

Sau khi build xong image, bạn có thể chạy nó dưới dạng container. Thực thi lệnh sau:

docker run -p 3000:3000 my-nestjs-app

Trong lệnh này:

  • -p 3000:3000: Map port 3000 trên máy host tới port 3000 trong container.
  • my-nestjs-app: Chỉ định image cần chạy.

Giờ đây ứng dụng NestJS của bạn đã chạy bên trong Docker container.

Nếu muốn triển khai Docker image lên cloud provider hoặc chia sẻ với người khác, bạn cần push nó lên một Docker registry (như Docker Hub, AWS ECR, hoặc Google Container Registry).

Sau khi đã chọn được registry, bạn có thể push image bằng các bước sau:

docker login # Đăng nhập vào Docker registry của bạn
docker tag my-nestjs-app your-dockerhub-username/my-nestjs-app # Gắn tag cho image
docker push your-dockerhub-username/my-nestjs-app # Push image

Thay your-dockerhub-username bằng username Docker Hub của bạn hoặc URL registry tương ứng. Sau khi push image, bạn có thể pull nó trên bất kỳ máy nào và chạy dưới dạng container.

Các cloud provider như AWS, Azure, và Google Cloud cung cấp managed container service giúp đơn giản hóa việc triển khai và quản lý container ở quy mô lớn. Các dịch vụ này cung cấp các tính năng như auto-scaling, load balancing, và monitoring, giúp việc chạy ứng dụng NestJS trong production dễ dàng hơn.

Ghi chú người dịch Nếu bạn từng viết Dockerfile cho ứng dụng Express hay Go, cấu trúc ở đây không có gì khác lạ - đây vẫn là multi-stage build cơ bản (base image, copy, install, build, run). Một cạm bẫy thường gặp khi vibe-code: quên tách stage build và stage runtime, dẫn đến image production vẫn chứa toàn bộ devDependencies và source TypeScript, làm image nặng hơn nhiều lần so với cần thiết. Dockerfile mẫu ở đây là bản đơn giản một stage, khi làm thật bạn nên dùng multi-stage build để chỉ copy dist và node_modules (production) sang image cuối.

Triển khai dễ dàng với Mau

Mau là nền tảng chính thức của chúng tôi để triển khai ứng dụng NestJS trên AWS. Nó xử lý mọi thứ đã mô tả ở các phần trước - provision server, kết nối database và broker, quản lý biến môi trường, scale, monitoring, và CI/CD - để bạn không phải tự lắp ráp mọi thứ.

Triển khai (Deploying)

Kể từ NestJS v12, Nest CLI có sẵn lệnh deploy. Chạy lệnh này từ root project:

$ nest deploy

Nếu Mau chưa được cài, lệnh này sẽ đề nghị thêm @nestjs/mau làm dev dependency rồi tiếp tục. Mọi option bạn truyền vào sẽ được chuyển thẳng cho Mau. Xem nest deploy để biết chi tiết.

Bạn cũng có thể cài CLI toàn cục (globally) và gọi Mau trực tiếp, đây là lựa chọn phù hợp cho môi trường CI nơi không có sẵn tương tác dòng lệnh (interactive prompt):

$ npm install -g @nestjs/mau
$ mau deploy

Sau khi quá trình triển khai hoàn tất, ứng dụng của bạn sẽ live trên AWS - thường chỉ trong vòng vài phút kể từ lần chạy đầu tiên.

Tại sao chọn Mau

Với Mau, việc provision và duy trì hạ tầng đơn giản như việc click vài nút. Bên dưới, chúng tôi dùng Amazon Web Services để mang lại cho bạn một nền tảng mạnh mẽ và đáng tin cậy, đồng thời ẩn đi toàn bộ độ phức tạp của AWS. Bạn có được lợi thế của AWS mà không cần học và quản lý các chi tiết của nó, điều này khiến Mau phù hợp với startup, doanh nghiệp vừa và nhỏ, doanh nghiệp lớn, và bất kỳ developer nào muốn tập trung ship sản phẩm hơn là cấu hình hạ tầng.

Minh hoạ: dashboard

Với Mau, bạn có thể:

  • Triển khai ứng dụng NestJS chỉ với vài cú click (API, microservice, v.v.).
  • Provision database như:
    • PostgreSQL
    • MySQL
    • MongoDB (DocumentDB)
    • Redis
    • và nhiều hơn nữa
  • Thiết lập các broker service như:
    • RabbitMQ
    • Kafka
    • NATS
  • Triển khai scheduled task (CRON job) và background worker.
  • Triển khai lambda function và ứng dụng serverless.
  • Thiết lập CI/CD pipeline để tự động hóa việc triển khai.
  • Và còn nhiều hơn thế nữa!

Mau tương ứng với hướng dẫn này như thế nào

Mỗi chủ đề đã trình bày trước đó trong chương này đều có một tính năng tương ứng được Mau quản lý sẵn:

Biến môi trường Set NODE_ENV và các secret của bạn trong dashboard của Mau thay vì tự quản lý trên server.
Logging Log được thu thập và xem được trong dashboard. JSON logging đặc biệt hữu ích ở đây - xem chương Logger.
Scaling Hỗ trợ sẵn scale ngang: chạy nhiều instance ứng dụng và quản lý chúng từ dashboard.
Health check Trỏ Mau tới endpoint bạn expose bằng Terminus, các instance không khỏe mạnh sẽ được xử lý giúp bạn.
Monitoring và backup Metric đến từ AWS CloudWatch, và các managed database được backup tự động.

Đăng ký ngay hôm nay và Deploy với Mau để đưa ứng dụng NestJS của bạn lên và chạy trên AWS chỉ trong vài phút!

Nội dung gốc: NestJS Documentation © Kamil Myśliwiec, giấy phép MIT. Bản dịch và ghi chú: Lê Văn Dũng.