TIL no.82 - AWS - Django Server Deployment

박준규·2019년 11월 19일
1

AWS 서비스를 이용해 Django Back-End Server를 구축해보려 합니다.
준비사항은 다음과 같습니다.
1. EC2 인스턴스 (ubuntu) 생성
2. Load Balancer 생성
3. RDS 생성

각 서비스의 역할은 다음과 같습니다.

AWS ServiceRole
EC2Server
Load BalancerServer Traffic 분산처리 서비스
RDSDatabase

1. EC2

생성한 EC2 인스턴스의 "설명"을 보면
IPv4 퍼블릭 IP 를 볼 수 있습니다.

ssh 통신을 통해 EC2 instance로 접속합니다.
이 때, instance를 생성시 다운로드 받은 key가 필요합니다.

$ ssh -i {key.pem file route} ubuntu@{EC2 instance IPv4 Public IP}

이렇게 하면 EC2 instance에 접속할 수 있습니다.

배포하고 싶은 코드를 remote repository에서 받아옵니다.(git clone)

2. RDS

RDS Instance를 생성했으면 잘 생성되었는지 확인해봅니다.

mysql -h {RDS End-point 주소} -u root -p

위 명령어로 RDS instance로 접속할 수 있습니다.

RDS에 기존의 Database를 넣어주어야 합니다.
mysqldump를 이용해 Local에서 작업한 DataBase를 sql파일로 만들어 추출합니다.

$ mysqldump -u {user name} -p {database name} > {filename.sql}

이렇게 추출한 파일을 RDS에 넣어줍니다.

$ mysql -h {RDS End-point 주소} -u root -p {database name} < {filename.sql}

3. setting

1. EC2에서 코드를 2. RDS에서 DB를 준비했습니다.

Github에 올릴 때, my_settings.py는 .gitignore에 포함시키기 때문에
git clone을 한 뒤에 Local에서 작업할 때와 달라진 점을 반영해 작성해줍니다.

터미널에서 cat명령어를 이용해 Local의 my_settings.py를 복사하면 간편합니다.

$ cat my_settings.py

EC2의 my_settings.py를 작성할 때, DATABASE 정보에서
HOST를 RDS End-Point 주소로 변경해주고
USER와 PASSWORD는 RDS의 user 정보로 변경해줍니다.

4. Summary

1. EC2는 Local에서 EC2 Instance로 서버를 변경해준 것입니다.
2. RDS는 Local에서 사용한 Database를 RDS로 변경해준 것입니다.
3. setting에서는 Local과 달라진 점을 반영해준 것입니다.

5. Deployment

이제 본격적으로 runserver를 해야합니다.

gunicorn을 이용해보겠습니다.
Gunicorn (Green Unicorn) 은 Unix용 Python WSGI HTTP Server입니다.
장고 뿐만 아니라 플라스크나 다른 웹 애플리케이션을 실행 시킬수 있는 웹 서버입니다.

먼저, gunicorn을 설치해줍니다.

pip install gunicorn

gunicorn을 이용해 server를 구동합니다.

$ gunicorn {database name}.wsgi:application --bind=0.0.0.0:8000

daemon으로 background에서 구동할 수도 있습니다.

$ gunicorn {database name}.wsgi:application --bind=0.0.0.0:8000 --daemon

소스변경시 재구동할 수도 있습니다

$ gunicorn {database name}.wsgi:application --bind=0.0.0.0:8000 --daemon --reload

nohup을 사용하는 방법도 있습니다.
nohup을 사용하면 background에서 구동할 수 있습니다.

$ nohup gunicorn {database name}.wsgi:application --bind=0.0.0.0:8000 &

현재 python 으로 구동하고 있는
server의 process id는 다음 명령어로 확인할 수 있습니다.

$ ps -ef | grep python

그리고 다음 명령어를 이용해 server를 종료할 수 있습니다.

kill {process id}
profile
devzunky@gmail.com

2개의 댓글

comment-user-thumbnail
2019년 11월 19일

안녕하세요!!
질문이 있는데, 다른 wsgi 중에서 gunicorn를 쓰신 이유가 있으신가요?
uwsgi 이외의 wsgi를 사용하지 않아 실제 사용시에 어떤 차이점이 있으신지 궁금해서 질문드립니다.

1개의 답글