docker-compose + nodejs + postgresql + aws ec2

버들비·2021년 9월 25일
1

Docker

리눅스 가상화 컨테이너. 프로세스들을 격리해서 실행시킬 수 있는 환경을 제공한다.

docker-compose

여러개의 도커 컨테이너들을 한꺼번에 실행하고 관리할 수 있게 해주는 툴. docker-compose.yml 에 필요한 내용을 작성하면 된다.

docker-compose 로 nodejs 와 postgresql 설정하기

docker-compose.yml

services:
  pg:
    image: postgres:13
    restart: always
    volumes:
      - "./postgresql/data:/var/lib/postgresql/data" # 도커 컨테이너가 종료되면 데이터베이스도 사라져 버린다. 컨테이너가 종료돼도 데이터를 보존하기 위해 postgresql/data 폴더에 데이터베이스 데이터들을 저장한다.
      - "./init/:/docker-entrypoint-initdb.d/" # init.sql 파일에 데이터베이스 초기 설정값을 작성하면 도커 컴포즈 시에 자동적으로 테이블을 만들어준다.
    ports:
      - "5432:5432"
    environment:
      POSTGRES_USER: "postgres"
      POSTGRES_PASSWORD: "password"
      POSTGRES_DB: "postgres"
      TZ: "Asia/Seoul"
  node:
    image: "node:14"
    working_dir: /usr/src/app
    environment: # node 환경변수 주입. 따로 .env 파일을 작성할 필요 없이 여기다 환경변수 값들을 셋팅할 수도 있다.
      DB_USER: postgres 
      DB_PWD: password
      DB_TYPE: postgres
      DB_HOST: pg # 호스트 이름은 services 하의 데이터베이스 이름과 같아야 한다. 
      DB_PORT: 5432
      DB_NAME: postgres
    volumes:
      - ./src:/usr/src/app
    ports:
      - "8000:8000"
    command: bash -c "npm install && npm start" # 컨테이너 구성후 npm install 로 노드모듈을 설치하고 npm start 로 서버 실행

init.sql

다음과 같이 작성하면 도커 컨테이너가 구성될때 데이터베이스 테이블도 자동 생성된다.

CREATE TABLE IF NOT EXISTS votes (
    id serial PRIMARY KEY, 
    user_id TEXT, 
    post_id BIGINT NOT NULL, 
    vote_id TEXT NOT NULL, 
    vote_title TEXT NOT NULL, 
    vote_desc TEXT, 
    vote_expired_at TIMESTAMP
); 

CREATE TABLE IF NOT EXISTS vote_items (
    id serial primary key, 
    vote_id TEXT NOT NULL, 
    content TEXT NOT NULL, 
    item_order INTEGER NOT NULL
);

CREATE TABLE IF NOT EXISTS user_vote_items (
    id serial primary key, 
    user_id TEXT, 
    vote_id TEXT, 
    vote_item_id INTEGER
);

서버와 관련된 코드는 손대지 않아도 된다. 로컬 개발환경을 그대로 도커에 올려서 프로덕션 배포가 가능하다.

docker 를 ec2에 배포하기

아마존 공식 문서 를 참고.

  1. Amazon Linux 2 또는 Amazon Linux AMI를 사용하여 인스턴스를 시작
  2. 리눅스 패키지 업그레이드 sudo yum update -y
  3. 도커 설치 sudo amazon-linux-extras install docker
  4. 도커 실행 sudo service docker start
  5. 도커 그룹에 sudo 권한 주기. sudo usermod -a -G docker ec2-user ec-2 기본 유저로만 사용할거면 생략해도 되는듯?

인스턴스에서 위와 같은 과정을 거친 뒤, docker-compose.yml 을 비롯한 파일들을 ec2 에 내려받고 docker-compose up -d 명령어를 치면 도커 컨테이너가 구성되고 데몬(-d)으로 실행된다.

도커 이미지를 다운받는데 약간 시간이 걸린다(1~2분 정도)

0개의 댓글