[0726] docker EC2 배포

nikevapormax·2022년 7월 26일
0

TIL

목록 보기
83/116
post-custom-banner

EC2 인스턴스 생성

  • 현재 나는 main 브랜치에 배포와 관련된 파일들을 전부 올려 놓았다.
    하지만 이것은 좋은 방식이 아니다. CI와 관련된 브랜치를 하나 파서 그곳에서 테스트를 하고 코드가 좋다면 main으로 병합해야 한다.
  • 해당 사실을 늦게 안 것도 있고, 현재는 개인 프로젝트에서 연습 중이라 그대로 main에서 진행하였다.

현재 파일들 github에 올리기

  • 현재 로컬에서 작업하던 파일들을 github에 올리면 된다.
  • 나는 main에 올리지만, CI에 대한 브랜치를 파 그곳에서 작업하는 것이 권장된다.

EC2 인스턴스 생성

  • aws에서 ec2를 생성해보자.
  • ubuntu를 선택해준다.
    • instance type은 프리티어를 사용해준다.
  • key pair는 가지고 있는 것이 있다면 설정하고, 없다면 생성해 설정한다. 나머지 정보들도 아래와 같이 세팅한다.
    • ip 주소 같은 경우, 팀 프로젝트를 배포할 때는 나의 것이나 팀원의 것으로 설정해주어야 한다. 현재는 개인 연습이어 위치 무관을 선택했다.
  • 인스턴스 시작을 눌러 인스턴스를 만들어 준다.
  • 현재 나는 docker를 사용할 것이기 때문에 cloud9을 사용하지 않는다.
  • 생성된 인스턴스를 클릭하고, 상단의 연결을 눌러준다.
  • 연결 버튼을 눌러준다.
  • 다음과 같이 아무것도 없는 것을 확인할 수 있다.
  • 다음과 같이 git을 클론한다.
  • 다시 ec2로 돌아가서 아래의 명령어를 입력해준다.
    • 하지만 현재 인증이 되지 않아서 실행이 되지 않는다.
$ git clone {repository_ssh}

ssh 인증

  • 위와 동일한 화면에서 아래의 코드를 입력해 ssh 인증을 해준다.
$ ssh-keygen -t rsa -C "깃헙에서 쓰는 email@email.com"

  • 이제 rsa 키가 생성되었고, 해당 키를 사용해야 한다.
$ cat /home/ubuntu/.ssh/id_rsa.pub

  • github에 와서 settings로 들어간다.
  • 아래의 경로로 들어가 새로운 ssh 키를 생성해주도록 하자.
  • 앞에서 생성한 키를 붙여넣기 한 뒤 키를 생성해준다.
  • 다시 ec2로 돌아와 git에서 복사해온 ssh 클론 주소를 붙여 넣어 클론을 진행한다.
  • ls를 입력해 클론이 잘 되었는지 확인해보자.

ec2에 docker 설치하기

  • 먼저 아래 코드를 입력해 현재 깔려 있는 패키지들을 전부 업데이트 해준다.
$ sudo apt-get update
  • 그리고 혹시 남아있을 수 있는 docker 관련 프로그램을 전부 지워준다.
$ sudo apt-get remove docker docker-engine docker.io
  • docker를 깔아준다.
$ sudo apt install docker.io
  • docker를 실행해준다.
$ sudo systemctl start docker
  • ec2에서는 docker가 실행되는 것을 아래 명령어로 볼 수 있다.
$ sudo docker ps
  • 아래 코드를 입력해 인스턴스가 시작될 때 docker가 자동으로 실행되도록 한다.
$ sudo systemctl enable docker
  • 아래 코드로 docker의 버전을 확인한다.
$ docker --version
  • 아래 코드로 docker-compose를 깔아준다.
$ sudo apt install docker-compose

