[NestJS, Docker] 네스트 프로젝트 도커(시놀로지)로 배포하기
코드팩토리님의 네스트 강의를 듣고 개인적으로 만든 프로젝트를 시롤로지 NAS 서버에 배포하는 법을 정리해보겠습니다. 시놀로지 도커라고 해도 다른 도커 배포 방법과 동일합니다.
시놀로지 도커 터미널 접속
터미널 또는 윈도우라면 power shell를 실행하고 아래의 명령어를 입력하면 시놀로지 서버에 접속 할수 있습니다.
ssh -p 22 시놀로지아이디@시놀로지서버주소
// 예시
ssh -p 22 myid@123.123.123.123
시놀로지 ssh 서비스 활성화
물론 사전에 시놀로지 DSM에 접속하여 제어판에서 아래와 같이 설정을 해야됩니다.
![시놀로지 설정 화면](https://blog.kakaocdn.net/dn/dbtDD0/btsLk77n8lZ/wK2xO1gGOfLqGPt3GbdCW0/img.png)
Dockerfile 작성
1) 저는 pnpm으로 패키지를 관리하고 있어 pnpm을 설치하였고
2) 기존 프로젝트에있는 패키지 설치를 위해서 package*.json 복사하였습니다.
3) 그 다음 RUN pnpm install을 통해 필요한 패키지를 설치하였습니다.
4) CMD ["node", "dist/main"] 을 통해 dist폴더에 있는 main 을 실행하여 서버를 시작하는 방식으로 진행 했습니다.
FROM node:20-alpine
WORKDIR /nestjs
EXPOSE 3000
RUN npm install -g pnpm
COPY package*.json ./
RUN pnpm install
CMD ["node", "dist/main"]
package.json 파일 생성
이 파일은 도커파일이 있는 위치가 동일한 위치에 두었습니다.
(시놀로지만 해당) DSM로 Dockerfile, package.json 파일 복사
처음에는 ssh로 터미널 접속 후 Vim을 이용해 파일을 생성 했지만 사실 시놀로지 DSM를 통해 파일을 손쉽게 옮길수 있습니다.
1) 우선 DSM 접속 후 파일스테이션(File Station)에 들어갑니다.
2) 그리고 homes폴더에 들어가시면 시놀로지 접속아이디로 된 폴더가 보이는데
여기에 파일을 복사하시면 터미널로 접속한 경로에 파일이 들어갑니다.
쉽게 복사하는 법: 파일 스테이션에 homes 폴더로 가서 접속한 아이디로 된 폴더에 파일을 복사한다
도커 파일로 이미지 생성(도커 파일 다른 이름 적용법 있음)
이미지 생성을 위해서는 터미널에 아래와 같이 입력합니다. 보통은 도커파일의 이름을 Dockerfile로 하지만 다른 이름으로 하고 싶을때는 -f 명령어를 추가해서 해당 도커 파일의 경로를 입력하면 됩니다. 그리고 마지막에 꼭 . 을 입력해야 되더군요
// 도커 파일 이름이 Dockerfile일때
docker build -t 이미지이름:태그 .
// 도커 파일 이름이 DockerfileNest일때
docker build -t nestjs:1.0 -f ./DockerfileNest .
이미지로 도커 컨테이너 생성
이제 마지막 단계은 이미지로 도커 컨테이너를 생성하고 실행해서 서버를 띄우는 단계입니다.
터미널에서 docker run을 해도 되지만 이미지 생성하면 시놀로지의 컨테이너 매니저에서 앞서 생성한 이미지를 볼 수 있을 겁니다. 여기서 포트 설정, 볼륨설정 환경설정을 해주시면 서버가 실행이 될것 입니다. GUI로 그것도 한글로 되어 있어 손쉽게 설정하실 수 있으실것이라 믿고 저는 터미널로 하는 방법을 소개하겠습니다.
터미널에서 도커 컨테이너 생성하고 실행하기
docker run을 통해 도커 컨테이너 생성 하고 컨테이너 실행을 하고 -d은 백그라운드에서 컨테이너가 실행되도록 하는 명령어 입니다.
docker run -d
--name 생성할컨테이너이름
-p 외부포트:3000(내부포트)
-v 로컬경로:컨테이너 경로
-e ENV = dev
-e DB_HOST = 123.123.123.123
-e DB_PORT = 1234
이미지:태그
## 예시
docker run -d
--name nestjs_server
-p 3000:3000
-v /myproject/dist:/nestjs/dist
-e ENV = dev
-e DB_HOST = 123.123.123.123
-e DB_PORT = 1234
nestjs:1.0
마운트 경로 설정
제가 가장 헷갈리는 부분은 배포 파일을 컨테이너에 마운트 하는 부분입니다. 여기서 경로 설정을 잘못해서 서버가 실행이 안되는 경우가 가장 많았습니다.
로컬경로 설정
로컬 경로는 nestjs 빌드한 파일이 있는 dist 폴더 경로를 입력하면 되고
컨테이너 경로
로컬 경로는 너무 명확하기 때문에 헷갈릴 일이 없는데 컨테이너 내부는 볼기 힘들기 때문에 이번 기회에 잘 정리해보겠습니다. 우선 도커파일에서 workdir 설정을 통해 기본 폴더 위치를 nestjs폴더로 설정하였습니다. CMD ["node", "dist/main"]을 보시면 dist 폴더에 main을 실행하도록 되어 있기 때문에 dist 폴더를 컨테이너 내부에 nestjs/dist로 해야 정상적으로 실행이 될 것입니다.
환경 변수 설정
아마도 nestjs와 typeOrm을 사용 중 이시라면 .env 파일을 사용하셨을텐데 여기 안에 내용은 -e ENV = dev 와 같이 입력하시면 됩니다.
이렇게 도커를 통해 nestjs를 배포하는 것은 알아보았습니다.
2021.08.16-도커 기본 명령어
도커 기본 명령어
도커를 사용하면서 제가 주로 사용하는 기본 명령어입니다. 도커 관련 기본 명령 sudo docker pull 이미지명 sudo docker run -v 볼륨명:경로(/app) -n 컨테이너이름 -p 외부포트:내부포트 -e POSTGRES_PASSWORD =
jh-industry.tistory.com
2022.11.23-[스프링, 도커] 도커로 스프링 배포하기
[스프링, 도커] 도커로 스프링 배포하기
스프링으로 간단한 서비스를 구현하고 나서 서버에 배포하여 언제든지 내가 만든 서비스를 이용하고 싶었습니다. 그래서 도커를 이용하는 배포하는 방법을 소개해보고자 합니다. 순서 1. 도커
jh-industry.tistory.com
'프로그래밍사업 > 도커(docker)' 카테고리의 다른 글
[스프링, 도커] 도커로 스프링 배포하기 (0) | 2022.11.23 |
---|---|
도커파일 사용법 - 도커를 이용한 FastAPI 서버 구축 방법 관련 정리 (0) | 2021.11.18 |
[docker, PostgreSQL ] GCP에 Docker Postgresql 세팅하기 (0) | 2021.10.06 |
도커 기본 명령어 (0) | 2021.08.16 |
[docker 예제] 도커를 활용한 우분투(ubuntu 20.04.1) 환경 구축부터 셀레니움(selenium)을 활용한 크롬드라이버 헤드리스( (0) | 2020.12.27 |
댓글