seoyoung.dev

[Django]Pythonanywhere 배포하기 + static/media 본문

WEB/Django

[Django]Pythonanywhere 배포하기 + static/media

seo-0 2021. 6. 1. 18:27

졸업 프로젝트 시연용 웹앱을 만들기 위해 Django Framework 를 사용하였고,

pythonanywhere 로 배포하였습니다.

간단하지만, 조금은 삽질을 했던 터라 기록을 남기기로..

git 을 사용해서 작업하던 레포지토리를 사용하겠습니다.

pythonanywhere 가입-> Beginner 로 가입 완료하였다면, 

$Bash 콘솔로 접속 

 1. repository clone 해오기

$ git clone https://github.com/<username>/<repositoryname>
# username은 github-usename이기 때문에, github repository 에서 copy한 링크 그대로 paste 해줍니다.

 2. 기존에 가상환경이 있던 경로로 이동 -> 새로운 가상환경 생성 & 실행

$ virtualenv --python=python3.7 myvenv  #기존 django 프로젝트의 파이썬 버전을 확인
$ source myvenv/bin/activate

 3. django + 기존의 requirements.txt 내용 설치

$ pip install -r requirements.txt

 4. 데이터베이스 생성 + admin 생성

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

+ settings.py 의 ALLOWED_HOST 에 pythonanywhere 추가

ALLOWED_HOSTS = [
    '<pythonanywhere-username>.pythonanywhere.com'
]

web app 생성

1. 오른쪽 상단의 WEB 탭에서 Add a new web app

-> 장고 말고 수동 설정 -> 앞서 사용된 파이썬 버전 선택 

2. 아래로 내려가서 가상환경 경로 설정 -> "아까 설치한 가상환경 경로/myvenv/"  까지

3. WSGI 파일 설정하기 : 바로 위 Code 의 wsgi 파일을 수정해줍니다.

import os
import sys

path = '/home/<pythonanywhere-username>/<파일경로..>' #<파일경로에 repo이름..추가로 파일경로>
if path not in sys.path:
    sys.path.append(path)

os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'  #mysite 는 settings.py존재하는 폴더

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

< STATIC 파일과 MEDIA 파일 경로 설정 >

* settings.py 경로에 static과 media 경로 설정

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

* urls.py 의 urlpatterns 에 추가

from django.conf import settings

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

 

* pythonanywhere 에서의 경로 설정

>> html 페이지에서 view 로부터 받은 context에 저장된 post 모델의 image.url 로 접근하였다.

( 사진을 입력하고, 사진 처리 -> 결과를 받는 구조라 정적 이미지말고 image.url 로 접근해야 했다!)

>> 기본경로\media 에 저장되는 이미지이므로

>> pythonanywhere 에서는

/home/<pythonanywhere-user-name>/<repo-name>/<..static 상위 폴더들..>/static 로 경로 추가