본문 바로가기

Django/etc.

[Publish]Django - Anywhere 배포하기


하나의 서비스를 완성했으면 다른 사람들에게도 공유해보면 좋겠죠??

그것이 개발자의 미덕!! 서로 공유하고 공유해야 서로 서로 더 발전할 수 있는거 같더라구요.

특히 AI 분야가 그러더랍니다 (현직자로써 경험한...ㅋㅋ) 많이 많이 공유가 되어 있어야 더 빠르게 발전하는 분야거든요.

아무튼 이렇게 공유하고자 '배포'를 해보려고 합니다.

이전에 했었던 북마크 프로젝트를 한 번 배포해보도록 하겠습니다.

배포의 방법에는 많이 있지만 먼저 Anywhere를 이용한 배포부터~!!


0. 배포를 위한 프로젝트 사전 작업

- 배포를 위해서 Django 프로젝트의 settings.py의 어느 부분을 수정해줘야 합니다. 바로 [DEBUG]와 [ALLOWED_HOSTS] 변수입니다!!

# config/settings.py
# settings.py에서 [DEBUG]와 [ALLOWED_HOSTS] 변수를 찾아 수정합니다.
DEBUG = False

# ALLOWD_HOSTS 값의 '*' 자리에는 DNS Rebinding을 막기 위해서 되도록 실제 도메인을 넣어주세요.
ALLOWED_HOSTS = ['*']

1. Pythonanywhere 가입

- 우선 Pythonanywhere 홈페이지에 접속한 후, 상단 [Pricing & signup]을 클릭 후, 무료 티어로 회원가입을 진행합니다.

 + 그 전에, GitHub에 소스코드를 업로드한 상태인 것을 가정하고 진행하겠습니다.

 + 혹시 'Pycharm - GitHub 연동' 방법이 궁금하다면 곧 업데이트해보겠습니다ㅎㅎ

[Pricing & signup] 버튼은 여기 쪼그맣게 있어요

 

Beginner는 Free!! 공짜가 좋아요 우리는

 

- 회원가입을 마치고 튜토리얼을 넘겨준 후 배포에 관한 설정을 할 수 있는 대시보드 화면을 볼 수 있습니다.

여기서 배포에 관한 설정을 하죠!!


2. 콘솔에서 배포 설정

- 대시보드에서 New console에 있는 [$ Bash] 버튼을 누르고 나온 온라인 콘솔에서 진행 해봅니다.

 + 아래 콘솔 명령어를 입력해보고 진행합니다.

$ pwd  # 현재 경로 확인
$ git clone [자신의 GitHub Repository 주소]

현재 경로가 /home/내_아이디 형태로 나오면 정상입니다.

 

- 가상환경을 만들어 Django를 세팅 해봅니다.

 + 우선 소스코드를 다운받은 경로로 이동해줍니다.

$ cd Django_bookmark  # cd [이동할 경로명]

(master)가 뜨면 정상으로 이동 완료!!

 

- 해당 경로 안에 가상환경을 만들어 봅니다.

$ virtualenv venv --python=python3.8  # 제 프로젝트는 python 3.8에서 만들었으니 그대로 따라 만들어볼께요

이러쿵 저러쿵하면서 설치 완료된 것 같아 보이네요

 

- 만든 가상환경을 활성화하고 Django를 설치하여 기본 세팅을 해봅니다.

$ source venv/bin/activate  # 가상환경을 활성화 시킵니다.
$ pip install django  # Django를 설치해줍니다.

이렇게 가상환경 실행하고 Django까지 설치를 해준 뒤에~

$ python manage.py migrate  # Django의 데이터베이스를 초기화 해줍니다.
$ python manage.py createsuperuser  # 관리자 계정도 만들어 줍니다.

이렇게 해서 Django 기본 세팅은 끝났습니다!!

더보기

