윤상석 님의 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 보다 싸니 추천
'모카 스터디 > Nest' 카테고리의 다른 글
백엔드의 꽃 SQL / TypeORM in the Nest (0) | 2023.08.01 |
---|---|
NestJS 랜덤 채팅 웹 앱 (풀스택, 소켓 프로그래밍) (0) | 2023.08.01 |
NestJS 게시판 커뮤니티 프로젝트 1 (0) | 2023.08.01 |
NestJS 개요 및 객체지향 디자인 패턴 (0) | 2023.08.01 |
NestJS를 위한 express 핵심 원리 (0) | 2023.08.01 |