Django 프로젝트 Heroku에 릴리즈하기
10 Jun 2017 | Django Web service Python Heroku whitenoise기존 Django 프로젝트 Heroku에 릴리즈
Heroku CLI 설치
brew install heroku
gunicorn을 추가
pip3 install gunicorn
gunicorn 설정시 폴더구조는
메인 -
|- 프로젝트
|- 다른 앱
폴더 구조가 다르면 gunicorn module 임포트를 적절히 수정해 줘야 한다.
Procfile 추가
프로젝트 루트에 Procfile
을 추가하고 다음 내용을 저장한다.
web: gunicorn myproject.wsgi --log-file -
runtime.txt 추가
프로젝트 루트에 runtime.txt
을 추가하고 다음 내용을 저장한다. (파이썬 3.# 일 경우)
python-3.6.1
dj-database-url 추가
pip3 install dj-database-url
이후 프로젝트의 settings.py
파일에
import dj_database_url
db_from_env = dj_database_url.config(conn_max_age=500)
DATABASES['default'].update(db_from_env)
를 추가한다.
whitenoise 추가
장고는 기본적으로 프로덕션에서 스태틱 파일을 제공하지 않는다.
whitenoise는 개발 환경 그대로 스태틱 파일을 제공하게 해준다.
pip install whitenoise
settings.py
에 다음 내용을 추가한다.
# Simplified static file serving.
# https://warehouse.python.org/project/whitenoise/
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'
wsgi.py
에 다음 내용을 추가한다.
from django.core.wsgi import get_wsgi_application
from whitenoise.django import DjangoWhiteNoise
application = get_wsgi_application()
application = DjangoWhiteNoise(application)
requirements.txt 생성
pip freeze > requirements.txt
를 입력하여 사용된 패키지를 추출한다.
ALLOWED Host 추가
settings.py
에서 ALLOWED_HOSTS = ['*']
를 추가한다.
추가사항
DEBUG=False 일때 Whitenoise와 Heroku의 충돌이 있다.
해결방법은 Django를 이용한 건물주 평판 조회 서비스 제작 (5) - Heroku 업로드 여기서 확인
Heroku에 로그인
heroku login
Heroku 앱 생성
heroku create
heroku create
Creating app... done, ⬢ calm-basin-17299
https://calm-basin-17299.herokuapp.com/ | https://git.heroku.com/calm-basin-17299.git
Git remote heroku added
Heroku를 git remote로 추가
git remote add heroku https://git.heroku.com/calm-basin-17299.git
db가 생성되어 있지 않다면 생성
heroku run python manage.py migrate
간혹 dev와 production 환경의 db가 다를 경우 db 생성이 되지 않은 상태라 push가 제대로 되지 않는다.
슈퍼유저 생성
heroku run python manage.py createsuperuser
commit하고 Heroku에 push
git push heroku master
만약 matpolib을 쓴다면… 헤로쿠와 충돌이 일어난다
import matplotlib
matplotlib.use('Agg')
를 import matplotlib.pyplot as plt, mpld3
전에 추가한다.
Comments