본문 바로가기
Django11

Django 배포

by 자동매매 2023. 4. 14.

코드를 GitHub에 저장하고 GitHub에 저장된 코드를 PythonAnywhere에서 가져다가 작동하는 방법

 

https://m.blog.naver.com/pjok1122/221607377401

 

[Python / Django] pythonanywhere 배포하기(웹 호스팅)

1. 배포를 위한 설정 Setting.py에서 다음을 수정하셔야 합니다. (1) DEBUG 처음에는 DEBUG &#x...

blog.naver.com

 

0. 준비 작업

  • pythonanywhere 회원 가입
  • github 회원 가입

 

1. 배포파일 마무리

1) setting파일 설정

  • SECRET_KEY 분리           -  ?????
  • DEBUG 설정                      -  False
  • ALLOWED_HOSTS 설정   -  hosting업체에서 할당한 주소 지정
SECRET_KEY = 'SECRET_KEY'                    # SECRET_KEY 분리
DEBUG = False                                # 배포를 위해 False 설정
ALLOWED_HOSTS = ['127.0.0.1','<user name>.pythonanywhere.com']  # hosting 주소 지정

 

  • 정적 파일  설정
STATIC_URL = 'static/'
STATIC_ROOT = os.path.join(BASE_DIR,'static')

 

기존에 작성했던 STATICFILES_DIRS는 주석처리 해야합니다. 배포판에서는 static 파일을 여러 군데에 두지 않고 한 폴더에 모아서 처리하기 때문입니다. 따라서 기존에 멀리 퍼져있는 static 파일을 한 군데로 모아 줄 필요가 있습니다. 다음 명령어로 가능합니다.

2) 정적파일 모아주기

다음 명령 실행하면 static폴더에 파일 모음

python manage.py collectstatic

 

2. GitHub에 파일 저장

1) 원격 저장소 생성

    주소 : https://github.com/stillriver/DoItDjango.git 

 

2)  저장소에 저장

$ git init # git                         # 초기화
$ git config --global user.name "name"   # user name 지정
$ git config --global user.email "email" # email 지정

$ git status                             #  상태 정보 보기
$ git add .                              # .gitignore 적용
$ git commit -m "message"                # commit

$ git remote add origin https://github.com/stillriver/ DoItDjango.git 
# origin 지정
# 이 과정에서 git 로그인하라고 뜰 수 있습니다.

# git settings -> Developer settings -> Personal access tokens
# 통해 액세스 토큰을 발급받은 후 로그인하시면 됩니다.

$ git push -u origin master # 원격 저장소에 push 합니다.

 

[ 참조 ]   .gitignore 파일 작성

.git 과 동일 폴더에 생성

*.pyc
__pycache__
myvenv
db.sqlite3
.DS_Store

 

3. PythonAnywhere에서 작업

프로젝트 폴더 : ~/DoItDjango

가상환경명 : ~/venv

3.0  PythonAnywhere에서 GitHub 코드 가져오기(프로젝트 저장 파일)

console 탭 클릭하여 console종류를 bash로 선택하여 git clone 실행함

 

git clone https://github.com/stillriver/DoItDjango.git   # 복제

tree DoItDjango  # 정상 복제 확인

 

3.1 PythonAnywhere에서 가상환경(virtualenv) 생성하기

PythonAnywhere에서  가상 환경(virtualenv)을 생성

배시 콘솔(Bash console)에 다음과 같이 입력하세요. :  버전은 local 버전과 동일하게 지정

$ virtualenv --python=python3.10 venv  # 가상환경 생성
$ source mysite/bin/activate          # 활성화
(venv) $  pip install django whitenoise  # django whitenoise 설치

 

3.2 장고 설치

 

# requirements.txt 로 패키지 설치

# pip freeze > requirements.txt를 해두셨다면
(venv) $ pip install -r requirements.txt

 

일반적으로 장고 설치

 

(venv) $ pip install django

 

3.3 정적 파일 모으기

"백색소음"을 들어본 적이 있나요? 이 것은 "정적 파일"로 불리는 것들을 제공하는 프로그램이에요. 정적 파일이란 HTML, CSS와 같이 정기적인 수정이 없거나 프로그래밍 코드를 실행하지 않는 파일을 말해요. 서버에서 정적 파일은 컴퓨터와 다르게 작동하기 때문에 정적 파일들을 제공하기 위해서 "백색소음"과 같은 프로그램이 필요해요.

정적 파일은 튜토리얼 뒷부분에 나오는 CSS 부분에서 좀 더 자세히 알아볼게요.

이제 서버에서 추가명령인 collectstatic을 실행하세요. 이 명령은 장고가 서버에 있는 모든 정적 파일들을 모으는 것을 지시해요. 지금 이 파일들이 관리자 사이트를 예쁘게 만들어주는 것이지요.

 

