$ pip install gunicorn psycopg2-binary whitenoise dj-database-url django-environ
우리는 Heroku
에게 우리 프로젝트가 사용하고 있는 외부 패키지들을 알려줄 필요가 있다. 거기에 각각의 버전까지 적어주어야 우리 로컬 환경에서 실행했던 것과 동일한 환경을 서버에 구축할 수 있다.
$ pip freeze > requirements.txt
위를 실행하면 아래와 같이 텍스트 파일이 생성된다.
requirements.txt
에는 우리가 사용하는 패키지들과 각 패키지별 버전 정보가 기록되어 있는 것을 확인할 수 있다.
import os
import dj_database_url
import environ
env = environ.Env()
environ.Env.read_env()
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.1/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = os.environ['secret_key']
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False
ALLOWED_HOSTS = ['.herokuapp.com', '127.0.0.1']
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
'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',
'whitenoise.middleware.WhiteNoiseMiddleware',
]
# Database
# https://docs.djangoproject.com/en/3.1/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
db_from_env = dj_database_url.config(conn_max_age=500)
DATABASES['default'].update(db_from_env)
Procfile
을 메인 루트 디렉토리에 생성하여(확장자 없음) 아래 내용을 작성한다. 이때 myboard 부분은 프로젝트 이름이다.
web: gunicorn myboard.wsgi
runtime.txt
을 메인 루트 디렉토리에 생성하여 현 프로젝트의 파이썬 버전을 작성한다. 파이썬 버전은 myvenv
내에서 python -V
로 확인할 수 있다.
python-3.9.0
.gitignore
파일은 Heroku
에서만 쓰이는 개념이 아닌, git
으로 관리하는 모든 프로젝트에 적용되는 개념이다. 이 파일 내에 적힌 파일이나 폴더는 add, commit, push에 영향을 받지 않는다. 마치 숨김 파이처럼 되어 push를 해도 외부 저장소에는 올라가지 않고 로컬에만 남아있게 된다. myvenv
처럼 용량만 크고 올릴 필요는 없는 파일들이나, 올라가면 안 되는 파일들을 여기에 적으면 된다.
__pycache__/
*.py[cod]
.Python
myvenv/
db.sqlite3
.DS_Store
.vscode/
.env
대시보드에서 New를 눌러 새 프로젝트를 시작할 수도 있지만, 우리는 CLI
를 활용해 터미널에서 명령어를 입력하는 방식으로 배포를 진행하도록 한다.
이를 위해서는 heroku cli
를 설치해야 한다. https://devcenter.heroku.com/articles/heroku-cli 에서 heroku cli
를 내려받는다.
$ git init
$ git add --all
$ git commit -m "Commit message"
$ git remote add origin https://github.com/sminha/MyBoard.git
$ git push origin master
$ heroku login
$ heroku create sminha-myboard # 배포 완료 후 smina-myboard.herokuapp.com이 곧 프로젝트 주소가 된다.
# Heroku 서버 설정하기(SECRET_KEY를 환경변수에 저장)
$ heroku config:set secret_key='1ad-77dx3-hyt3e-7vpmya!1($27tbql!gj*cu@yby2adm(lgvr`
$ heroku config:get secret_key -s >> .env
$ git push heroku master
$ heroku run python manage.py migrate
$ heroku run python manage.py createsuperuser
🔖 깃과 깃허브
깃
소프트웨어
소스코드의 버전을 관리하는 도구로, 변경 사항에 대한 기록을 하는 기능을 갖고 있다.깃
을 활용하면 소스코드 전체를 복사하여 '최종본', '진짜 최종본'과 같이 관리하지 않아도 버전 간 변경 이력을 남길 수 있다.깃허브
깃을 기반으로 하는 서비스
이런깃
과 연동하여 소스코드를 외부에 저장할 수 있는 서비스가깃허브
이다.깃허브
는 외부 저장소를 지원하여 마치 웹 하드에 올리는 것처럼 프로젝트 소스코드를 올려놓을 수 있다. 뿐만 아니라깃
과 연동이 되기 때문에 깃에서 기록된 변경 이력이 그대로 외부 저장소에 남게 된다.
🔖 깃 주요 명령어git add -all
어떤 파일들이 변경되었는지 지정하는 과정git commit -m "Commit Message"
현재까지 기록된 변경사항을 하나의 역사로 기록하는 과정. 여기까지 로컬 내에서 일어나는 일이다.git push origin master
외부 저장소의 master 브랜치에 commit을 올린다. 이를 통해 변경사항이 외부 저장소에도 반영된다.