Django

Django 배포하기

nyanguk 2021. 1. 15. 23:44

내가 만든 웹페이지를 다른 사람들이 쓸수 있도록 하는 것을 배포하기 라고 한다. 

지금까지 Django 라는 디렉토리 안에서 모든 작업을 진행했고 이를 모두 github에 연동시켜두었다.

 

배포하기 위해 Pythonanywhere 과 Github 코드 호스팅 서비스를 사용할 예정이다.

 

깃 저장소에 배포할 프로그램 복사하기

방법 1. 복사후 레파지토리와 연동

완성한 프로그램을 다른 디렉토리에 복사하기 

지금껏 Django 디렉토리 안에서 작업한 프로그램을 새로운 디렉토리안에 my-first-blog 를 생성하여 복사하였다.
이때 가상환경 설정시 생성된 디렉토리와 db.sqlite3 제외하고 복사한다.

 

현재 Django 디렉토리안에는 blog, my, mysite, db.sqlite3 ,manage.py 가 존재한다. 이중에서 색깔표시된 파일만 복사하여 my-first-blog 디렉토리 안에 복사해준다. 

 

깃허브에 레포지토리 생성하기 -1

my-first-blog 를 깃허브의 레포지토리에 연결해야한다. Vscode를 사용하고 있기때문에 새창에서 my-first-blog 디렉토리를 열어 레포지토리 초기화 라는 버튼을 누르게되면 커밋이 가능하게 된다. 
그 후 푸시를 하게 되면 '레포지토리에 푸시하도록 구성된 원격이 없습니다' 라는 안내창이 뜬다. 원격 추가 버튼을 눌러 현재 생성된 레포지토리중 하나를 선택하여 지정 할 수있다.

 

깃허브에 레포지토리 생성하기 -2

다른 방법으로는 이 폴더 자체를 레포지토리로 생성시키는 것이다. Vscode 상에서 어떠한 레포지토리와 연결 되어있지 않은 경우 두가지 선택을 할 수 있는데 첫번째로 위에서 말한 레포지토리 초기화 이며 두번째로는 Github에 게시 가 있다. 

Github에 게시 를 선택하면 Publish to Github private repository 라는 안내문구와 함께 디렉토리 이름으로 레포지토리가 생성된다. 이후 복사한 파일들을 커밋하면된다.

방법 2. 레포지토리 생성후 복사하기

my-first-blog라는 레포지토리를 생성한 후 터미널 창에 git clone 명령어를 사용해 해당 레포지토리를 내 컴퓨터안에 복사한다.

그러면 깃허브와 연결된 my-first-blog 디렉토리가 생성되고 그 안에 완성된 파일과 디렉토리를 복사해준뒤 커밋하여 깃허브에 저장한다.

 

pythonanywhere에 프로그램 옮기기

배포하기 위한 준비가 끝났다면 pythonanywhere 에 my-first-blog를 복사하자.
간단하게 "git clone 깃허브주소" 로 복사할 수 있다.

pythonanywhere에 가입하기

아래의 주소로 들어가 brginner로 가입한다.

www.pythonanywhere.com

 

Host, run, and code Python in the cloud: PythonAnywhere

Batteries included With Python versions 2.7, 3.3, 3.4, 3.5 and 3.6, and all the goodies you normally find in a Python installation, PythonAnywhere is also preconfigured with loads of useful libraries, like NumPy, SciPy, Mechanize, BeautifulSoup, pycrypto,

www.pythonanywhere.com

pythonanywhere 콘솔창에 레포지토리 복사하기 

my-first-blog 의 깃허브주소를 pythonanywhere 콘솔창에 git clone 을 통해 입력한다.

13:49 ~ $ git clone https://github.com/NyangUk/my-first-blog

pythonanywhere 콘솔창에서 가상환경 실행하기

$ cd my-first-blog
$ virtualenv --python=python3.6 my
$ source my/bin/activate
(my) $  pip install django~=2.0

다음을 실행하여 가상환경을 만든다.

 

pythonanywhere의 데이터베이스 만들기

실습을 진행하면서 만들었던 데이터베이스와 서버상에서의 데이터베이스는 다르므로 배포전 초기화를 시켜준다.

migrate createsuperuser를 사용한다.

 

$ python manage.py migrate
$ python manage.py createsuperuser

createsuperuser 로 관리자를 다시 생성해준다.

 

 

이로써 웹페이지를 위한 코드와 정적파일, 새로운 데이터베이스가 준비되었으니 배포할 모든 준비가 되었다.

 

web app으로 블로그 배포하기

pythonanywhere 로고를 누르면 dashboard 가 뜬다 그중 가장 아래있는 Web apps 에서 Open Web tab을 눌러 

Add a new web app에 들어간다.

 

그러면 새로운 web app을 만들수 있는 대화창이 뜨는데 가장먼저 웹의 도메인을 묻고 기본으로 pythonanywhere의 이름으로 도메인이 설정된다. 바꾸고 싶다면 Upgrade now!를 누르자.

 

다음으로는 Web framework를 설정해야하는데 이때 Django가 아닌 manual comfiguration을 선택하여 python 3.6으로 결정한. 이는 이전에 콘솔창에서 설치했던 파이썬 버전이 3.6이기 때문이며 만약 3.6이아닌 다른 버전으로 가상환경을 만들었다면 그 버전에 맞는 것으로 설정하면된다. 이후  next를 눌러 대화창을 빠져나온다.

 

Virtualenv 설정하기 

대화창을 빠져나오면 Web tab이 나오는데 Virtualenv: 부분의 Enter path to a virtualenv, if desired 를 눌러 콘솔창에서 만든 가상환경의 주소를 입력한다. 

/home/사용자이름/my-first-blog/가상환경이름/ 으로 입력한다.

나같은 경우 /home/nyanguk/my-first-blog/my/이 되겠다.

WSGI 파일 설정하기

장고는 "WSGI 프로토콜(WSGI protocol)"이라는 파이썬을 사용한 웹사이트 운영에 필요한 서비스하기위한 표준이 필요하며 pythonanywhere 에서도 사용할 수 있도록 해야한다.

 

Web tab의 code: 부분에서 /var/www/nyanguk_pythonanywhere_com_wsgi.py 을 눌러 아래의 내용으로 바꿔준뒤 저장한다. 

import os
import sys

path = '/home/<your-PythonAnywhere-username>/my-first-blog'  # PythonAnywhere 계정으로 바꾸세요.
if path not in sys.path:
    sys.path.append(path)

os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

from django.core.wsgi import get_wsgi_application
from django.contrib.staticfiles.handlers import StaticFilesHandler
application = StaticFilesHandler(get_wsgi_application())
나같은 경우' /home/nyanguk/my-first-blog' 이 되겠다. 잊지말고 자신의 계정이름으로 바꿀 것!

그 후 가장 상단의 Reload '웹 도메인' 를 누르면 Configuration for '웹 도메인' 이 생겨난 것을 확인 할수 있고 웹 페이지로 들어가게되면 만들었던 웹페이지가 나오게 된다. 도메인 뒤에 /admin/을 붙이면 관리자모드로 들어갈 수 있다.

 

 

끗!