AWS 서비스를 이용해 Django Back-End Server를 구축해보려 합니다.
준비사항은 다음과 같습니다.
1. EC2 인스턴스 (ubuntu) 생성
2. Load Balancer 생성
3. RDS 생성
각 서비스의 역할은 다음과 같습니다.
AWS Service | Role |
---|---|
EC2 | Server |
Load Balancer | Server Traffic 분산처리 서비스 |
RDS | Database |
생성한 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
)
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}
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 정보로 변경해줍니다.
1. EC2
는 Local에서 EC2 Instance로 서버를 변경해준 것입니다.
2. RDS
는 Local에서 사용한 Database를 RDS로 변경해준 것입니다.
3. setting
에서는 Local과 달라진 점을 반영해준 것입니다.
이제 본격적으로 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}
안녕하세요!!
질문이 있는데, 다른 wsgi 중에서 gunicorn를 쓰신 이유가 있으신가요?
uwsgi 이외의 wsgi를 사용하지 않아 실제 사용시에 어떤 차이점이 있으신지 궁금해서 질문드립니다.