몇 주전 '기분좋은인사' 어플을 기능 업데이트를 위해 django를 이용하여 REST API 를 구축했습니다.
Python 에서 제공하는 runserver 는 운영하기에는 모자란 부분이 많기 때문에 이제 운영을 하기 위해서 아파치 웹서버에 WSGI를 이용해 연동을 시켜려고 합니다.
이번 글에서는 WSGI에 대해 간략하게 알아보고, mod-wsgi를 이용해 django와 연동하는 방법에 대해 적어보겠습니다.
1. WSGI란?
WSGI(Web Server Gateway Interface)는 웹서버와 파이썬을 사용한 웹 어플리케이션 개발환경 간의 인터페이스에 대한 규칙입니다.
파이썬으로 선택할 수 있는 웹 프레임워크에서 사용할 수 있는 기존 웹서버는 CGI, FastCGI, mod_python, 또는 커스텀으로 만들어진 API 등으로 상당히 제한되어 있었고,
또 반대로 웹서버를 선택하는 것이 파이썬 웹개발환경을 제한하기도 하였습니다.
이를 위해 표준으로 나온 것이 WSGI이다. 즉, 파이썬으로 다양한 웹서버를 사용할 수 있도록 한 프로토콜로 정의하면 될 것 같습니다.
저는 아파치 웹서버에서 개발한 Django REST API 를 구동하기 위해서, mod-wsgi를 사용하기로 했습니다.
mod_wsgi란 Django와 같은 WSGI 인터페이스를 지원하는 파이썬 어플리케이션을 아파치 웹서버에서 동작할 수 있도록 해주는 아파치 모듈입니다.
2. 작업 환경 소개
아마존 EC2 인스턴스 : Ubuntu 16.04.4 LTS
Django 버전 : 2.0.3
Python 버전 : python 3.5.2
3. 아파치 설치
콘솔에 아래와 같이 입력합니다. 참고로 AWS EC2 를 이용하면 기본적으로 설치되어 있습니다.
# sudo apt-get install apache2
4. 아차피 mod-wsgi 설치
콘솔에 아래와 같이 입력합니다. 참고로 AWS EC2 를 이용하면 mod-wsgi도 기본적으로 설치되어 있습니다.
파이썬 3 에서는 아래와 같이 libapache2-mod-wsgi 패키지가 아니라 libapache2-mod-wsgi-py3 로 설치해야 합니다.
버전이 안 맞으면 wsgi 가 아예 작동이 안 되니 반드시 확인 후 올바른 버전으로 설치해야 합니다.
# apt-get install libapache2-mod-wsgi-py3
5. wsgi.py 파일 수정
파이썬 프로젝트 폴더 아래에 보면 wsgi.py 파일이 있는 것을 볼 수 있습니다.
텍스트 편집기를 이용해서 아래와 같이 편집합니다.
import os, sys from django.core.wsgi import get_wsgi_application path = os.path.abspath(__file__+'/../..') if path not in sys.path: sys.path.append(path) os.environ.setdefault("DJANGO_SETTINGS_MODULE", "new_letter.settings") application = get_wsgi_application()
저는 한 IP에 다른 포트로 여러 서비스를 진행 중이기 때문에 VirtualHost 를 이용해서 아래와 같이 포트를 열고 sites-available 의 default.conf 에 추가하였습니다. 아파치2와 django 연동으로 구글링해보시면 다른 방법으로 추가하는 자료도 찾을 수 있습니다.
6. 8000 포트 열기
아래와 같이 입력하여 ports.conf 를 열어 Listen 8000 을 추가합니다.
# cd /etc/apach2
# sudo vim ports.conf
7. 000-default.conf 수정
아래와 같이 입력하여 000-default.conf 를 수정합니다.
# cd /etc/apach2/sites-available/
# sudo vim 000-default.conf
mod_wsgi 에서는 데몬 모드를 사용할 것을 권장하고 있습니다.
WSGIDaemonProcess 이후 Django 프로젝트 이름을 써주고 python-path에는 처음에 Django 프로젝트 경로를 써줍니다.
그 후 : 표시를 한 후 python library 경로(패키지들을 찾을 수 있는 경로)를 써줍니다.
WSGIDaemonProcess new_letter python-path=/home/ubuntu/letter_pjt/letter/new_letter/:/home/ubuntu/letter_pjt/venv/lib/python3.5/site-packages
그런데, Python 3.5 이후부터는 위 <VirtualHost> 태그 내 소스처럼 python-path 이 후 바로 python library 경로를 적어야 합니다.
그렇지 않으면 django 모듈을 찾을 수 없다는 에러가 발생합니다.
참고로, 저는 virtualenv 환경이기 때문에 virtualenv의 site-packages 경로를 적어주었습니다.
WSGIScriptAlias에서는 wsgi.py 경로를 써줍니다.
그리고, <Directory> 태그로 각 경로의 접속권한을 설정해줍니다.
ErrorLog,CustomLog 키워드는 아파치 에러 로그가 생성될 경로를 적어주시면된니다.
8. wsgi.py 파일의 권한 변경
아래와 같이 chmod를 이용하여 모든 사람에게 허용가능으로 권한을 변경합니다.
# sudo chmod 655 wsgi.py
9. Apache 재시작
마지막으로 아파치를 재시작합니다.
# sudo apachectl -k restart
'Tech & Programming > 파이썬' 카테고리의 다른 글
[Tip - python] runserver 실행 시 UnicodeDecodeError 오류 발생 조치 (2) | 2017.11.29 |
---|