먹고 기도하고 코딩하라

파이썬 장고로 카카오 i 오픈빌더 챗봇 만들기 (2) - 프로젝트 셋팅: Apache2 + mod-wsgi로 Django 앱 배포 준비 본문

개발일지

파이썬 장고로 카카오 i 오픈빌더 챗봇 만들기 (2) - 프로젝트 셋팅: Apache2 + mod-wsgi로 Django 앱 배포 준비

사과먹는사람 2020. 2. 24. 19:16
728x90
728x90

이전 글 보기

 

파이썬 장고로 카카오 i 오픈빌더 챗봇 만들기 (1) - 가상환경 설정, Django 프로젝트와 앱 만들기

Python Django 카카오 i 오픈빌더 챗봇 만들기 튜토리얼에 오신 것을 환영합니다. 이 시리즈는 Amazon EC2로 서버 컴퓨터를 받은 뒤 실제로 학식봇의 기본이 되는 서버 설정을 하고 간단한 스킬을 만드�

dev-dain.tistory.com

 

 

이번 포스팅에서는 전 포스팅에서 만들었던 프로젝트 기본 셋팅을 하고 apache 서버를 설치한 다음 mod-wsgi 로 Django 앱을 배포할 수 있도록 설정하는 것이 목표입니다.

일단 위치가 /home/ubuntu 이고 가상환경이 활성화되었는지 확인하십시오.

확인하셨다면 apache 서버와 mod-wsgi 를 설치하겠습니다. 다음을 입력합니다.

 

$ sudo apt-get install apache2
$ sudo apt-get install libapache2-mod-wsgi-py3

 

apache2 를 설치하고 mod-wsgi 를 설치합니다. Django 는 엄밀히 말하면 서버가 아니고 웹앱을 만드는 웹 프레임워크입니다. 그렇기 때문에 웹앱을 실제로 배포하려면 서버가 필요한데 apache 가 그 역할을 해줄 것입니다. 그리고 apache 와 django 앱을 배포하기 위해 중간자가 필요한데요. mod-wsgi 가 이 역할을 합니다.

mod-wsgi 는 Apache HTTP Server 모듈로 Apache에서 Python 기반 웹 응용 프로그램을 호스팅하기위한 WSGI 호환 인터페이스를 제공한다는 설명이 있습니다. 쉽게 말하면 Python 웹 프레임워크로 만든 웹앱을 Apache 에서의 배포하기 위해 통신하는 인터페이스라는 건데요. 그래서 mod-wsgi 는 django 뿐 아니라 flask 에서도 사용이 가능합니다.

python3 에서는 반드시 libapache2-mod-wsgi 뒤에 -py3 을 붙여줘야 동작이 가능하다는 것을 염두에 두고 설치하시기 바랍니다.

프로젝트 setting을 잠깐 해보겠습니다. 다음을 입력합니다.

 

$ cd [base_name]/[project_folder]
$ vi settings.py

# settings.py
# 다음과 같이 수정합니다.
ALLOWED_HOSTS = '*'
INSTALLED_APPS = 'app_name' 
# 주의. app_name 빼고 다 지우는 게 아니라 app_name을 맨 마지막에 추가합니다.
TIME_ZONE = 'Asia/Seoul'

 

프로젝트 폴더로 가서 settings 파일을 엽니다. 그런 다음 몇 가지를 수정합니다.

하나씩 살펴보겠습니다. 일단 ALLOWED_HOSTS 는 본 서버 컴퓨터에 액세스를 요청하는 호스트를 누굴 받을 거냐 하는 건데요. '*'는 어떤 것이든 받는다는 뜻입니다.

그런 다음 INSTALLED_APPS 말미에 만들어둔 app을 추가해줍니다. 전 포스팅에서 설명했듯이 한 프로젝트는 여러 앱을 포함할 수 있습니다. 이 프로젝트가 이 앱을 제공하려면 app을 추가해줘야 가능하겠죠?

TIME_ZONE 은 우리가 작업하는 한국으로 바꿔주고 저장한 후 닫습니다.

