React, Django, Nginx, Docker EC2 배포기 3(진행중)

김범기·2024년 6월 20일

개요

어떻게 배포를 할까하다가 docker hub를 이용하기로 했다. docker hub에 push하고 ec2에서 pull해서 진행하도록 했다.

진행

docker hub push pull

도커 이미지를 docker hub에 push 하려고 했는데, push가 되지 않았다.

그래서 기존의 docker-compose.yml을 다음처럼 했다.
그거 추가하면서 env_file: 과 관련해서도 적어주었다.

이게 지금 상황에서 의미가 있는진 모르겠지만 일단 작동하니까.

services:
  backend:
    build: ./backend/tarotMilkTea/tarotback
    image: 유저네임/이미지명
    ports:
      - "8000:8000"
    env_file:
      - ./backend/tarotMilkTea/tarotback/.env
  frontend:
    build: ./frontend/tarotmilktea
    image: 유저네임/이미지명
    ports:
      - "3000:3000"
    depends_on:
      - backend
    env_file:
      - ./frontend/tarotmilktea/.env
    
  nginx:
    build: ./nginx
    image: 유저네임/이미지명
    ports:
      - "80:80"
    depends_on:
      - backend
      - frontend

이렇게 하니 docker에 push가 가능해졌다.

그리고 난 desktop docker를 사용하고 있으니 여기서 각각의 이미지를 push해주었다.

그리고 docker-hub 페이지에 들어가니 내가 원하는 방식은 아니지만 올라는 가 있었다.

이것을 ec2에서 pull 하기 위해 ec2의 인스턴스에 로그인했고, docker까지 모두 설치완료 후,

docker login -u 유저네임

을 진행했지만, 나는 google로그인이라 password를 작성하지 못했다.

이것에 대해서는
Create and manage access tokens
에서 방법을 확인하면 된다.

  1. docker hub페이지 에서 로그인
  2. 우측 상단에 프로필이미지를 선택
  3. 들어가는 페이지에서 Security로 들어간다.
  4. New Access Token으로 Access Token을 생성하고 이 때 만들어지는 것을 기록하고 잊지말자.
    4-1 왜냐하면 잊으면 다시 못봄.

이렇게 해서 다시 로그인을 하고,

docker pull 유저네임/Repositories명:태그명

으로 하면 받을 수 있다.
나는 3개의 이미지가 있으므로 3개를 pull 했고
실행을 다음처럼 했다.
backend, frontend, nginx 3개이므로 아래처럼 했고, backend의 경우 django이기에 8000:8000을 시도했으나, 안되어서 그냥 했더니 작동했다.
--link를 붙인 것은 depends_on 관계 때문이다.

docker run -d --name backend 유저이름/Repositories1명:태그명1

docker run -d --name frontend -p 3000:3000 --link backend:backend 유저이름/Repositories2명:태그명2

docker run -d --name nginx -p 80:80 --link frontend:frontend --link backend:backend 유저이름/Repositories3명:태그명3

그런데!!! 문제가 생겨부러따....

메모리 부족으로 멈췄다. 따흑.... 그래서 중지를 시키고, 한 얼마나 있었는지 모르겠지만 몇 분 후 완전히 중지 되었음을 확인하고 다시 가동 시켰다.

swap 메모리를 추가해야겠다.

swap메모리추가

아래 블로그를 참고했다.
나 역시 프리티어로 1gb의 램 이기에, 스왑메모리를 2gb로 잡았다. 이러면 docker돌리기는 가능할 것이다.
참고 블로그

  1. EC2 인스턴스에 접속.

  2. swapfile 메모리 할당
    나 역시 2GB를 스왑메모리로 설정했다.

    sudo dd if=/dev/zero of=/swapfile bs=128M count=16

스왑메모리 설정을 4GB로 하고 싶으면

sudo dd if=/dev/zero of=/swapfile bs=128M count=32

  1. swapfile 권한 설정

swapfile이 생성되었을 텐데
읽기, 쓰기가 가능하도록 권한을 수정

sudo chmod 600 /swapfile

  1. swap 공간 생성
    mkswap 명령어를 사용해서 스왑 공간을 생성

    sudo mkswap /swapfile

mkswap: Make Swap의 약자로 스왑 파티션이나 스왑 파일을 생성하는 명령어

  1. swapfile 스왑 메모리 추가
    스왑 공간에 swapfile을 추가

    sudo swapon /swapfile

swapon 명령어가 정상으로 동작했는지 확인

sudo swapon -s

swapon: 스왑으로 사용하는 파일의 경로 및 이름, 타입, 크기, 사용 중인 부분, 우선순위 등을 보여주는 명령어

만약 스왑 영역을 비활성화하려면 swapoff 명령어를 사용

sudo swapoff -a

  1. swap 파일시스템 설정
    시스템 부팅 시마다 자동으로 활성화되도록 파일시스템을 수정

    sudo vi /etc/fstab

아래 내용을 추가하고 저장

/swapfile swap swap defaults 0 0

i를 누르면 편집모드가 되는데 그 때 마지막에서 엔터를 치자. 다 쳤으면 esc키를 눌러서 편집을 빠져나오고, 저장하고 나가려면 :wq 를 입력하고 나가자.
잘 못 조정 했으면 :q! 를 치자.

  1. free 명령어로 메모리 상태 확인
    free 명령어를 사용해서 ec2 메모리 상태를 확인

    free -h

2.01로 Swap 메모리가 할당 된 것을 확인 할 수 있다.

profile
반드시 결승점을 통과하는 개발자

0개의 댓글