본문 바로가기
Project 관련 기록

[DevCourse] Monthly EDA Project (2) 배포는 어떻게 할 건가?

by 다람이도토리 2021. 5. 22.

EDA를 실시한 이후, (추가를 하긴 했으나) Django를 통해 페이지를 만드는데는 문제가 적었으나, 가장 어려운 점은 바로 '배포'를 하는 것이었다. 많은 블로그 등을 통해 방법을 찾아보며 성공하였기에 어떻게 했는지 그 방법을 정리해본다.

'배포'? 왜?

일단, 우리가 다른 사람들에게 결과물을 보여줄때 이 쪽을 아는게 아닌 이상 주피터 노트북으로 보세요, 깃에 들어가세요 할 수는 없다. 따라서, Django나 Flask를 사용하여 사이트 형태로 만드는 것이 필요하다.

문제는, 우리가 Django를 활용하여 사이트를 만들어서 테스트를 해도, 우리 컴퓨터에 만들어둔 가상환경 상에서만 확인이 가능하다는 것이 문제이다. 즉, 배포 작업을 통해 다른 사람도 이것을 확인하게 해줘야 한다.

이 과정에서 배포가 들어간다.  물론 정석은 AWS등의 클라우드 서비스를 통해 배포를 하는 것이겠지만, 이번 Monthly Project에서는 비교적 간단한 Python Anywhere을 통해 배포를 진행하였다.

배포를 위한 사전 준비.

배포를 위해서는 우리가 로컬에서 만든 환경과는 다른 사전 준비를 해야한다. settings을 조금 변경해줘야 한다.
settings에서 건드려야 할 항목은 다음과 같다.

(1) 호스팅 설정

settings.py에는 ALLOWED_HOST라는 항목이 있다. 
여기에, '(본인의 아이디).pythonanywhere.com'을 추가하면, 해당 사이트 주소로 접속시, 창이 뜨게 된다.

(이 과정을 생략할 경우, 모든 과정을 다 거친다음에 local host 추가 에러가 나온다. 이 때 주소를 다시 넣어줄려면 bash를 통해서 접근하는 더 어려운 과정을 거쳐야 한다.)

 

(2) 디버깅 모드 해제

배포시에는, 디버깅 모드를 True가 아닌 False로 설정해야 한다.

DEBUG = False로 설정한다.

(3) Secret Key 설정

Setttings 파일에는 원래 SECRET KEY가 적혀 있다. 이것이 적힌 상태로 배포하면 보안 이슈가 발생할 수 있다고 한다.
이를 위한 해결방법 중 하나를 선택하여 해결하였다.

- manage.py가 있는 폴더에, secrets.json 파일을 생성하여, json 형태로 key를 저장하였다.

{
  "SECRET_KEY" : "#여기에 settigs.py에 적힌 키값을 넣으세요."
}

그 후, settings 폴더에 다음과 같이 SECRET_KEY가 있는 부분을 작성한다.

import os, json
from django.core.exceptions import ImproperlyConfigured

secret_file = os.path.join(BASE_DIR, 'secrets.json')

with open(secret_file) as f:
    secrets = json.loads(f.read())

def get_secret(setting, secrets=secrets):
    try:
        return secrets[setting]
    except KeyError:
        error_msg = "Set the {} environment variable".format(setting)
        raise ImproperlyConfigured(error_msg)

SECRET_KEY = get_secret("SECRET_KEY")

 

배포과정 설정

(1) github upload

깃헙에 새로운 레퍼지토리를 파서, 본인이 만든 프로젝트 폴더를 올려둡니다.

 

(2)  python anywhere webpage 개설

파이썬 anywhere는 무료로도 (간단한) 웹페이지는 배포 가능합니다. 가입 후에

web으로 접속하면

Add a New Web을 통해 새 사이트를 생성합니다. (무료 사용자는 단 1개의 사이트만 개설 가능합니다)

이때 프레임워크 선택에서 Django가 아니라, Manual Configuration을 선택해야 합니다.
이래야, 본인이 이미 만든 프로젝트 경로로 작업하기가 편합니다.

이후 파이썬 버전을 선택을 하면 빈 사이트가 개설되었습니다.

 

(3) bash를 통한 github 연동 및 가상망 개설

빈 사이트가 개설되었습니다. 이제 데이터를 가져와야 할 것인데, 데이터는 깃헙에 있습니다.
이제 본인의 깃헙 레포를 가져온 후, 해당 레포에 가상 환경을 설치하여 Python Anywhere에 해당 폴더를 지정해주는 작업을 합니다.

- 본인의 깃헙 레포 주소를 준비합시다.

- python Anywhere의 bash로 들어옵니다.

 

- Bash에서 할 일이 조금 있는데 다음 순서로 진행해봅시다.

$ git clone <repo주소>  -> 만들어둔 프로젝트 repo가 clone됩니다.
$ cd (프로젝트 폴더) -> 프로젝트로 이동합니다. 어디까지 가야 하냐면, manage.py가 있는 폴더까지 가야합니다.
$ virtualenv --python=python3.8 myvenv -> 가상 환경 설치, myvenv는 가상환경의 이름이 됩니다.
$ source myvenv/bin/activate -> 가상환경 시작. 가상 환경이 시작되면, 폴더 경로 앞에 가상환경 이름이 붙습니다.
$ pip install django -> 장고를 설치합니다.
$ python manage.py migrate 를 하여 db를 초기화시켜줍니다.

(4) python anywhere webpage 설정 조정

이제, 깃헙 레포지터리와 python Anywhere가 연결되었습니다. 가상환경도 준비되었습니다.

이제 연결이 되었으니, python Anywhere에서 데이터가 어디어디 있나, 지정만 해주면 끝납니다. 

아까 웹페이지 생성 후 갔던 web 탭에서 진행합니다.

이 과정은 source code에서 플젝 주소를 연결하고, viurtualenv에서 가상망을 연결시켜줍니다.

(5) WSGI configuration file 편집

위 사진에서 WSGI configuration file 또한 편집해야 합니다.

모든 내용을 날리고 다음과 같이 입력하면 됩니다.

import os
import sys

path = '/home/(여기 id)/(플젝 주소)'
if path not in sys.path:
    sys.path.append(path)

os.environ['DJANGO_SETTINGS_MODULE'] = '(settings.py가 있는 최종 폴더 이름.settings)'

from django.core.wsgi import get_wsgi_application
from django.contrib.staticfiles.handlers import StaticFilesHandler
application = StaticFilesHandler(get_wsgi_application())

이 과정을 모두 거치면, 드디어, 본인이 만든 EDA Project를 다른 사람도 볼 수 있게 된다!  와! 성공!

각각이 구체적으로 뭘 해준 과정인지는, 웹의 기본 상식을 다진 후에, 알아보고자 한다.