[ AWS ] EC2에 NestJS + MongoDB 배포하기!

다율·2025년 2월 25일

AWS

목록 보기
2/2
post-thumbnail

이전에 작성한 글과 이어지는 글입니다!

  • 이전 글 요약: EC2 인스턴스 생성 후, 시작하기

배포하기 전! (보안그룹 수정)

  • 인바운드 보안그룹을 수정해 프로젝트에 필요한 포트를 허용해주겠습니다!

    EC2 > 보안그룹 > 생성한 인스턴스 보안그룹 ID > 인바운드 규칙 편집

  • 저는 이렇게 해주었습니다!
    - 내 IP만 허용할 때는 소스유형에서 내 IP를 선택

    • 모든 IP를 허용할 때는 소스유형에서 사용자 지정 선택 후 0.0.0.0/0, ::/0 (IPv4, IPv6 모두 허용) 입력
SSHHTTPCustom TCPCustom TCP
포트번호2280300027017
설명내 IP(접속용)모든 IP 허용(웹 서비스용)모든 IP 허용(Nest.js용)본인 IP만 허용(MongoDB용)


배포과정 시작!

1) EC2에 SSH 접속하기

  • Public IP 로도 가능하지만 이전 글에 설명한 것처럼 인스턴스를 재시작 할 때마다 IP가 변경되므로 저는 이전 글에서 할당한 탄력적 IP를 사용하겠습니다!
  • 저번 글에서 생성한 키 파일(.pem)을 사용해서 접속합니다.
// EC2의 OS를 Amazon Linux로 했으므로 ec2-user로 접속
ssh -i ~/다운로드/내키파일.pem [ec2-user or ubuntu]@EC2_탄력적 or Public_IP

ex) ssh -i ~/my-demo-server-key.pem ec2-user@24.500.92.123
  • Are you sure you want to continue connecting (yes/no) 나오면 yes를 입력해줍니다. (접근할지 말지 선택하는 것)
  • 그리고 접속하다가 에러가 나오면
    1. 인스턴스 재부팅하기 (aws 사이트에서 진행)

    1. WARNING: UNPROTECTED PRIVATE KEY FILE! 이라는 에러 메세지가 뜨면 권한을 수정해주어야 하기 때문에 chmod 400 ~/my-demo-server-key.pem 으로 권한 수정하기 (나만 파일을 읽을 수 있게 설정)
  • 접속되면 이렇게 새가 반겨줍니다 🐣

2) EC2 서버에 필수 패키지 설치하기 (update, Docker)

  • EC2는 기본적으로 최소한의 패키지만 설치되어있기 때문에 필요한 것들을 설치해야 합니다!
  • 저는 Docker, Docker Compose를 설치해주었습니다.
    - Amazon Linux에서는 yum에 Docker Compose 패키지가 없어서 수동으로 설치 ㅜㅜ
# 패키지 최신 버전으로 업데이트
Amazon Linux: sudo yum update -y
ubuntu: sudo apt update && sudo apt upgrade -y

# docker, docker-compose 설치
Amazon Linux: sudo yum install -y docker
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

ubuntu: sudo apt install -y docker.io docker-compose
  • 설치가 됐는지 확인해주고!
docker --version
docker-compose --version
  • Docker가 실행됐는지 상태를 확인해줍니다.
sudo systemctl start docker

# 부팅 시 자동 실행 설정 (선택)
sudo systemctl enable docker  
 
# Docker가 실행중인지 확인!
sudo systemctl status docker 

3) 현재 사용자를 Docker 그룹에 추가하기! (sudo 없이 사용할 수 있도록 설정)

Amazon Linux: sudo usermod -aG docker ec2-user
ubuntu: sudo usermod -aG docker $USER
  • 변경사항을 적용하려면 로그아웃 후 다시 로그인을 해야합니다!
exit

# 다시 ssh 접속
ssh -i ~/다운로드/내키파일.pem [ec2-user or ubuntu]@EC2_탄력적 or Public_IP

ex) ssh -i ~/my-demo-server-key.pem ec2-user@24.500.92.123
  • 그럼 docker ps 같은 명령어를 sudo 없이 수행 가능합니다.

4) EC2 서버로 내 프로젝트 복사 (SCP 사용)

  • 터미널에서 현재 로컬에 있는 프로젝트를 EC2 서버로 업로드 해보겠습니다!
  • 서버 폴더가 있는 위치에서 이 명령어(현재 폴더를 EC2의 홈 디렉토리로 복사)를 실행합니다.
scp -i ~/여기에 정확한 경로 작성/my-demo-server-key.pem -r ~/demo_server ec2-user@42.400.92.405:~/
  • 업로드가 끝나면 다시 EC2에 로그인해서 ls 명령어로 확인할 수 있습니다.

5) EC2에서 .env 파일 수정, 적용

  • 다시 EC2로 접속하고 .env 파일을 EC2 환경에 맞게 수정해줍니다.
# 프로젝트 경로로 이동
cd ~/프로젝트경로

# 편집기 실행
vi .env
  • 저는 MONGO_URL 만 수정했습니다!
  • vi editer 를 사용했으므로 i 입력 후 수정 → esc:wq 저장 후 종료 순으로 진행했습니다.
MONGO_URI=mongodb:/[docker-compose.yml에서 설정한 MongoDB 컨테이너의명]:27017/mongodb-cluster
MONGO_DB=mongodb-cluster

ex)
MONGO_URI=mongodb://mongodb:27017/mongodb-cluster
MONGO_DB=mongodb-cluster

  • 변경했으므로 docker-compose를 변경사항이 적용되도록 다시 실행합니다.
# 프로젝트 경로로 이동
cd ~/프로젝트경로

# 현재 실행중인 모든 컨테이너 중지, 연결된 네트워크 삭제 (컨테이너를 깨끗하게 종료하고 싶을 때 사용)
docker-compose down

# 컨테이너를 다시 생성하고 실행(이미지를 새로 만들고, 백그라운드에서 실행)
docker compose up --build -d

# 컨테이너가 정상 실행되는지 확인
docker ps

6) Nestjs 서버가 MongoDB에 잘 연결되었는지 확인!

  1. log 확인하기
docker logs [컨테이너 이름]

ex) docker logs demo_server-backend
  1. API 테스트 하기 (nestjs 서버가 잘 실행되고 있는지 확인)
    • Hello World! 가 나온다면 성공!
curl http://localhost:3000
  1. EC2 외부에서 API 접근 테스트하기
    • 응답이 오면 성공!
curl http://<EC2-퍼블릭-IP or 탄력적 주소>:3000
  • 실행 결과

혹시 잘못된 정보가 있으면 댓글로 알려주세요! 끝까지 봐주셔서 감사합니다 ☺️

profile
새싹 개발자 🌱

0개의 댓글