완숙의 블로그

[Django] Week 6.5 - heroku에 배포하기 본문

Programing Language/Web_Django

[Django] Week 6.5 - heroku에 배포하기

완숙 2019. 3. 9. 11:53

이제 만든 프로젝트를 실제 웹에 올려보자.

실제 웹에 올리기 위해서는 AWS, Jeroku, python anywhere 등 다양한 웹 호스팅 서비스를 이용해야 한다.

우리는 그중에서 Heroku 를 활용해서 배포하는 법을 알아보자.

무료니까.(찡긋)

 

웹사이트에 올릴 준비하기

지금 우리가 만든 django 프로젝트는 개발환경에 최적화 되어있기 때문에,

실제 서비스 운영은 좋지 않다.

보안이나 성능상에 문제가 생길 가능성이 있기 때문인데,

가장 중요한 두가지 부터 수정해보자.

 

settings.py 수정하기

  1. DEBUG이 기능이 켜져있는 상태에서 배포하면,
    # settings.py # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True 
    를로 바꿔주자.
  2. # SECURITY WARNING: don't run with debug turned on in production! # DEBUG = True DEBUG = bool( os.environ.get('DJANGO_DEBUG', True) )
  3. 누군가가 들어와서 뚜둘려줄지도 모른다,,
  4. 우리 실제 서버를 돌렸을 때, 에러 메시지를 띄웠던 DEBUG 기능을 꺼야한다.
  5. SECRET_KEY이게 털리면 서버가 비밀리에 간직해야되는 정보의 암호화가 무용지물이 된다.를로 바꿔주자.
  6. # settings.py # SECURITY WARNING: keep the secret key used in production secret! # SECRET_KEY = '(p7p0#$^HHFGHHdggtherververvewkjbnp3290vdvfd)w' # SECURITY WARNING: keep the secret key used in production secret! import os SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY', '(p7p0#$^FHHdfsFGHHdggthefdfsrerg04ververvewkjbnp3290vdvfd)w')
  7. # settings.py # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = ''
  8. CRSF 보안 등을 위해 사용되는 큰 숫자의 랜덤값이다.

 

Heroku 설치하기

  1. https://www.heroku.com
  2. 여기서 회원가입을 진행하자.
  3. https://devcenter.heroku.com/articles/getting-started-with-python먼저 setup만 해주자.
    2019-03-05 2 15 28
  4. 본인에게 해당되는 운영체제를 선택해 설치하자.
  5. 그리고 이 주소에서 배포를 연습할 수 있다.

 

Github repository에 저장하기

앞 강의를 들었으면, github 아이디는 있을 거라 생각하고 진행하겠다.

  1. 먼저 repository 부터 만들어보자.
  2. 그럼 업로드하기 위해서, .gitignore 파일을 만들어야되는데,이 부분이 생각이 안나면,이 부분을 참고하자.
  3. [[Django] Week 2.5_2 Git 실습](https://egg-money.tistory.com/97)
  4. 이 파일은 manage.py 파일이 있는 폴더에 만들어야 한다.
  5. .gitignore 파일 안에 이렇게 넣어주자.
  6. # .gitignore ### Django ### *.log *.pot *.pyc __pycache__/ local_settings.py db.sqlite3 media
  7. 여기까지 했으면, github 에 push까지 진행해보자.
  8. $ git init $ git add . $ git status $ git commit -m "first commit" $ git remote add origin https://github.com/wansook0316/heroku_upload.git $ git push -u origin master

 

Heroku에 올리기 위한 작업

Procfile 작성

하, 이파일 설명하기가 너무 힘들다.

일단은 그냥 만들어야 하는 파일이라고 생각하자.

이것도 역시 manage.py 가 있는 위치에 만들자.

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

중간에 secondproject 는 프로젝트 이름이다.

 

Unicorn 설치하기

$ pip install gunicorn 

 

Database 설정하기

앞서 개발에서는 sqlite가 기본으로 설정되어 있었지만 heroku에서는 사용할 수 없다.

그 이유는 복잡한데, heroku가 postgresql 를 기본 옵션으로 하고 있기 때문이라고만 생각하고 넘어가자.

그전에 무언가 설치해줘야한다.

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

 

그 다음에, settings.py 맨하단에 아래 내용을 붙여넣기 하자.

# 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 로 가서 MIDDLEWEAR 설정에서

SecurityMiddleware 위에 WhiteNoiseMiddleware 를 추가하자.

# 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 install 을 통해 여러가지를 설치했는데,

이 설치한 내용을 호스팅할 서버에서도 설치해줘야한다.

그렇기 떄문에 이 리스트를 업로드 해줘야 한다.

$ pip freeze > requirements.txt 

 

heroku에게 python 버전을 알려주자

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

runtime.txt 라는 파일을 만들고 안에 python 버전을 적어주자.

파이썬 버전을 알려주는 명령어는,

$ python --version 

이다.

그리고 최상위 폴더에 runtime.txt 를 만들어주자.

# runtime.txt  python-3.7.1 

해당 부분은 내 파이썬 버전을 입력해준다.

 

마지막으로 다시 github에 푸시해주자.

$ git init $ git add . $ git status $ git commit -m "heroku edited" $ git remote add origin https://github.com/wansook0316/heroku_upload.git 이 부분은 없어도된다. $ git push -u origin master  

 

 

Heroku 만들기

여기까지 잘했다면 이제 Heroku를 만들어보자.

$ heroku login 

그러면 이런 창이 뜬다.

2019-03-05 5 27 42

 

일단 로그인 해준다.

로그인후 뜨는 창을 보면, 이런창이 뜰텐데,

결국 이 사이트에 들어와서 내가 GUI 기반으로 앱을 만들 수 있는 거다.

2019-03-05 5 31 47

우리는 기존에 내가 만든 앱을 바로 올리고 싶은 거니까

터미널 창에서 해보자.

 

이제 다음 명령어를 쳐보자.

$ heroku create  
$ heroku create 저장소이름 

 

그러면 앱이 생성되고, (이건 GUI 기반으로도 할 수 있다.)

 

모든 사항을 수정한 것이 github 에 올라간것이 확인되면,

$ git push heroku master 

 

이 때, 만약 앱을 삭제해 버렸다면,

$ heroku git:remote -a 헤로쿠 앱 이름 

 

이렇게 써주면 잘 푸시 된다.

 

이렇게 하고

헤로쿠 홈페이지

들어가면,

2019-03-05 9 54 51

잘 뜬다! 이러면 웹을 올린 거다!

 

그런데 이건 푸시만 한거고, heroku 에는 migrate 가 안되어 있으니,

$ heroku run python manage.py migrate 

 

자, 이제 내가 올린 페이지를 열어보자

$ heroku open 

 

 

 

푸시를 하면서 예전에 만들었던 DB, superuser 다 없어졌으니까,

$ heoku run python manage.py createsuperuser 

 

 

 

Comments