[개발일지] 24.01.19 - 도커로 EC2 인스턴스에 배포

태양신 니카·2024년 1월 21일
0

개발일지

목록 보기
3/5
post-thumbnail

nestJS와 postgreSQL 을 dokcer compose를 통해 ec2 인스턴스 상에서 배포하는 과정을 진행했다.

그동안 프로젝트를 배포했을 때는 vercel이나 cloudtype을 이용해서 배포 단계 그자체에선 크게 리소스를 투여하지 않았고 원리에 대해서 생각해보지 않았다.

막상 정말 프로덕트 관점으로 보았을 때 보안성을 더 중요시 생각하다보니 EC2가 더 필수가 되었다.

단순하게 인스턴스 상에서 돌리는 것보다 이 참에 전부터 써보고 싶었던 도커를 해보고 싶어서 하게 되었다.

Docker Compose


사실 이번에 도커를 써보고 싶었던 이유는 postgre를 한번에 돌리고 싶어서였다.

AWS에서 자체적으로 EC2 인스턴스와 자동으로 연결해주는 DB 인스턴스 기능이 있는데, docker compose 를 사용하면 한번에 백엔드 서비스 컨테이너와 데이터베이스 컨테이너를 관리할 수 있어서 하나의 인스턴스 상에서 해결할 수 있다.

이를 위해선 루트 경로에 docker-compose.yml을 작성해줘야한다.

나의 경우에는 다음고 같이 yml을 설정하였다.

version: '3.8'
services:
  app:
    build: .
    ports:
      - "3000:3000"
    environment: # node 환경변수 주입. 따로 .env 파일을 작성할 필요 없이 여기다 환경변수 값들을 셋팅할 수도 있다.
      DB_USER: ji-hokim 
      DB_PWD: password
      DB_TYPE: postgres
      DB_HOST: pg # 호스트 이름은 services 하의 데이터베이스 이름과 같아야 한다. 
      DB_PORT: password
      DB_NAME: buildnow_test
    


    depends_on:
      - pg

  pg:
    image: postgres
    ports:
      - "5432:5432"
    environment:
      POSTGRES_USER: ji-hokim
      POSTGRES_PASSWORD: password
      POSTGRES_DB: buildnow_test
    volumes:
      - postgres_data:/var/lib/postgresql/data
volumes:
  postgres_data:

위처럼 작동 가능한 yml 파일을 구성하기까지 정말 많은 삽질을 했었다. 그 많은 삽질을 하게된 원인 중 몇가지를 소개하려고 한다.

접속 링크

인스턴스를 생성하게 된다면 주어지는 주소들이 있다. 우리는 퍼블릭 IPV4 DNS 에다가 우리 서비스가 돌고 있는 포트 번호를 붙여서 엔드포인트에 접근해야한다.(나는 계속 공개 IPV4에 http 를 붙이고 접근해서 request가 보내지지도 않았다.)

포트 설정 및 인바운드 규칙 설정

Docker-compose 상에서 포트설정을 다음과 같이 할 수 있다.
외부포트:내부포트
즉 외부로부터 접근해 온 포트에 대해서 내부의 포트로 포워딩을 이 파일을 통해서 해줄 수 있는 것이다.
이렇게 설정한 후 인바운드 규칙애서 해당 외부포트의 접근을 허용해야한다.
사용자지정TCP로 3000번을 열어준다.

이렇게 되면 최종적으로 두 개의 컨테이너가 돌아가고 자동으로 RDS가 서비스에 연결되어 돌아가는 것을 확인할 수 있다.

profile
원피스를 찾아서

0개의 댓글

관련 채용 정보