(venv) $ python manage.py collectstatic
...

Type 'yes' to continue, or 'no' to cancel: yes

 

3.4  PythonAnywhere에서 데이터베이스 생성하기

컴퓨터와 서버가 다른 점이 또 하나 있어요. 바로 다른 데이터베이스를 사용한다는 점이에요. 그래서 사용자 계정과 글은 서버와 여러분의 컴퓨터와 다를 수 있어요.

지난 번 내 컴퓨터에서 했던 것과 같이 서버에서도 데이터베이스를 초기화 할 거에요. migrate와 createsuperuser를 사용하세요. :

(mvenv) ~/DoItDjango $ python manage.py makemigrations # 마이그레이션 파일이 없는 경우만
(mvenv) ~/DoItDjango $ python manage.py migrate
(mvenv) ~/DoItDjango $ python manage.py createsuperuser

 

4. web app으로 블로그 배포하기

 

이제 우리의 코드는 PythonAnywhere에 있고 우리의 가상환경(virtualenv)도 준비가 되었으며, 정적 파일들도 모아져 있고, 데이터베이스도 초기화되었네요. 이제 우리는 web app으로 배포할 준비가 되었어요.

로고를 클릭해 PythonAnywhere 대시보드로 와서 Web을 클릭하고 Add a new web app를 선택하세요.

도메인 이름을 확정한 후, 대화창에 수동설정(manual configuration) ("Django"옵션이 아니에요.) 을 클릭하세요.

 

4.1 Code: 설정

source code 경로 지정 : /home/neo21pow/DoItDjango  또는 ~/DoItDjango

work directory 경로 지정(프로젝트 경로 X , root이다) : /home/neo21pow/

WSGI configuration file:   /var/www/neo21pow_pythonanywhere_com_wsgi.py

 

4.2 가상환경(virtualenv) 설정하기

      /home/username/ 가상환경명/ 

      /home/neo21pow//venv

 

4.3  static/media files : 설정

static 폴더가 있는 경로 지정

media 폴더가 있는 경로 지정 (현재 미지정 상태)

 

 

4.4 WSGI 파일 설정하기

장고는 "WSGI 프로토콜"을 사용해 작동합니다. 이 프로토콜은 파이썬을 이용한 웹사이트를 서비스하기 위한 표준으로 PythonAnywhere에서도 지원합니다. WSGI 설정을 파일을 수정해 우리가 만든 장고 블로그를 PythonAnywhere에서 인식하게 해봅시다.

"WSGI 설정 파일(WSGI configuration file)" 링크(페이지의 상단 근처에 있는 "코드(Code)" 섹션에 있습니다. -- 아마 /var/www/<your-username>_pythonanywhere_com_wsgi.py와 같이 나타나있을 것입니다.)를 클릭하면 에디터를 볼 수 있을 것입니다.

모든 내용을 삭제하고 아래 내용을 넣으세요. :

import os
import sys

path = '/home/HyukJeon/프로젝트명'
if path not in sys.path:
    sys.path.append(path)

os.environ['DJANGO_SETTINGS_MODULE'] = '세팅이 있는 폴더명.settings'

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

 

나의 경우 : 

project 폴더(DoItDjango) > config > setting.py 이다

import os
import sys

path = '/home/neo21pow/DoItDjango'   # 설정
if path not in sys.path:
    sys.path.append(path)

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

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

 

5. Test

reload 후 

<username>.pythonanywhere.com 으로 접속

 

디버깅 팁

본인의 사이트에 접속할 때 오류가 보이면, 제일 먼저 error log(오류 로그)에서 디버깅 정보를 찾아보세요.

PythonAnywhere 위키에서 일반적인 디버깅 팁을 확인할 수 있어요.

 

6. Web 갱신

 

Blog App에서 수정사항이 있을경우  Pythonanywhere에서 pull 해줘야 동기화 

 

1. pythonanywhere -> consoles

2. 저장파일 폴더로 이동

cd DoItDjango

3. Pull 하기

git pull

4. 완료

* pythonanywhere -> web -> reload!

 

 

[ 에러 발생 대처 ]

case 1) 충돌되는 파일이 있어서 merge error 발생

git stash

git stash list
- stash 한 list 호출

git stash pop
- stash 내역 보여주기

*stash : unstaged 파일들을 임시 저장하고 HEAD의 상태로 백업을 하는 것

 

case 2) fatal error 발생 :  * 작업자가 누군지 정하지 않았을 때 발생

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

 

git stash

git stash list
- stash 한 list 호출

git stash pop
- stash 내역 보여주기

'Django11' 카테고리의 다른 글

Django Migrations  (0) 2023.04.28
Django Models  (0) 2023.04.28
Getting Started with Django  (0) 2023.04.08
Django Create App  (0) 2023.04.08
[ DJANGO ] Index  (0) 2023.04.08

댓글