본문 바로가기

문돌이 존버/Django 스터디

AWS EC2 Ubuntu 18.04 Django 실제 웹서버 배포

반응형

제가 하는 프로젝트 특성상 장고를 실제 웹서버에 배포할 필요는 없는데요. 아무래도 장고가 웹서버를 위한 프레임워크(framework)다보니 실제 웹사이트를 구축하는 사람들이 많을 것이라 생각이 듭니다. 그래서 이번에는 포트 8000번에 갖추어진 장고 테스트 서버를 실제 웹서버(아파치, 디폴트 포트 80)로 배포하기 위한 방법을 알아보겠습니다. 매우 간단해서 금방 따라하실 수 있을 것입니다.

먼저, 장고와 아파치를 연동해주는 중간자가 필요합니다. 이것이 바로 mod-wsgi 모듈로 아래 명령어를 통해를 다운로드합니다.(WSGI는 Web Service Gateway Interface의 약자입니다.)

# sudo apt-get install appache2 (아파치 서버는 저번에 이미 구축)
sudo apt-get install libapache2-mod-wsgi-py3

다음으로 장고의 wsgi.py 코드를 수정할 차례입니다. 장고 프로젝트 폴더로 가서 vi wsgi.py를 통해 아래와 같이 입력합니다.

import os, sys

# 추가해야 할 부분 
path = os.path.abspath(__file__+'/../..')
if path not in sys.path:
	sys.path.append(path) 
# 여기까지
 
from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "[project_name].settings")
 
application = get_wsgi_application()

이후 아파치 글로벌 설정 파일에 우리가 만든 장고 사이트를 등록할 차례입니다. 

cd /etc/apache2/sites-available/ 
sudo vi 000-default.conf

코드는 아래와 같이 추가해줍니다. 기존 코드 라인 중 별도로 수정할 것은 없습니다. 경로 문제는 각자가 초기에 설정한 값이 다를테니 알아서 적어주시면 됩니다. 

<VirtualHost *:80>
	WSGIDaemonProcess myproject python-home=/home/ubuntu/myvenv/myvenv python-path=/home/ubuntu/myvenv/myproject
    	# python-home => 가상환경 폴더 위치 / # python-path => 장고 프로젝트 폴더 위치
	WSGIScriptAlias / /home/ubuntu/myvenv/myproject/myproject/wsgi.py # wsgi.py 파일이 있는 위치
	WSGIProcessGroup myproject # 장고 프로젝트 폴더
    
  	ServerAdmin webmaster@localhost
  	
  	<Directory /home/ubuntu/myvenv/myproject> # wsgi.py 파일이 있는 위치
  	<Files wsgi.py>
    		Require all granted
  	</Files>
  	</Directory>

위 코드에 대해 조금 설명을 해보겠습니다.(행복한 휴학생님의 블로그 글을 그대로 참고했습니다. 감사합니다 ^^)

WSGIDaemonProcess 뒤 내용은 mod-wsgi 데몬 모드로 설정해주겠다는 의미입니다. 데몬이란, 기본적으로 멀티태스킹 OS에서 사용자가 직접적으로 제어하지 않고, 백그라운드에서 돌면서 여러 작업을 하는 프로그램을 가리킵니다. 우리 상황에 더 특화시켜서 설명하자면 데몬 모드는 mod_wsgi 운영 시 권장되는 모드입니다.

WSGIScriptAlias 로 시작되는 문장에는 wsgi.py 경로가 들어갑니다. 경로 앞에 / 라고 적혀 있는데, 이건 요청 url의 '/' 아래로 들어오는 요청은 wsgi.py 를 호출하게 된다는 뜻이라는 정도만 알고 갑니다.

<Files wsgi.py> 뒤에 입력된 Require all granted는 모든 엑세스에 대해 허용한다는 의미입니다. 

이렇게 설정이 완료된 후 sudo systemctl restart apache2 를 통해 ec2-ip 사이트에 들어가보면 장고 화면이 보일 것입니다. 만약 오류가 난다면 vi /var/log/apache2/error.log 를 통해 에러 메시지를 확인해보시고 구글링하여 해결방법을 찾아보셔야 합니다 ㅠ

아래처럼 포트 8000이 아닌 80에서도 장고 화면을 확인할 수 있습니다. 

728x90
반응형