django rest api를 이용하여 만든 프로젝트를 aws의 ec2와 nginx, uwsgi로 배포하는 방법을 설명하겠습니다.
여러 블로그들을 참고했는데, 몇가지 파일들을 생성하는데 있어서 경로 설정해주는 것들이 다 다르더라구요ㅠㅠ 그래서 어려움을 조금 겪었습니다.
<참고한 블로그(or 사이트)>
1) 왜 nginx와 uwsgi를 사용하는지, ssh접속은 어떻게 하는지 잘 나와있습니다.
https://rainsound-k.github.io/deploy/2018/04/25/instance-setting-and-django-deploy-part1.html
2) 설정파일들의 경로는 이 블로그를 참고하였습니다.
먼저 ec2 인스턴스 생성과 접속방법, django 프로젝트를 생성했다고 가정한 후 그 뒤의 과정부터 설명하겠습니다.
제가 사용하는 ec2 인스턴스는 ubuntu 16.04이고, django 프로젝트는 github에서 clone 했습니다.
ec2를 실행시켜 python 과 다른 필요한 패키지들을 설치해주었습니다.
1. ubuntu(ec2)에 srv 디렉토리를 만듭니다. 로컬파일을 인스턴스로 옮길 때 설정해줘야 하는 권한을 일괄적으로 부여할 수 있기때문에 srv로 관리하는 것 같습니다. srv 디렉토리의 user과 group을 ubuntu로 변경해줍니다.
~$ mkdir srv
~$ sudo chown -R ubuntu:ubuntu ~/srv
2. django 프로젝트를 clone해줍니다(or scp 를 사용하여 옮겨도 됩니다.)
~$ sudo apt-get install git
~$ sudo apt install git
~/srv$ git clone [repository_주소]
3. 가상환경을 만들어줍니다. 저는 srv 디렉토리 밑에 바로 만들어 주었습니다.
~/srv$ python3 -m venv [가상환경_이름]
예시 : ~/srv$ python3 -m venv venv (저는 가상환경 이름을 venv라고 지정해줬습니다.)
저의 프로젝트 tree는 이렇습니다.
srv 디렉토리 밑에 Closet(project)과 venv가 있고, Closet 하위에는 accounts(python manage.py 로 만든 app)와 Closet이 있습니다.
여기서 확인해야 할 것은 wsgi.py와 venv의 path입니다.
4. 가상환경을 활성화해줍니다.
~/srv$ source venv/bin/activate
(비활성화는 ~$ deactivate 를 입력하면 됩니다.)
가상환경을 활성화 해주면 (venv) ubuntu@~~~~ 이런식으로 사용자 명 앞에 가상환경 이름이 나타납니다.
5. uwsgi를 설치해 줍니다.
(venv) ~$ pip install uwsgi
6. uwsgi 명령어를 사용하여 프로젝트를 실행합니다.
예) (venv)~$ uwsgi --http :8000 --home ~srv/venv --chdir ~/srv/Closet --wsgi-file ~/srv/Closet/Closet/wsgi.py
여기서 --가 붙은 것은 uwsgi의 옵션입니다.
--http :[port 번호]
--home [venv의 경로]
--chdir [manage.py가 들어있는 django의 경로]
--wsgi-file [wsgi.py파일의 경로]
입니다. 자신의 파일 경로에 맞게 수정해주시면 되겠습니다.
이렇게 가상환경에서 명령어로 실행한 후 , aws의 public DNS주소:[port번호]로 접속하면 django로 만들어 둔 페이지가 보입니다!
설정해준 포트번호는 aws 보안그룹의 인바운드 규칙에 추가해놓은 후 실행해야합니다.
보안그룹 - 인바운드 규칙 - 인바운드 규칙 편집 - TCP, 8000번을 추가해주시면 됩니다.
6번의 명령어를 입력하면 *** Starting uWSGI .... 라고 뜰텐데, 거기서 thunder lock:disabled되어있다면, 6번의 명령어 뒤에 --thunder-lock을 추가해주세요! 혹시 thread관련 disabled도 뜬다면, --enable-threads 도 붙여서 입력해주면 됩니다.
오늘은 간단하게 venv에서 uwsgi로 프로젝트를 실행하는 방법을 알아보았습니다. 다음 포스트에서는 실제로 배포하는 방법에 대해 알아보겠습니다.
혼자 공부하고 쓴 글이라 틀린 부분이 있을 수 있습니다. 혹시 잘못된 부분이 있다면 댓글로 남겨주세요 감사합니다!
'개발 > django' 카테고리의 다른 글
django EC2+Nginx+uWSGI 배포하기(3) (0) | 2020.07.26 |
---|---|
django EC2+Nginx+uWSGI 배포하기(2) (0) | 2020.07.26 |