Heroku는 PaaS 개념의 서비스로 많은 웹 기반환경의 관리를 제공한다.
서버관리, 로드 밸런싱, 역방향 프록시등 여러가지 웹 기반환경들을 Heroku가 내부적으로 모두 제공하므로 이에 대한 걱정을 덜고 쉽게 개발을 시작할수 있다.
Heroku는 Django 웹사이트를 한 개이상의 "다이노(Dyno)"에서 실행한다.
제약점
ALLOWED_HOSTS
설정을 임시로 전부 허용해 준다.#settings.py
ALLOWED_HOSTS = ['*'] # 임시로 설정.
디버깅 모드에서 ALLOWED_HOSTS
변수가 빈 리스트일 경우 ['localhost', '127.0.0.1', '[::1]']
의미가 된다. 즉, 로컬 호스트에서만 접속이 가능하다.
디버깅 모드를 끄면 일체 접속이 허용되지 않고 아래와 같이 명시적으로 지정한 호스트에만 접속할 수 있다.
ALLOWED_HOSTS = ['example.com', 'www.example.com', 'localhost', ]
중요한 값(API KEY)
숨기기SECRET_KEY, DEBUG
값 등 중요한 값(API KEY)
숨기기decouple
사용. (https://pypi.org/project/python-decouple/)pip install python-decouple
os.environ.get('DJANGO_SECRET_KEY')
이런 식으로 하는게 정석이지만, 윈도우 환경변수에 등록하고 받기가 귀찮으므로 이걸로 대체해서 사용.env
파일을 manage.py
와 같은 위치에 생성한다.gitignore
에 .env
를 등록해서 git 에 올라가지 않게 한다.# .env
SECRET_KEY=dj9oh154y8eh320QZX3%0h2_23adg39asj293i
# settings.py
from decouple import config
SECRET_KEY = config('SECRET_KEY')
# cast=bool 이 없으면 False 를 문자열로 인식하게됨.
DEBUG = config('DEBUG', default=False, cast=bool)
pip install gunicorn
manage.py
와 같은 위치에 생성한다.-
빠뜨리면 안된다.)web: gunicorn {settings.py의 폴더명}.wsgi --log-file -
pip install dj-database-url
pip install psycopg2
# 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)
pip install whitenoise
settings.py > MIDDLEWARE
의 'django.middleware.security.SecurityMiddleware',
아래에 추가'whitenoise.middleware.WhiteNoiseMiddleware',
# settings.py
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.0/howto/static-files/
# The URL to use when referring to static files (where they will be served from)
STATIC_URL = '/static/'
STATIC_ROOT = BASE_DIR / 'staticfiles'
# 아래와 같은 형태는 Django 2.x.x 에서 쓰이던 문법.
# STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
python manage.py collectstatic
manage.py
와 같은 위치에 파일 생성python-3.8.7
pip freeze > requirements.txt
heroku help
를 터미널에 입력했을 때 실행이 안되면 vscode 를 종료 후 다시 실행해야 합니다.heroku login
헤로쿠 로그인 진행.[T] heroku create [프로젝트명]
를 vscode 터미널에서 입력한다.
[T] git push heroku main
File "/tmp/build_8fe9a460/eds_music_travel_with_tony_back/settings.py", line 25, in <module>
remote: SECRET_KEY = config('SECRET_KEY')
remote: File "/app/.heroku/python/lib/python3.7/site-packages/decouple.py", line 199, in __call__
remote: return self.config(*args, **kwargs)
remote: File "/app/.heroku/python/lib/python3.7/site-packages/decouple.py", line 83, in __call__
remote: return self.get(*args, **kwargs)
remote: File "/app/.heroku/python/lib/python3.7/site-packages/decouple.py", line 68, in get
remote: raise UndefinedValueError('{} not found. Declare it as envvar or define a default value.'.format(option))
remote: decouple.UndefinedValueError: SECRET_KEY not found. Declare it as envvar or define a default value.
에러가 뜨는데 우리가 숨겨둔SECRET_KEY
를 찾을 수 없어서 발생
.env
파일은 우리 pc 에서만 유효하다.[B] 헤로쿠 홈 페이지에서 해결해야함
Config Vars
를 찾을 수 있음. .env
에서 등록한 내용을 입력한다.git push heroku main
진행[T] 설정이 완료 되었으면 다시 git push heroku main
을 해준다.
[B]완료가 되면 DB 생성해야 한다.
헤로쿠 프로젝트 페이지에 들어간다.
우측 상단에 보면 More
가 있다.
More > Run Console
클릭
bash
를 입력하고 Run
을 클릭.
하단에 터미널이 오픈됨.
Hello
라는 글자를 보여주는 페이지가 있으면 동작이 잘 된다는 것을 간편하게 알 수 있다.테스트도 문제 없으면 settings.py
에서 ALLOWED_HOSTS
를 재설정한다.
http://
는 제외하고 기본 domain 주소만 등록한다.# settings.py
ALLOWED_HOSTS = [
'[여긴 헤로쿠 보통 프로젝트 명].herokuapp.com',
'127.0.0.1' # 로컬 테스트를 위해 등록
]
git push heroku main
을 해주면 된다.git push origin main
git push heroku main
(추가) Heroku 로그 보는 방법
Debug True
로 변경해야 자세한 정보를 볼 수 있음.heroku logs --source app --tail
를 vscode 에서 치면 실시간 로그를 볼 수 있다.