혹시 settings.py에 있는 [SECRET_KEY]를 다른 곳에 빼두셔서 settings.py에서 따로 import 하는 코드로 만들어 놓으신 경우, (잇츠 미...) 'python manage.py migrate'부터 에러가 발생할 겁니다.

히히히 .config에서 import를 못한데요 없어서...

해당 파일도 같이 업로드를 해주시거나 아니면 코드를 따로 수정해주셔야 할거에요.

저같은 경우는 따로 파일(.py)을 만들어 빼놨었기 때문에 pythonanywhere에 소스코드 업로드 후, 동일 파일을 만들어줬습니다.

해당 경로로 이동해준 뒤, 파일을 생성 후 필요한 내용을 작성해주면 끝!!

$ cd config  # 저는 config 폴더 안에 환경설정 파일을 따로 만들어줬습니다.
$ vi config.py  # 동일한 config 이름의 .py 파일 생성 후 내용을 작성해주세요.
아마 이렇게 파일이 생성되고 화면이 나오실 겁니다. 여기서 필요한 코드 작성해주세요!!

그리고 [esc] 눌러서 초기 상태로 바꾼후에 그냥 바로  ':wq' (콜론도 포함이요!!) 타자 쳐주시고 엔터!! 그럼 끝~

그럼 config/config.py를 만들어놨기 때문에 에러는 잡아질겁니다!!

 

migrate부터 다시 하려고 하다보니 발생한 문제라서 실제 더 큰 프로젝트, 중요한 프로젝트에서는 secret_key를 꼭 따로 관리하고 GitHub에든 배포 서버든 공유하지 맙시다^^


3. 웹 앱 설정

- 콘솔에서 대시보드로 돌아온 후, 메뉴의 [Web]을 선택해 이동합니다. 그리고 [Add a new web app] 버튼을 눌러봅니다.

 + 누르시고 나오는 창에서 [Next] 누르시고 프레임워크 선택에서는 일단 [Manual configuration]을 선택 후 Python 버전을 골라줍니다. 그리고 마지막 WSGI 파일을 생성한다는 메시지에 [Next]를 눌러주시면 웹 앱 생성 완료!!

 + 이 부분은 캡처를 안해버린..!!

여기 햄버거 메뉴에 있어요 클릭!!
저기 있는 버튼을 누르시면 'Create new web app' 창이 뜰거에요.

 

- 웹 앱이 완성된 후, WSGI 설정을 위해서 잠깐 수정해봅니다.

여기 아래 저 링크를 클릭해주세요!!

 + 링크를 클릭하면 파일 편집 창이 나타나고 다음 코드를 추가해줍니다. (주석 따위 다 지워버리고 넣어주세요. 뒤쪽에 있는 def application 때문인지 제대로 작동 못 할 수도 있습니다!!)

import os
import sys

path = "/home/ghk0409/Django_bookmark"  # 여기 path 부분은 나의 계정과 경로랑 똑같아야 합니다!!
if path not in sys.path:
    sys.path.append(path)

from django.contrib.staticfiles.handlers import StaticFilesHandler
from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings")
application = StaticFilesHandler(get_wsgi_application())

 + 그리고 우측 상단의 [SAVE] 버튼을 눌러주세요.

 

- 이어서 가상환경을 연결합니다. 아래와 동일한 부분을 클릭한 후, 경로를 입력 해봅니다.

위에서 수정하려고 클릭한 부분 아래쪽에 있어요.

 + 입력 시, 여기도 나의 계정이름을 꼭 잘 입력해주시고 '/venv' 가상환경이 있는 경로까지 추가로 입력해 봅니다.

이렇게 입력창이 나오면 성공!!

 

- 마지막으로 변경한 설정을 적용하기 위한 새로고침 후, 배포된 페이지를 확인해봅니다.

빨간 박스 클릭하셔서 새로고침 후, 노란 박스를 클릭해서 배포한 나만의 웹 페이지에 들어가면 됩니다.

 