ec2에 elastic ip 할당

  • ec2를 생성하면서 ip 주소를 받게 된다. 하지만 해당 주소는 인스턴스를 껐다 키게 되면 변경이 되게 된다.
  • django에 ip를 등록해야 하는데 ip 주소가 계속 변경되면 좋지 않다.
  • 따라서 변경이 되지 않는 elastic ip를 설정해보도록 하겠다.
    • elastic ip를 설정하고 사용하지 않은채 그대로 두어도 과금이 된 경험이 있다.
  • ec2 페이지에서 왼쪽 메뉴바를 아래로 스크롤하면 탄력적 ip 메뉴가 보인다. 우상단 버튼을 눌러 할당을 하도록 한다.
  • 아래와 같이 세팅하고(들어가면 이렇게 되어 있다.) 할당을 누른다.
  • 둘 중에 하나를 눌러 연결을 해준다.
  • 아래와 같이 세팅하고 연결해준다.
  • 할당이 완료된 탄력적 ip 주소를 확인할 수 있다.
  • ec2로 돌아가보면 할당된 ip 주소인 43.200.168.137이 적용되어 있는 것을 볼 수 있다.
  • 프로젝트가 끝나게 되면 사용하던 탄력적 ip를 삭제해 비용 지출을 막아야 한다.

docker compose로 서버 실행

  • 이제 배포를 위한 설정 파일들을 세팅해주기로 하겠다.
  • 앞에서 인스턴스 연결을 했던 페이지로 돌아와 새로고침을 해준다.
  • 작업을 진행하기 앞서 git checkput deploy를 통해 배포용 브랜치로 변경해야 한다.
  • 모든 파일들을 확인해보자.
    • .env 파일이 하나도 없는 것을 볼 수 있다.
  • .env 파일들을 생성해보도록 하겠다.
  • 아래 명령어를 통해 .env.prod 파일을 생성하도록 하자.
    • 로컬에 있는 파일에 추가로 DJANGO_ALLOWED_HOSTS탄력적 ip 주소를 추가해주도록 한다.
    • i를 눌러 insert 모드로 만든 후 로컬에 있는 파일을 복붙해준다.
    • esc 키를 누르고 shift + :을 친 다음, wq(write quit)을 눌러 저장하고 꺼준다.
$ vim .env.prod

  • .env.postgres.prod 파일도 동일한 방식으로 만들어 준다.
  • 이제 docker를 실행해주도록 하겠다.
$ sudo docker-compose -f docker-compose.prod.yaml up -d --build
  • 실행이 되면 container 3개를 확인할 수 있다.
  • 이제 migration을 진행해준다.
$ sudo docker-compose exec web python manage.py makemigrations
$ sudo docker-compose exec web python manage.py migrate
  • 이제 나의 ip 주소를 통해 프로젝트로 접속해보도록 하겠다.
    • 현재 https 적용이 되어 있지 않아 http로 진행하였다.
  • admin 페이지도 잘 들어가지는 것을 볼 수 있다.
  • admin 페이지를 사용하기 위해 슈퍼유저를 만들도록 하겠다. 다음 명령어를 통해 생성 가능하다.
    • web container의 이름을 sudo docker ps를 통해 정확히 확인하고 명령어를 입력해야 한다.
    • 사진과 같이 원래 하던데로 명령어를 입력해 migration을 해주고 슈퍼유저를 생성하면 된다.
$ sudo docker exec -ti turtle_drf_backend_web_1 /bin/sh

  • 다음과 같이 로그인을 해 admin을 사용할 수 있다.
  • control + d를 눌러 컨테이너에서 나올 수 있다.

장점

  • 기존에 했던 배포와 달리 docker를 사용해 내가 해야 할 부분이 많이 줄어들었다.
  • 이미 로컬에서 작업을 마친 뒤 배포를 했기 때문에 따로 디버깅을 할 필요는 없다.
profile
https://github.com/nikevapormax
post-custom-banner

0개의 댓글