[DRF] Heroku로 배포하기

minhi-!·2023년 2월 16일
0

Django REST Framework

목록 보기
3/3

배포

  • 서버용 컴퓨터 24시간 돌아갈 수 있는 고성능 컴퓨터 네크워크 관련 설정을 통해 접속이 가능하게끔 만든 후 서비스 구동시키기
  • 클라우드 이용하기 ex. AWS, PythonAnywhere, Heroku


배포를 위한 준비

패키지 설치

$ pip install gunicorn psycopg2-binary whitenoise dj-database-url django-environ


우리는 Heroku에게 우리 프로젝트가 사용하고 있는 외부 패키지들을 알려줄 필요가 있다. 거기에 각각의 버전까지 적어주어야 우리 로컬 환경에서 실행했던 것과 동일한 환경을 서버에 구축할 수 있다.

$ pip freeze > requirements.txt

위를 실행하면 아래와 같이 텍스트 파일이 생성된다.

requirements.txt에는 우리가 사용하는 패키지들과 각 패키지별 버전 정보가 기록되어 있는 것을 확인할 수 있다.

settings.py

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

Procfile을 메인 루트 디렉토리에 생성하여(확장자 없음) 아래 내용을 작성한다. 이때 myboard 부분은 프로젝트 이름이다.

web: gunicorn myboard.wsgi

runtime.txt

runtime.txt을 메인 루트 디렉토리에 생성하여 현 프로젝트의 파이썬 버전을 작성한다. 파이썬 버전은 myvenv 내에서 python -V로 확인할 수 있다.

python-3.9.0

.gitignore

.gitignore 파일은 Heroku에서만 쓰이는 개념이 아닌, git으로 관리하는 모든 프로젝트에 적용되는 개념이다. 이 파일 내에 적힌 파일이나 폴더는 add, commit, push에 영향을 받지 않는다. 마치 숨김 파이처럼 되어 push를 해도 외부 저장소에는 올라가지 않고 로컬에만 남아있게 된다. myvenv처럼 용량만 크고 올릴 필요는 없는 파일들이나, 올라가면 안 되는 파일들을 여기에 적으면 된다.

__pycache__/
*.py[cod]

.Python
myvenv/

db.sqlite3
.DS_Store

.vscode/
.env


Heroku 시작하기


대시보드에서 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 CLI로 배포하기

$ 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을 올린다. 이를 통해 변경사항이 외부 저장소에도 반영된다.

profile
개발 공부 기록용

0개의 댓글