[AWS] EC2 & RDS 활용해 Django 서버 배포하기 (3)

민영·2023년 11월 15일
0

aws

목록 보기
4/4

생성한 ec2 인스턴스에 접속해보자!

putty를 켜고 host name에는 ec2 엔드포인트(나는 인스턴스를 꺼두는 경우가 많아서 탄력적 ip를 할당받지는 않았다. 엔드포인트는 public ipv4주소) 를 입력해주고, ssh 인증에서 ec2생성할 때 함께 다운받은 key페어 파일을 등록하고 접속해준다.

접속을 하면 user 네임을 입력하라고 하는데, 나는 ubuntu를 os로 사용하기 때문에 'ubuntu'를 입력하면 됐다.

django 서버가 실행 가능한 환경을 만들자!

$ sudo apt-get update
$ sudo apt-get install python3-pip python3-venv -y

두가지를 차례대로 입력하여 파이썬과 가상환경을 다운받는다.

$ python3 -m venv [가상환경이름]

가상환경을 둘 곳으로 들어가 다음 명령어를 입력해 가상환경 생성.

$ source [가상환경이름]/bin/activate

가상환경을 켜준다.

가상환경을 키고, 배포하고자 하는 프로젝트의 패키지 목록을 requirements.txt을 따라서 모두 다운받아 주면 된다.

*문제발생

나의 경우 패키지를 다운 받는 과정에서 계속 프로세스가 죽는 문제점이 발생했었다. pytorch와 그와 연관된 패키지를 다운 받는 과정에서, 프로세스가 계속 죽었는데, 이는 torch를 그대로 설치할 때 free ram이 부족할 때 종종 생기는 문제라고 했다.(사양이 낮아서ㅜ) 따라서 옵션을 설정하여 패키지를 설치하니 제대로 작동했다.

pip install torch --no-cache-dir

다음과 같은 명령어로 설치해주면 된다.

+추가로 requirements.txt에서 torch를 제외했어도, requirements.txt에 torch관련 다른 패키지가 포함되어 있다면, 해당 패키지를 다운 받는 과정에서 해당 패키지에 버전에 맞는 torch를 또다시 새로 설치하려 하기 때문에 프로세스가 다시 죽는 문제가 발생한다. 따라서 이를 해결하려면, 옵션을 주고 torch를 설치하고, torch 관련 패키지 목록을 requriements.txt파일에서 제외한 다음, 버전에 대한 명세 없이 필요한 패키지를 pip install 해주면 문제 없이 설치 된다.

프로젝트 파일 업로드

새롭게 생성한 ec2 서버에 프로젝트 파일을 올려야 django 서버를 구동할 수 있다. 대체로 프로젝트를 github에 올리고, ec2서버에서 이를 clone하는 방식으로 가져올 수 있다. 하지만 나의 경우, 딥러닝 서버이다보니 프로젝트 내의 모델의 weight가 너무 커 github에서 설정한 최대 용량을 훌쩍 넘길 수 밖에 없었다. 따라서 local에서 직접 ec2 서버에 올리는 방식을 사용했다.

그 방법으로 FileZilla를 사용했다.
파일질라를 설치하고, 왼쪽 상단에 사이트 관리자로 들어가서 새 사이트 만들기를 누른다.


프로토콜을 SFTF로 설정하고, ec2 엔드포인트를 호스트에 입력한다. 로그온 유형은 키파일로 하고, ec2 생성할 때 다운받은 키 파일을 올려주고 연결하면 ec2 서버의 디스크와 연결할 수 있다.

이곳에 로컬 파일들을 올려주면 된다!

manage.py runserver 0.0.0.0:8000

다음 명령어를 입력하여 서버를 켜주면 배포가 완료된다!

+settings.py의 ALLOWED_HOSTS에 ec2엔드포인트를 추가해줘야 api통신이 가능해진다.
+탄력적 ip를 할당받지 않은 경우, 인스턴스를 끄고 켤때마다 엔드포인트가 바뀌어 ALLOWED_HOSTS를 계속 수정해줘야 하는 번거로움이 있을 수 있다. 옳은 방법인지는 모르겠지만, 이를 해결하기 위해 모든 호스트를 허용한다는 의미의 '*'를 추가해줬다!

EC2에서 RDS 데이터베이스 접속하기

이건 아주 간단하다. ec2서버에 올라간 db접속 코드에서 host(rds엔드포인트), port번호, username 그리고 password를 rds에서 생성한 그대로 입력해주면 접속이 가능하다.

profile
공부한 것을 기록하는 곳입니다 🖐

0개의 댓글