본문 바로가기
개발/django

django EC2+Nginx+uWSGI 배포하기(1)

by ujin2021 2020. 7. 26.

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

 

EC2 인스턴스 세팅과 Nginx + uWSGI로 Django 앱 배포하기 (1/2)

EC2 인스턴스의 가상환경을 세팅하고, Nginx와 uWSGI를 이용해 Django 앱을 배포하는 방법에 대해서 다룹니다.

rainsound-k.github.io

2) 설정파일들의 경로는 이 블로그를 참고하였습니다.

https://yuddomack.tistory.com/entry/%EC%B2%98%EC%9D%8C%EB%B6%80%ED%84%B0-%EC%8B%9C%EC%9E%91%ED%95%98%EB%8A%94-EC2-django-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%83%9D%EC%84%B1

 

[처음부터 시작하는 EC2] django 프로젝트 생성

지난 글에 이어서 django 프로젝트를 생성하고 외부에서 접속하는 과정을 포스팅 하겠습니다. django 환경 구성에 관한 내용은 django girls의 튜토리얼을 참고합니다. 1. django 설치 pip로 django를 설치하

yuddomack.tistory.com

3) https://wikidocs.net/7387

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

먼저 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