이제 wsgi.py 파일을 수정하겠습니다. 다음을 입력합니다.

 

$ vi wsgi.py

# wsgi.py
import os, sys
 
sys.path.append('/home/ubuntu/[base_name]')
sys.path.append('/home/ubuntu/[base_name]/[venv_name]/lib/python3.5/site-packages')
 
from django.core.wsgi import get_wsgi_application

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

 

wsgi.py 는 django 웹앱 코드가 WSGI에서 호출될 수 있게 하는 역할을 합니다. 쉽게 말하면 외부로 장고 앱을 export해주는 느낌입니다.

path에 base 폴더와 가상 환경 라이브러리 안의 python site-packages 를 추가해줍니다. 이 때 주의할 것은 python3 버전을 따로 업데이트했거나 가상 환경이 base_name 밖에 있다면 경로가 조금 다를 수 있다는 점입니다. 보통 이렇게 하면 맞지만, Ubuntu 14.04 이거나 18.04 일 경우 반드시 경로를 확인한 다음 입력하십시오.

이제 apache 글로벌 설정 파일에 아까 만든 가상환경을 설정하겠습니다. 다음을 입력합니다.

 

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

# 000-default.conf
<VirtualHost *:80>
WSGIDaemonProcess [project_name] python-home=/home/ubuntu/[base_name]/[venv_name] python-path=/home/ubuntu/[base_name]/[project_name]

# 주석 몇 줄
  ServerAdmin webmaster@localhost
  WSGIScriptAlias / /home/ubuntu/[base_name]/[project_name]/wsgi.py
  
  <Directory /home/ubuntu/[base_name]/[project_name]>
  <Files wsgi.py>
    Require all granted
  </Files>
  </Directory>

 

WSGIDaemonProcess 로 시작하는 문장이 아주 긴데요. mod-wsgi 데몬 모드로 설정해주는 겁니다. 데몬이란 기본적으로 멀티태스킹 OS에서 사용자가 직접적으로 제어하지 않고, 백그라운드에서 돌면서 여러 작업을 하는 프로그램을 가리킵니다. 우리 상황에 더 특화시켜서 설명하자면 데몬 모드는 mod_wsgi 운영 시 권장되는 모드입니다. python-home 에는 가상환경 위치, python-path 에는 프로젝트 디렉토리 위치가 들어갑니다.

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

<Directory> 경로는 프로젝트 경로로 해주신 뒤 Require all granted 를 합니다. Require all granted 는 모든 액세스에 대해 허용한다는 뜻입니다.

이 부분을 수정할 때 굉장히 실수를 많이 하게 되므로 유의하시기 바랍니다. 여기까지 하셨다면 서버 설정의 대부분이 끝난 것입니다.

 

$ sudo apachectl -k restart

 

apache 서버 재시작 명령어를 한 뒤 아마존에서 받은 IP 주소로 접속을 시도해 보십시오. It worked! 나 apache 기본 페이지가 뜬다면 성공입니다. 만약 접속이 되지 않거나 500 Internal Server, 403 코드가 뜬다면 아래 명령어를 입력해 로그를 확인합니다. 서버에 문제가 있기 때문에 로그를 보고 잘못 처리한 부분을 수정하십시오.

 

$ vi /var/log/apache2/error.log

 

서버에 정상적으로 접속하는 게 이번 포스팅의 목표입니다. 정상 접속이 되셨다면 축하합니다! 이번 포스팅의 목표를 달성했습니다.

다음 포스팅에서는 기본적인 JsonResponse request와 response에 대해 살펴보고, 직접 적용해 보겠습니다.

감사합니다. ^^

 

 

다음 글 보기

 

파이썬 장고로 카카오 i 오픈빌더 챗봇 만들기 (3) - 챗봇 자동답변 구현

이번 포스팅에서는 예상되는 url 요청 패턴을 등록하고 views에서 카카오톡 챗봇 스펙에 맞게 함수들을 구현해 보겠습니다. 기본 위치는 /home/ubuntu 이며 가상 환경을 활성화한 상태여야 합니다. 다

dev-dain.tistory.com

 

 

728x90
반응형
Comments