What is the right way of production deployment of nestjs application

Viewed 31653

I've developed simple nestjs rest services. Now I am planning to deploy my app. Please help me with efficient way of production deployment of nestjs app.

2 Answers

Own server

1) Checkout your project's repository on your server and run npm install.

2) Run npm run build which compiles your project to javascript:

rimraf dist && tsc -p tsconfig.build.json

3) Start your application with:

node dist/main.js

Serverless

zeit now

See this answer.

Heroku

1) Add the file Procfile to your project's root directory:

web: npm run start:prod

2) Add this line to your package.json's scripts:

"heroku-postbuild": "echo Skip builds on Heroku"

3) Set the port in your main.ts (or in your ConfigService)

await app.listen(process.env.PORT || 3000);

If you create a new NestJS project via nest new project-name it will come with the needed scripts in package.json.

yarn build
yarn start:prod

The rest depends on where you want to host the app. NestJS will run on any generic-purpose hosting (Heroku, Vercel, AWS, etc).

If you want to get started with low-config and for free you could try Heroku with the following Dockerized setup:

Dockerfile.prod

FROM node:14-alpine

WORKDIR /app

COPY package.json yarn.lock ./
RUN yarn install

COPY . /app

RUN yarn build

heroku.yml

build:
  docker:
    web: Dockerfile.prod
run:
  web: yarn start:prod

Once the app is created run

heroku git:remote --app <app-name>
heroku stack:set container

In your bootstrap function (main.ts) use the PORT env var:

await app.listen(process.env.PORT || 3000);

If you're using a DB you have to set that up as well.

Related