본문 바로가기

Web Programming/Django

Heroku 배포하기

개발한 환경과 실제 웹사이트에서 많은 차이점들이 있기에 기존의 세팅들을 약간 수정해줘야 합니다.


## settings.py 수정하기

우리가 개발 시 사용했던 secret키와 debug 는 배포에 있어 문제를 일으킬 수 있기에 약간의 수정이 필요합니다


# settings.py


# SECURITY WARNING: keep the secret key used in production secret!
#SECRET_KEY = ''
SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY', '"YOUR_SECREY_KEY")YOUR_SECREY_KEY')

# SECURITY WARNING: don't run with debug turned on in production!
#DEBUG = True
DEBUG = bool( os.environ.get('DJANGO_DEBUG', True) )


## 배포 전 Git 업로드


# .gitignore 파일을 만들어 다음의 코드를 입력

/project/.gitignore 파일 생성!

### Django ###
*.log
*.pot
*.pyc
__pycache__/
local_settings.py
db.sqlite3
media


그리고 git repository에 업로드해줍니다.


## 배포 전 여러 세팅다.


# Procfile 

Manage.py 파일이 있는 위치에 확장자 없이 다음의 파일을 만들고 다음의 코드를 입력해줍니다.

/project/Procfile 파일 생성!

web: gunicorn secondproject.wsgi --log-file -

# gunicorn

그리고 모듈을 하나 설치해줍니다

$ pip install gunicorn

# DB 설정

다음 Heroku에서는 django에서 기본으로 사용하던 sqlite3를 지원하지 않기에 DB 설정을 약간 수정해줘야 합니다.

$ pip install dj-database-url
$ pip install psycopg2-binary

settings.py 에 다음의 코드를 맨 끝에 입력해줍니다.



# Heroku: Update database configuration from $DATABASE_URL.
import dj_database_url
db_from_env = dj_database_url.config(conn_max_age=500)
DATABASES['default'].update(db_from_env)


# Static File 설정

$ pip install whitenoise

settings.py


MIDDLEWARE = [
'whitenoise.middleware.WhiteNoiseMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]


# 파이썬 관련 라이브러리 설치

$ pip freeze > requirements.txt

앞서 pip install을 통해 이것저것 설치했습니다. 여기 설치한 내용을 호스팅할 서버에서도 설치해야 되기 때문에 관련 목록을 리스트업 해주는 겁니다. 이렇게 리스트업해두면 heroku가 알아서 설치합니다.


# heroku에게 python 버전 알려주기

우리가 만든 프로젝트의 python 버전을 heroku에게 알려줘야 충돌을 줄일수 있습니다.

runtime.txt 라는 파일을 만들고 안에 python 버전을 적어줍시다.

project/runtime.txt 생성!

python-3.7.1


## Heroku 만들기

$ heroku login
$ heroku create

$ git push heroku master

$ heroku run python manage.py migrate


## Allow host 수정



위와 같은 화면이 뜰수 있습니다. 그런 경우 settings.py로 가서 ALLOWED_HOSTS를 수정해줍니다.

ALLOWED_HOSTS = ['*']

이렇게 적어주면 작동합니다.