$ eb init
들어가며
많은 개발자들이 프로젝트를 배포할 떄 여러가지 방법을 많이 사용하는데요 JenKins 나 서클CI 등 을 많이 사용하죠
그러나 요즘은 Git Action을 사용해서 배포하는게 추세입니다.
그러나 기업에선 깃 허브 유료 버전을 사용하는 곳이 많아 private 형식의 repository에서도 git action 기능을 사용할 수 있습니다. 그러나 저희처럼 개발을 공부 목적으로 하는 분들에겐 public 형식으로 repository를 생성 후 git action을 사용하는 편입니다.
이때 문제점이 발생하는데 만약 프로젝트에 config 파일을 따로 S3에 올리거나 배포 서버에 직접 업로드 후 프로젝트를 배포하면 상관 없지만 저 같은 경우처럼 Config 접근 효율성을 위해 class 파일로 빼놓고 env 에 따라 변경할 수 있겠금 개발을 했다면 config 파일이 git 에 push 되면서 민감 정보들을 모두가 볼 수 있는 것이죠
그래서 public repository엔 Config 파일을 제외하고 git action 을 수행하야 하는데 repository에 config 파일이 없으니 배포가 될리가 없습니다. 그래서 프로젝트 소스 코드는 public repository에 올리되 배포는 로컬에서 수행하는 방법을 설명 해드리겠습니다
eb-cli 설치
eb-cli를 설치하기 위해선 파이썬을 설치해야합니다. 밑 URL 를 확인해주세요~
https://yotdark.tistory.com/72
[MAC Python] 맥북 파이썬 설치
들어가며 python은 JAVA 처럼 JVM 에서 돌아가는 언어가 아니기 때문에 로컬에서 해줘야 할 것이 많습니다 오늘 그것을 해내보죠! Python 설치 일단 brew 를 통해 python 을 설치 해야 합니다. eb-cli를 사용
yotdark.tistory.com
설치가 끝나셨다면 다음 명령어를 실행합니다
$ pip install awsebcli --upgrade
* 이때 pip 설치는 가상환경에서 실행이 되야하며 가상환경이 아닐시 설치가 되지 않습니다
설치가 완료됬다면 다음 명령어를 통해 확인합니다
$ eb --version
EB CLI 3.20.7 (Python 3.11.4 (main, Jul 25 2023, 17:08:27) [Clang 14.0.0 (clang-1400.0.29.202)])
설치가 됬다면 elastic beanstalk 로 배포하기 위한 프로젝트로 이동합니다
경로가 프로젝트인 곳에서 eb init을 해줍니다.
$ eb init
Select a default region
1) us-east-1 : US East (N. Virginia)
2) us-west-1 : US West (N. California)
3) us-west-2 : US West (Oregon)
4) eu-west-1 : EU (Ireland)
5) eu-central-1 : EU (Frankfurt)
6) ap-south-1 : Asia Pacific (Mumbai)
7) ap-southeast-1 : Asia Pacific (Singapore)
8) ap-southeast-2 : Asia Pacific (Sydney)
9) ap-northeast-1 : Asia Pacific (Tokyo)
10) ap-northeast-2 : Asia Pacific (Seoul)
11) sa-east-1 : South America (Sao Paulo)
12) cn-north-1 : China (Beijing)
13) cn-northwest-1 : China (Ningxia)
14) us-east-2 : US East (Ohio)
15) ca-central-1 : Canada (Central)
16) eu-west-2 : EU (London)
17) eu-west-3 : EU (Paris)
18) eu-north-1 : EU (Stockholm)
19) eu-south-1 : EU (Milano)
20) ap-east-1 : Asia Pacific (Hong Kong)
21) me-south-1 : Middle East (Bahrain)
22) af-south-1 : Africa (Cape Town)
23) ap-southeast-3 : Asia Pacific (Jakarta)
24) ap-northeast-3 : Asia Pacific (Osaka)
(default is 3):
첫번째로 elastic beanstalk 을 사용하는 리전을 선택합니다. 저는 서울에 만들었기 때문에 10으로 합니다
Select an application to use
1) patkid-place-dev
2) [ Create new Application ]
(default is 2):
완료처리를 한다면 다음으론 리전에 설치된 elastic beanstalk 의 리스트가 나옵니다 전 patkid-place-dev 어플리케이션을 사용하겠습니다
Cannot setup CodeCommit because there is no Source Control setup, continuing with initialization
다음과 같이 문장이 뜨면 eb-cli 초기 셋팅 완료했습니다.
config 파일 생성
eb-cli가 끝나면 config 파일을 생성해 배포에 필요한 스크립트를 작성해야 합니다
다음과 같이 폴더구조를 잡아줍니다.
config.yml
branch-defaults:
main:
environment: {your enviroment}
deploy:
artifact: /Users/jeonhyeonjin/projectP/patkid-place-back-end/deploy.zip
global:
application_name: {your applicationo name}
default_ec2_keyname: null
default_platform: {your detault platform}
default_region: {your region}
include_git_submodules: true
instance_profile: null
platform_name: null
platform_version: null
profile: null
sc: git
workspace_type: Application
branch-defaults: 현재 git branch 별로 배포 환경이 설정되어 있습니다. 이는 배포 될때 마지막 commit 내용이 EB 에 반영되며 콘솔에서도 확인 할 수 있습니다
현재 설정되어 있는 defaults 는 main 이며 main branch 에서 deplpoy를 한다면 main branch 의 마지막 commit 내용을 가져와 배포하게 됩니다.
deploy: 현재 폴더를 압축하고 압축한 파일 경로를 적어둡니다
이때 배포될 프로젝트는 nest js 프레임워크를 사용하며 압축전에 nest js 를 빌드 해야 dist 폴더가 최신화되며 최신버전으로 배포가 됩니다.
global: eb init 시 자동으로 잡아주며 elastic beanstalk 의 정보들을 보여줍니다.
이렇게 스크립트가 다 짜여졌으면 이제 배포할 준비가 됬습니다
배포방법
- nest build
- 보통 typescript 를 실행시키기 위해선 javascript로 변환한뒤 사용할 수 있기때문에 tsc 라는 명령어를 주로 쓰곤 합니다 그러나 nest js는 nest build를 통해 dist 폴더를 생성하기 때문에 위 명령어를 사용합니다
- zip -r deploy.zip . '*.git*'
- 해당 프로젝트 root 에서 압축을 실행합니다. 압축은 프로젝트 전체를 압축하는것이며 .git 파일은 제외시킵니다
- eb deploy
- eb-cli를 통해서 배포를 실행 합니다. 배포가 시작되면 script 에서 설정했듯이 압축한 파일을 aws server 쪽으로 보내게 되고 elastic beanstalk 에선 설정한 플렛폼에 맞겠금 서버를 실행하게 됩니다.
전 이와 같은 명령어를 alise 화 해서 사용하고 있습니다
alias ebdeploy="nest build && zip -r deploy.zip . -x '*.git*' && eb deploy"
이때 중요한건 alise의 명령어를 담을떄 " <- 로 해줘야 인식을 합니다.
만일 ' <-으로 한다면 실행 파일의 위치를 설정할 때 사용하기 때문에 에러가 나타납니다
eb-cli 배포 자료가 많이 없어서 삽질을 많이 하면서 했는데요. 블로그는 많이 참고하지 않고 aws 공식문서나 chat GPT를 사용해서 개발 하였습니다
궁금한 점이나 블로그 내용에 이상이 있는 점이 발생하면 언제든지 댓글로 써주세요 ㅎ
'Nest js' 카테고리의 다른 글
[Scalar] nestjs API 문서 작성 하기 (feat swagger) (0) | 2024.03.21 |
---|---|
[Adminjs] nestjs 에서 어드민 만들기 (0) | 2024.03.20 |
[CloudWatch] CloudWatch로 검색 최적화 Json Formatting 하기 (0) | 2023.05.17 |
[NestJS] 커스텀 데코레이터 검증(validating) (0) | 2023.04.03 |
댓글