장고(django) 프로젝트를 헤로쿠(Heroku)에 업로드하기

2019-06-03

장고(django) 프로젝트를 실제 서비스에서 사용하기 위해 헤로쿠(Heroku) 서비스에 업로드하고 웹 서비스를 제공하는 방법에 대해서 알아봅시다.

개요

장고(django)로 만든 프로젝트로 웹 서비스를 시작하기 위해 헤로쿠(Heroku)에 장고(django) 프로젝트를 업로드하고 웹 서비스를 시작해 봅시다.

이 블로그는 시리즈로 작성되어 있으며, 아래에 링크를 통해 시리즈의 다른 글을 확인할 수 있습니다.

또한 이 블로그 시리즈에서 다룬 소스는 github에 공개되어 있습니다. 아래에 링크를 통해 확인 가능합니다.

헤로쿠(Heroku) 회원 가입

헤로쿠(Heroku) 서비스를 이용하기 위해서는 헤로쿠(Heroku) 서비스에 회원 가입을 할 필요가 있습니다. 아래에 링크를 통해 헤로쿠(Heroku) 서비스에 회원 가입 및 로그인을 합니다.

회원 가입 및 로그인은 일반 서비스의 회원 가입 및 로그인 절차와 같으므로 자세한 설명은 생략 하도록 하겠습니다.

장고(django) 프로젝트 헤로쿠(Heroku) 업로드 - 회원 가입

헤로쿠(Heroku) 앱 생성

헤로쿠(Heroku)에서 웹 서비스를 운영하기 위해서는 헤로쿠(Heroku)에 앱(App)을 생성할 필요가 있습니다.

회원 가입과 로그인후 아래와 같은 대시보드(Dashboard) 화면이 보인다면 Create new app을 눌러 새로운 앱을 생성합니다.

장고(django) 프로젝트 헤로쿠(Heroku) 업로드 - 앱 생성

헤로쿠(Heroku) 앱을 생성하기 위해 앱 정보를 입력합니다. 무료이기 때문에 지역은 미국(United State)과 유럽(Europe)만 선택이 가능합니다. 앱 정보를 입력하였다면 Create app을 눌러 앱을 생성합니다.

장고(django) 프로젝트 헤로쿠(Heroku) 업로드 - 앱 정보 입력

헤로쿠(Heroku) CLI 설치

우리는 헤로쿠(Heroku) CLI(Command Line Interface)를 통해 우리가 만든 장고(djanog) 프로젝트를 헤로쿠(Herkou) 업로드(Deploy) 할 예정입니다. 아래에 링크를 통해 각 OS에 맞는 헤로쿠(Heroku) CLI를 다운로드 하시기 바랍니다. 여기에서는 macOS를 기준으로 설명합니다.

macOS에서는 아래에 명령어를 통해 헤로쿠(Heroku) CLI를 설치합니다.

brew tap heroku/brew && brew install heroku

헤로쿠(Heroku) 로그인

헤로쿠(Heroku)에 웹 서비스를 배포(Deploy)하기 위해서는, 헤로쿠(Heroku) CLI를 이용하여 헤로쿠(Heroku)에 로그인 할 필요가 있습니다. 아래에 명령어를 통해 헤로쿠(Heroku) 서비스에 로그인 합니다.

heroku login

위에 헤로쿠(Heroku) 명령어를 실행하면 아래와 같이 로그인 화면이 웹 브라우저에 표시됩니다. Log in 버튼을 눌러 로그인합니다.

장고(django) 프로젝트 헤로쿠(Heroku) 업로드 - 헤로쿠 로그인

로그인이 완료되면 아래와 같이 로그인 성공 화면을 웹 브라우저에서 확인할 수 있으며,

장고(django) 프로젝트 헤로쿠(Heroku) 업로드 - 헤로쿠 로그인 성공

헤로쿠(Heroku) 명령어를 입력한 터미널에서는 아래와 같이 성공 메세지를 확인할 수 있습니다.

heroku: Press any key to open up the browser to login or q to exit:
Opening browser to https://cli-auth.heroku.com/auth/browser/f844937e-aaaf-4620-998f-1f938ed3dea7
Logging in... done
Logged in as dev.yakuza@gmail.com

장고(django) 프로젝트 수정

헤로쿠(Heroku) 서비스에 배포(Deploy) 준비가 끝났습니다. 우리는 장고(django) 프로젝트를 헤로쿠(Heroku) 서비스에서 동작하도록 수정할 필요가 있습니다. manage.py가 있는 폴더에 Procfile 파일을 생성한 후 아래와 같이 추가합니다.

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

위에 내용에서 django_exercise.wsgi 부분을 자신의 프로젝트 이름에 맞게 수정합니다.([project name].wsgi) 우리는 gunicorn이라는 파이썬 HTTP 서버(Python WSGI HTTP Server)를 사용하여 웹 서비스할 것임을 헤로쿠(Heroku)에게 알려주었습니다.

아래에 명령어로 헤로쿠(Heroku)에서 장고(django)를 사용하기 위해 필요한 모듈을 설치합니다.

# source venv/bin/activate
pip install gunicorn dj-database-url psycopg2-binary whitenoise
  • gunicorn: 위에서 설명한 파이썬 HTTP 서버(Python WSGI HTTP Server)입니다.
  • dj-database-url, psycopg2-binary: 헤로쿠(Heroku)는 postgresql을 사용하는데 거기에 필요한 설정 모듈들입니다.
  • whitenoise: 헤로쿠(Heroku)에서 정적 파일(Static files)을 사용하기 위해 필요한 모듈입니다.

