꼬꼬마 블로그

꼬꼬마의 기술 블로그

NestJS 앱을 배포하며 생겼던 문제들과 제가 Docker로 배포했던 방법에 대해 써보도록 하겠습니다.

사전 단계

$ npm i -g @nestjs/cli
$ nest new project-name

위의 명령어로 nest 앱을 생성해주어야 합니다.

Script (package.json)

nestJS의 기본 스크립트를 변경해주었습니다. 변경된 점은 prebuild 입니다.

 

저는 yarn build명령어로 dist폴더가 생성되지 않는 오류가 있었습니다.

여러번 빌드를 해보았더니tsconfig.build.tsbuildinfo파일이 있을 경우 dist폴더가 만들어지지 않았고 없을 경우 만들어졌습니다. 그렇기 때문에 빌드 명령 전 tsbuildinfo파일을 dist폴더와 함께 삭제해주었습니다.

 

하지만 이 방법이 정석적인 방법이라는 생각이 들지 않습니다. 더 나은 방법이 있다면 공유 부탁드립다

Dockerfile

RUN npm run --script build 는 한줄입니다, WORKDIR은 usr/src/프로젝트이름 으로 설정하면 됩니다

Dockerfile은 project-root/dockerfile 위치에 생성합니다.

 

Dockerfile은 NestJS앱을 빌드한 후 컨테이너가 실행되었을 때 dist/main.js 파일을 실행합니다.
저는 Docker에 node:8 이미지에서 실행했지만 실패하고 버전을 12로 올린 후 실행하니 문제없이 작동하였습니다.

 

Docker 빌드,  실행

$ docker build -t project .

위의 명령어를 통해 이미지를 빌드합니다. (실행 위치는 dockerfile이 있는 root에서 실행해주어야 합니다)

 

$ docker run project

위의 명령어를 통해 컨테이너를 실행합니다 (옵션이 필요하다면 추가해주어야 합니다)