이전에 포스팅 했던 AWS 배포와 연관되어 버전 업그레이드와 동시에 달라진 것들이 있어 함께 글에 적으려 한다.
이 글은 EC2 배포를 위해 하는 것들에 대한 포스팅으로 그 외의 로드밸런서 등의 설정은 설명하지 않는다.
EC2를 만들 때 OS를 아마존 리눅스를 선택하면 프리티어가 기본으로 설정되어 있어 해당 버전인 Amazon Linux 2023 AMI로 EC2를 생성하는데 해당 EC2는 docker가 활성화 되지 않기 때문에 꼭 그 아래의 Amazon Linux 2 AMI (HVM) - Kernel 5.10, SSD Volume Type으로 시작한다.
- nvm(노드 버전 관리자)을 설치한다.
- curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
- nvm을 활성화한다.
- . ~/.nvm/nvm.sh
- node.js의 최신버전을 설치한다.
- nvm install node
- 간혹 설치가 되지 않는 경우가 있는데 버전이 맞지 않아서 설치가 되지 않는 경우이므로 node의 버전을 낮추어 설치한다.
- nvm ls-remote 명령어를 통해 설치 가능한 버전을 확인하고 다운그레이드하여 설치한다. 설치가 되지 않는다면 버전을 더 낮추면서 시도한다.
- 아래와 같은 방식으로 특정 버전을 설치할 수 있다.
nvm install --lts
nvm install 16.20.2
- yarn을 설치한다.
npm install -g yarn
- 원래는 sudo npm install -g yarn 명령어를 통해서 설치했지만 sudo를 사용하면 오류가 뜨는데 sudo를 제거하면 정상적으로 설치된다.
- git을 설치한다.
- sudo yum install git
- git 저장소를 clone한다.
- git clone 'git주소'
- 저장소가 public이 아니라면 username과 git token을 입력하여 clone을 받는다.
- clone한 저장소로 이동하여 docker를 설치한다.
- cd '경로'
- sudo yum install docker
- 아래의 명령어를 순서대로 입력하여 docker-compose를 설치한다.
- sudo curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
- sudo curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
- sudo chmod +x /usr/local/bin/docker-compose
- docker를 활성화한다.
- sudo amazon-linux-extras install docker
- sudo service docker start
- sudo usermod -a -G docker ec2-user
- 콘솔을 종료한 후에 재접속한다.
종료 후 재접속을 해야 docker가 활성화됨.
- 가상메모리를 할당한다.
- 해당 과정은 docker로 프로젝트를 build하는 과정에서 container와 image를 만들 때 램이 부족할 경우에 수행한다. 프리티어의 경우에는 메모리가 1GB로 작기 때문에 저장공간을 가상 메모리로 할당하여 부족한 메모리를 보충한다.
- 스왑 파일 생성
sudo fallocate -l 2G /swapfile- 스왑 파일 권한 할당
sudo chmod 600 /swapfile- 리눅스 스왑 영역 설정
sudo mkswap /swapfile- 스왑 영역 활성화
sudo swapon /swapfile- 여기까지 진행했다면 당장의 가상 메모리는 활성화 되지만 다음 접속 시에는 메모리가 활성화 되지 않는다. 따라서 시작할 때 자동으로 가상 메모리가 할당되도록 설정한다.
- 부팅 시 스왑 파일 활성화를 위해 편집기 열기
sudo vi /etc/fstab- 파일의 끝에 아래의 코드 작성 후 저장
/swapfile swap swap defaults 0 0
- 프로젝트 경로로 이동
- cd '경로'
- build를 진행
- docker-compose build
- 백그라운드에서 만든 docker image를 실행
- docker-compose up -d
코드를 pull 받아와서 재배포 해야할 경우에 해당 코드로 다시 build를 진행해야하는데 프리티어를 사용하고 있기 때문에 이미 build한 것들을 삭제해 공간을 확보해야한다. docker-compose build를 통해 생성된 container와 image를 삭제한다.
이것을 위해서 해야할 일에는 다음과 같은 것들이 있다.
- docker 종료
- docker-compose stop
- docker container 삭제
- docker ps -a 명령어를 통해 docker container의 id값을 확인한다.
- docker rm 'container id'로 container를 삭제한다.
- docker image 삭제
- docker images 명령어를 통해 docker image의 id값을 확인한다.
- docker rmi 'image id'로 image를 삭제한다.
- 삭제된 container와 image를 비워 공간을 확보
- docker system prune -> y
이상으로 EC2 배포와 재배포 시 해야할 것들에 대해 알아보았고 다시 build를 해서 docker로 배포하였다면 cloudfront의 무효화를 통해서 서버에 저장되어있는 값을 날려주는 것을 잊지 않도록 한다.