AWS 배포 - uwsgi

uwsgi

파이썬 웹앱(Django, Flask)이 웹 서버와 통신하기 위한 인터페이스. request가 웹서버에 들어오면 WSGI(Web Server Gateway Interface) 서버를 거쳐 웹앱으로 전달된다. User - WSGI - Django와 같은 형태로 요청과 응답을 주고 받는다. WSGI를 만들기 위한 파이썬 모듈이 uwsgi이다.

SSH에서 python manage.py runserver 0.0.0.0:8000으로 실행한 뒤, 접속할 수도 있으나 터미널을 끄면 접속이 불가능하다는 단점이 있다. 따라서, uwsgi를 통해 runserver를 쓰지 않아도 서버에 접속할 수 있도록 한다.





uwsgi 설정


1. uwsgi 모듈 설치

가상환경이 실행한 후, 모듈을 설치한다.

source (가상환경폴더이름)/bin/activate 
pip install uwsgi



2. uwsgi.ini 파일 만들기

uwsgi 설정 파일을 만든다.

  • vim uwsgi.ini로 파일을 만든다.
  • vi/vim 에디터에서는 i를 누르면 편집이 가능하다.
  • esc - :wq!로 ‘저장 후 닫기’한다.


[uwsgi]
chdir=/home/ubuntu/(#1)
module=(#2).wsgi:application
master=True
pidfile=/tmp/project-master.pid
vacuum=True
max-requests=5000
daemonize=/home/ubuntu/(#1)/django.log
home=/home/ubuntu/(#1)/myvenv
virtualenv=/home/ubuntu/(#1)/venv
socket=/home/ubuntu/(#1)/uwsgi.sock
chmod-socket=666


  • #1 : 프로젝트 폴더명을 써준다. 프로젝트 폴더 상위에 다른 폴더가 있으면 함께 써준다. ex) #1 = web/프로젝트폴더이름
  • #2 : wsgi.py가 있는 폴더의 이름을 써준다.



※ 옵션 설명

uwsgi.ini 옵션 - 블로그 참고

  • chdir : 장고 프로젝트 폴더의 경로 (manage.py가 있는 폴더)
  • module : 장고 프로젝트 폴더 내 wsgi.py 파일 경로. 나의 경우, settings.py가 있는 폴더에 wsgi.py가 있어서 그 폴더명을 써주었다.
  • master : 마스터 프로세스 사용 여부
  • pidfile : Linux에서 실행되는 프로세스 id의 값을 담고 있는 파일 pidfile을 어느 경로에 생성할지 설정한다.
  • socket : uwsgi.sock 파일을 어느 경로에 생성할지 설정
  • chmod-socket : 소켓으로 접근하는 사용자가 서버에서 어떤 권한을 가질지 설정한다.


※ SUID, SGID : 유닉스 시스템에서 파일에 대하여, 다른 계정과 그룹의 권한을 일시적으로 빌려주는 것이다.

chmod로 사용자 권한을 부여할 때, 숫자를 통해 어느 범위까지 권한을 부여할지 지정할 수 있다. 자신은 4, 그룹은 2, others는 1로 권한을 부여한다. 이 1,2,4를 더하면 1~7까지 만들 수 있다. 단, 0은 허가를 내리지 않은 것이다. 위의 666권한은 2+4이므로 사용자와 그룹에 대하여 쓰기, 읽기 권한을 설정한다.



3. 설정파일 지정

터미널에 아래 명령어를 입력해 uwsgi 설정 파일을 지정한다. source 가상환경폴더명/bin/ activate로 가상환경을 먼저 실행해야 한다.

설정 파일이 잘 지정되었다면 ls -l로 확인했을 때, uwsgi.sock 파일을 확인할 수 있을 것이다.

나중에 오류가 생긴다면 ini파일을 편집했을 때 Django 프로젝트 폴더(manage.py가 있는 폴더)명을 정확히 적어주었는지 오타나 경로를 확인한다.


uwsgi --ini (설정파일이름).ini


우리는 위에서 wsgi.ini로 지정했으므로 uwsgi --ini uwsgi.ini라고 쓰면 된다.



다음은 Nginx.