- 배포된 해당 프로젝트에서 만든 기능들을 하나씩 테스트해보시면 될 것 같습니다.

 + 혹시 bookmark 프로젝트 그대로 들고 오셨다면 위의 배포된 웹 페이지 접속 시, 'Not Found' 화면이 뜰겁니다. 그건 bookmark 프로젝트에서 메인 페이지에 아무런 뷰를 연결하지 않았기 때문이죠!!

 + 접속 URL 뒤쪽에 'bookmark/' 추가하시고 들어가면 정상 접속이 되실 거에요. 아니면 메인 페이지에 뷰를 한 번 만들어서 추가해보는건 어떨까요ㅎㅎ


+ 보너스

- 배포까지 완료했는데 한 가지만 더 봐보겠습니다. '정적 파일 관리'에 대한 것인데요. 위에서 WSGI 파일을 설정할 때 StaticFilesHandler를 사용했습니다. 하지만 이건 보통 서비스 배포 시, 잘 사용하지 않습니다.

 + StaticFilesHandler를 사용하지 않았다면 bookmark 내에 있는 정적 파일인 'style.css' 파일을 사용하지 못 하는 상태였을 거에요.

 

-  배포 상태일 때  정적 파일은 위의 방법이 아닌 [STATIC_ROOT] 변수로 설정해둔 경로에 모아두고 웹 서버에서 이 파일을 찾아보도록 설정하는게 일반적이라고 합니다.

 + 그럼 settings.py을 편집해봅니다.

 + pythonanywhere 콘솔에서 settings.py 파일을 열어 편집하거나 Pycharm에서 수정 후, GitHub를 통해 재배포해도 됩니다.

# config/settings.py
# 아래쪽에 있는 [STATIC_URL] 변수 밑에 아래 코드를 추가해줍니다.
STATIC_ROOT = os.path.join(BASE_DIR, 'static_files')

 + Pycharm에서 수정했다면 GitHub에 다시 <Add - Commit - Push> 단계를 거쳐 업로드 해주시고 pythonanywhere 콘솔로 들어간 후, bookmark 폴더로 이동합니다. 그리고 GitHub 코드를 다시 내려받을께요.

$ cd Django_bookmart  # 내 프로젝트 폴더로 이동해줍니다.
$ git pull  # 그 상태에서 pull 명령어를 통해 GitHub의 변경사항을 적용해줍니다. (바뀐 소스코드를 내려받아요)
$ python manage.py collectstatic  # 정적 파일들을 모아주는 명령어 입니다.

이렇게 되면 정적 파일 모으기 성공!!, 이러면 현재 경로에 'static_files' 폴더가 생기고 거기에 정적 파일이 모아져요

 

- 그리고 웹 앱 설정 페이지로 가서 Static files 부분의 URL과 Directory를 입력해줍니다.

 + URL : /static/

 + Directory : /home/본인계정/프로젝트 폴더명(가상환경 폴더명)/static_files/

이런 식으로 수정해봅니다.

 

- WSGI 파일도 열어서 StaticFilesHandler import 부분과 쓰여진 구문도 지워줍니다.

이렇게 깔끔하게 날려주세요.

 + 그리고 저장하시고 웹 앱 새로고침해주시면 적용 끝!!


여기까지 pythonanywhere를 이용한 배포 과정을 마쳤습니다.

GitHub만 역시 잘 관리한다면 배포하는 부분은 크게 문제될 건 없어보이네요.

마지막으로 어떤 프로젝트를 하든 생길 수 있는 SECRET_KEY 관리를 꼭 해둡시다!!

 + 특히 github에 commit&push 하기 전에요... 하하하.... 저도 처음엔 하지 않아서 깃허브 가디언즈를 만났습니다^^

 

이후에는 많이들 쓰고 있는 AWS에  배포하는 방법도 공부해보겠습니다~

'Django > etc.' 카테고리의 다른 글

[Publish] HeroKu 배포하기  (0) 2021.06.15