티스토리 뷰

반응형

Django - heroku 배포하기 

 

 

0. heroku cli 설치하기 

 - download : https://devcenter.heroku.com/articles/heroku-cli

설치가 완료되면 cmd에서 heroku 명령을 실행할수 있다. 

heroku cli login 

1. 필수 패키지 설치 ( gunicorm, requirements.txt ) 

gunicorn : 파이썬 웹서버 gateway interface 로 장고과 heroku 서버의 통신하는게 필요한 패키지

 

- install guniconrn 

- create requirements.txt

- git repository 설정하기 ( local ) 

   - git init   : repository 설정하기 

   - .gitignore : git 싱크시에 제외할 파일 리스트 작성 ( 옵션 ) 

   - git add .   or git add -A 

   - git commit -m "the first commit" 

 

2. Heroku 새로운 app 을 생성한다. 

heroku 에서 현재 login 되어 있는 app 을 브라우저로 오픈해서 볼수도 있다. 

현재는 아무 파일도 설정되지 않아서 heroku default 페이지가 보여진다. 

 

이제 git 저장소에 있는 파일을 heroku 로 복사한다. 

일반적으로 에러가 많은 부분중에 하나가 staticfile 관련된 부분이다. 개인 PC와 서버 환경이 달라서 생기는 문제이다.  collection static 에러를 해결하기 위해서는 STATIC_ROOT 에 대한 부분을 설정해 주면된다. 

그리고 python manage.py collectstatic 을 실행하면 다음과 staticfiles 폴더가 생성되고 static 파일이 저장되는 것을 볼수 있다. 

변경사항을 commit 하고 소스코드를 다시 heroku 로 push하면 정상적으로 옮겨진것을 확인할수 있다. 

이제 다시 한번 heroku site를 오픈하면 다음과 같은 에러가 발생한다. 

위와 같은 에러가 발생하면 heroku logs --tail 명령을 cmd 창에 실행시켜서 자세한 log를 확인하면된다. 

실제 파일을 heroku 에 올렸지만 어떻게 실행시켜야 하는지에 대한 내용을 제공하지 않았다. 따라서 다음과 같은 에러를 중간에 확인할수 있다. 내용은 어떠한 프로세서도 실행되지 않고 있다는 내용이다. 

- "No web processes running" 이런 메시지가 보인다. 이는 실제로 서버에서 동작되고 있는 process가 없단 의미이다. 

지금까지 했던 작업은 소스코드를 heroku 쪽에 올린 작업이고 이를 실행하기 위해서는 gunicorn 패키지를 통해서 프로세스를 구동해주어야 한다. 

 

 

Heroku 에 명령을 주기 위해서는 프로젝트 폴더에 Procfile 을 생성해서 다음과 같이 작성해 주어야 한다. 

 

gunicorn : command for communicating between python and webserver. 

django_project : 프로젝트 폴더 이름과 동일해야 한다. 

wsgi : web service gateway interface 

 

이제 변경사항을 모두 적용해서 다시 서버에 접속해 보자. 

이번에는 다른 에러가 발생하였다. disallowedHost ... 호스트 이름이 등록되지 않아서 발생한 에러이다. settings.py 에 host 를 등록해주면된다. 

다시 변경된 내용을 heroku 서버에 적용한다. 

 

 


개발 환경와 실제 서버 환경에서 변수가 달라지는 경우가 있는데 이를 구분해서 적용할 필요가 있다. 운영서버에서 debug 모드가 실행되면 많은 정보가 노출되기 때문에 반드시 꺼두어야 한다. 

 

Heroku의 경우 app에 대한 실행을  /app 폴더에서 하기 때문에 이것을 이용해서 운영/데스트 서버를 구분할수 있다. 운영서버(Heroku) 인 경우 Debug=False 로 변경 적용한다. 


 끝. 


윈도우의 경우 환경 변수 가져오는데, 약한의 문제가 있는듯 보임. 아래 내용은 일단 보류 좀더 확인 필요.. 

 

한가지 더 생각해 봐야 할 부분이 Debug 부분인데, 상용서버에서는 debuging 정보를 보여줄 필요가 없다.

이부분을 False 로 해야 하지만, 아직은 개발/상용에 모두 사용되고 있어서 각 서버의 환경 변수를 사용해서 설정을 변경할수 있다.

 

이번 예제에서는 SECRET_KEY / DEBUG 를 환경 변수로 설정하고 local 에서 읽어오도록 한다. 

 

python 에서 secret 값을 가져오는 방법이다. 

이렇게 생성한 secret_key 와 dubug 값을 환경 변수에 저장해 둔다. 

- windows cmd 경우 

- mac / linux 의 경우, 

    export SECRET_KEY="23e3e2499ff6d6a61f57fd25c3be301235da3dce6e8a81cd"
    export DEBUG_VALUE="True"

window 사용자의 경우는 set DEBUG_VALUE="True" 라고 작성하면된다. 

 

이번에는 Heroku 에서 환경변수 설정하는 방법을 알아본다. 

이렇게 두 서버에 모두 환경 변수가 설정되었으니, settings.py 에서 변수값을 참조하면된다. 

 

settings.py 에서 환경변수를 읽어오는 방법을 알아보자. 

 

 

댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함