설치가 완료되면 아래에 명령어를 통해 requirements.txt를 갱신합니다.

pip freeze > requirements.txt

갱신이 완료되면, dajgno_exercise/settings.py를 열고 아래와 같이 수정합니다.

...
import dj_database_url
...
ALLOWED_HOSTS = ['127.0.0.1', '.herokuapp.com']
...
MIDDLEWARE = [
    'whitenoise.middleware.WhiteNoiseMiddleware',
    ...
]
...
db_from_env = dj_database_url.config(conn_max_age=500)
DATABASES['default'].update(db_from_env)

그리고 우리는 헤로쿠(Heroku)에서 우리의 장고(django) 프로젝트가 어떤 파이썬의 버전을 사용하는지 알려줘야합니다. 아래에 명령어로 파이썬의 버전을 확인합니다.

# source venv/bin/activate
python --version
# Python 3.7.2

파이썬 버전이 확인되었다면 manage.py가 위치한 폴더에 runtime.txt를 생성한 후 아래와 같이 수정합니다.

python-3.7.2

마지막으로 장고(django)를 실전(Production)에 배포할 때는, Debug 모드를 사용하지 않도록 해야 합니다. django_exercise/settings.py를 열고 아래와 같이 수정합니다.

...
DEBUG = False
...

지금까지의 내용을 우리가 관리하는 git에 저장합니다.

git add .
git commit -m 'prepare to deploy'
git push origin master

배포(Deploy)

이제 모든 준비가 끝났습니다. 이제 헤로쿠(Heroku)에 우리의 장고(django) 프로젝트를 배포(Deploy)해 봅시다. 아래에 명령어로 git의 remote에 헤로쿠(Heroku)를 추가합니다.

heroku git:remote -a djangoexercise

아래에 명령어로 잘 추가되었는지 확인합니다.

git remote -v

그러면 아래와 같이 git의 remote에 헤로쿠(Heroku)가 추가된 것을 확인할 수 있습니다.

heroku  https://git.heroku.com/djangoexercise.git (fetch)
heroku  https://git.heroku.com/djangoexercise.git (push)
origin  https://github.com/dev-yakuza/django_exercise.git (fetch)
origin  https://github.com/dev-yakuza/django_exercise.git (push)

이제 아래에 명령어를 통해 배포(Deploy)합니다.

git push heroku master

헤로쿠(Heroku)는 git을 기반으로 배포(Deploy)를 합니다. 위에 명령어로 이미 우리의 장고(django) 프로젝트는 헤로쿠(Heroku)에 배포(Deploy)되었습니다. 이제 우리가 만든 migration을 이용하여 새롭게 데이터베이스를 구축하고 관리자를 생성할 필요가 있습니다. 아래에 명령어를 실행하여 데이터베이스를 구축합니다.

heroku run python manage.py migrate

아래에 명령어로 장고(djagno)의 관리자를 생성합니다.

heroku run python manage.py createsuperuser

확인

우리가 헤로쿠(Heroku)에 배포한 장고(django) 프로젝트를 확인해 봅시다. 아래에 명령어로 우리가 만든 사이트를 웹 브라우저에 표시할 수 있습니다.

heroku open

아래와 같이 우리가 만든 장고(django) 프로젝트가 잘 표시되는 것을 확인할 수 있습니다.

장고(django) 프로젝트 헤로쿠(Heroku) 업로드 - 헤로쿠 배포 확인

URL에 /admin을 입력하여 관리자 화면으로 이동해 봅니다.

장고(django) 프로젝트 헤로쿠(Heroku) 업로드 - 장고 관리자 로그인 화면

우리가 명령어로 생성한 superuser로 로그인 해 봅니다.

장고(django) 프로젝트 헤로쿠(Heroku) 업로드 - 장고 관리자 화면

우리가 개발한 Post 모델(Model)이 잘 표시되는 것을 확인할 수 있습니다.

완료

이것으로 장고(django) 프로젝트를 헤로쿠(Heroku)에 배포(Deploy)하는 과정을 살펴보았습니다. 우리는 이제 장고(django)를 가지고 간단한 웹 서비스를 제공할 수 있는 능력을 가지게 되었습니다. 이후 블로그에서는 서비스를 개발하면서 알게된 내용을 정리할 예정입니다.

책 홍보

저도 블로그를 시작한지 1년만에...책을 다 써봅니다...인생에서 이런 날도 오는군요...타국에서 책 출판도 할 수 있고, 참 좋은 세상입니다.

이번에 쓴 책은 스무디 한 잔 마시며 끝내는 React Native입니다. 다양한 예제를 통해 리액트 네이티브를 공부할 수 있도록 구성해 보았습니다. 또한 설치부터 배포까지 실전에서도 사용할 수 있는 내용들을 담고 있습니다.

아래 링크를 통해 제가 쓴 책을 구매하실 수 있습니다.
많은 분들에게 도움이 되면 좋겠네요.
스무디 한 잔 마시며 끝내는 React Native React Native로 실전 스마트폰 앱 만들기
Buy me a coffeeBuy me a coffee
Posts