본문 바로가기

모카 스터디/Nest

프로젝트 배포와 서버 운영

https://www.inflearn.com/course/%ED%83%84%ED%83%84%ED%95%9C-%EB%B0%B1%EC%97%94%EB%93%9C-%EB%84%A4%EC%8A%A4%ED%8A%B8/dashboard

 

탄탄한 백엔드 NestJS, 기초부터 심화까지 - 인프런 | 강의

Java에는 Spring이 있고 Python에는 Django가 있다면 Node에는 NestJS가 있습니다! 프로페셔널한 Node의 백엔드 NestJS와 Node 객체지향 프로그래밍 및 디자인 패턴을 배우세요! 이 강좌는 멤버십 구독 강좌이

www.inflearn.com

윤상석 님의 NestJS 강의를 토대로 한 기록 포스팅 입니다.

AW 클라우드 컴퓨팅 & S3구축

s3와 lightsail을 사용

 

현재까지 로컬에 uploads 폴더에 사진들을 저장 했었지만 이젠 s3 클라우드 컴퓨터에 저장을 할것이다.

 

우선 버킷을 만들고

모든 엑세스 차단을 풀어준다.

 

그 후 권한에 들어온 뒤 버킷 정책에 들어와 편집을 한다.   정책 예제로 가서 아래와같은 틀로 정책을 알려주는것을 확인한다.

우리만의 정책은 우선 이렇게 작성하였다.

 

addPerm(merion)에서 * 로 모든사람에게 허가해준다.

 

무슨 행동에 대한 허가이냐면

getobject, putobject 즉, 사진을 가져오고 사진을 추가.

 

가장 아래의 리소스는 버진 ARN아래 적힌 코드를 그대로 사용 하되

마지막에 /*를 붙여준다.

 

 

 

 

그리고 보안 자격으로 들어가서 엑세스키를 생성한다.

그리고 그 엑세스키 ID와 보안 엑세스 키 두개 모두 안전한 곳에 저장을 한다.

늘 그래 왔듯이 환경변수로 관리.

 

 

 

REGION은 위 사진의 드레그한 부분이며 NAME은 가장 오른쪽의 파란 nestcat이다.

 

 

Multer +S3연동.  Nest7 까지만 지원을 하니 그냥 참고만 !

npm i -s nestjs-multer-extended

를 다운받아 외부 라이브러리를 활용.

 

그리고 multer를 구현한 모듈에 imports를 해준다.

 

 

 

 

 

 

 

 

로  interceptor를 변경 하고 프론트의 key인 image로 변경

그리고 싱글 파일만 업로드 가능하다.

 

그러면 모듈에서 설정한 basepath의 이름을 가진 폴더를 aws s3에서 확인할 수 있다.

 

 

 

그리고 그 객체의 url을 확인할 수 있고 이 url을 사용해서 프론트가 사진을 웹에 띄운다.

 

file 인자를 콜솔로 찍었을 때 나온 값중 key를 활요한다. 파일 경로를 나타낸다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

AWS-SDK를 사용하여 S3에 업로드

npm i -D @types/multer
npm i aws-sdk @nestjs/config

이러한 파일정보를 aws s3 로 올리고자한다.

 

 

 

AWService 또한 의존성 주입이 가능한 클래스이다. 고모 사용하는 모듈에서 provider로 넣어준다.

또한 모듈로 config를 받아 사용하는것이 아니라

위와같이 service로 주입을 받아서 환경변수를 컨트롤할 수도 있다.

 

 

==> objectKey(파일이 어디저장되어 있는지알려주는) 를 받아 전체 url 를 제공해주는 함수이다.

 

s3에 저장될 때의 폴더 이름과

위에서 콘솔로 찎어본  file을 인자로 준다.

 

 

key는 폴더내부에 현재 시간과 originalname이며 replace를 사용해서 공백을 지워줬다.

/ /g은 정규표현식으로 모든 공백을 뜻한다.

 

key 는 아무거나 내가 원하는걸 사용하면되며

유니크 하게만 해주면 된다.

 

그리고 이후는 저렇게 작성하면된다.

궁금하면 세후 공식문서나 검색을하면된다.

 

 

 

 

 

uplaod와 거진 비슷한 맥락으로 이해하면 된다.

 

 

 

AWS 클라우드 VPS 구축 & PM2 서버 운영하기

배포단계

 

 

1. Pm2 설치 https://github.com/Unitech/pm2

- npm i pm2 -g //pm2 다운
- pm2 list //pm2로 실행된 노드 프로세스 들을 확인가능
- package.json 수정, .env MODE=‘prod’로 수정, PORT=80으로 수정
"start:prod": node dist/main.js를   pm2 start dist/main.js 로 수정

- npm run start:debug // 서버에 올리기전 디버그 해보기
- npm run build  //빌드하기
- npm run start:prod // 배포서버 구현
- pm2 list
- pm2 kill

 

2. github에 코드 올리기

- .env는 .gitignore(dist만 따로 빼서)에 추가해서 올리기

이렇게만 따로 빼서 폴더를 하나 구성.

 

 

 

 

 

 

 

 

 

 

 

3. VPS : 가상 사설 서버 구축

- AWS Lightsail 사용 

- 인스턴스 생성

- ssh를 사용하여 연결

- sudo apt-get update   // 프로그램들의 버전을 업데이트
- sudo apt-get -y upgrade   // 프로그램들 업그레이드
- sudo apt-get install build-essential  // c++이나 파이썬 같은 빌드에서 핵심적으로 담당하는 pg 다운.
- sudo apt-get install curl // 웹사이트에 접속해 패키지를 다운 받을 수 있다.
- curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -- //노드 설치 위한 세팅들 설치
- sudo apt-get install -y nodejs // 노드 설치
- sudo apt-get install git // 깃 다운
- sudo apt-get install vim  // 쉘에서 코드 에디팅을 하는 도구 vim 다운
- touch .gitconfig / 깃에 대한 세팅 파일 만들기
- git config --global user.name amamov   // 깃 설정
-  git config --global user.email amamov@kakao.com // 깃 설정
-  git config --global --list //설정한거 확인하기
- git clone <프로젝트> // 배포한 깃 레포의 url 원격 서버컴퓨터에 클론하기.
- cd <프로젝트>
- npm i  // 클론한 파일에는 node_module이 없으니 package.json을 토대로 설치
- sudo npm i -g @nestjs/cli    //프로젝트 관리를 위한 nest cli 다운
- sudo npm i -g pm2                //프로젝트 관리를 위한 pm2 다운
- vi .env (환경변수 붙여 넣기)  //	로컬에 적은 환경변수를 그대로 복붙

- sudo npm run start:prod // 서버에서 실행

4. 고정 퍼블릭 주소 할당받기

 

5. 배포 성공!!!

 

무료 도메인 등록

aws에서 route53 에서 유료로 가능

 

porkbun 이라는 사이트도 유료지만 aws 보다 싸니 추천

https://porkbun.com/

 

porkbun.com | An oddly satisfying experience.

Porkbun is an amazingly awesome ICANN accredited domain name registrar based out of the Pacific Northwest. We're different, we're easy, and we're affordable. Use us, you won't be sorry. If you don't use us we'll be sad, but we'll still love you.

porkbun.com