[2020 NEW] 6단계만에 Flask App HEROKU에 배포하기

2020. 6. 8. 14:00컴퓨터언어/Python

728x90
반응형

IT는 진짜 너무 빨리 바뀐다.

공식문서마저 그 속도를 못 따라가는 것 같다.

 

내가 헤로쿠 서버로 오늘 Flask앱을 띄우기까지, 자리에서 한번도 안 일어나고 20번 연속으로 Build해서 겨우 성공한 최신 방법을 소개한다.


<주의> 지금부터 가상환경은 계속 켜놓고 진행한다.


 

1. main.py( 또는 프로그램 진입점이라고 할 수 있는 파일 )에서 PORT 설정하기

자신이 가진 최상위 루트 <<py>>파일에 다음을 입력하자.

// 아직 os 모듈을 쓰지 않았다면 꼭 추가해주기
import os
// 난 여기서 처음에 __name__ 가 아니라 아무말이나 썼었는데,
// 밑에 app.run() 실행 시 if 분기문과 맞추기 위해 __name__으로 바꿨다.
app = Flask(__name__)

// @app.route("/")를
// 비롯한
// 각종
// 함수들이
// 즐비

if __name__ == "__main__":
  port = int(os.environ.get("PORT", 5000")
  app.run(host="0.0.0.0", port=port)

 

2. gunicorn 설치

Heroku는 flask를 바로 인식 못해서 gunicorn을 거쳐가야 한다.

<<터미널>>에 다음을 입력하자.

pip install gunicorn
// 또는 pip3 install gunicorn

 

 

3. Procfile 만들기 ( 이 파일은 확장자도 없고 "."도 하나 없다. 심지어 P는 대문자다. )

우선 최상위 루트에 Procfile을 만들자. <<터미널>>에 다음을 입력하거나,  에디터에서 직접 파일을 생성해도 된다.

touch Procfile

Procfile은 내가 공들여 만든 코드들이 서버에서 작동할 수 있도록, Heroku에게 프로그램 진입점을 알려주는 역할을 한다.

마치 로컬에서 실행할 때, python main.py를 입력하는 것을 서버에게 위임하는 것이라고 생각하면 된다.

<<Procfile>>파일을 만들었다면, 그 안에 다음을 입력하자.

web: gunicorn main:app --bind 0.0.0.0:${PORT}

 

 

주의사항 1 : 내 python 파일 중 프로그램 진입점(ex. main 함수 포함하는 파일)이 있는 파일:app ☜ 이렇게 쓸 것

주의사항 2 : main:app 사이에는 띄어쓰기 절대 하지 말 것

Build만 succeeded이지, 페이지 로딩이 안될 것이다.

 

여기서 많은 글, 심지어 해외 포스팅이 나를 힘들게 했다. 사람들이 app.run() 부분의 코드를 app.py파일안에 따로 넣어놨는지 어쨌는지, main.py가 아닌 app.py로 이름을 지어놓았기 때문에 [web: gunicorn app: app] 이렇게 해놓아서 뭐가 key이고 뭐가 value인지 헷갈렸기 때문이다. 그리고 그런 글들은 보통 최소 몇개월 전에 작성되었다. 결론은 2020년 6월기준, 위에처럼 쓰자.

 

4. runtime.txt 만들기 : Heroku에게 python 버전을 알려주는 것

runtime.txt를 만들고, 그 파일 안에 다음 한 줄만 쓰고 저장한다.

<<runtime.txt>>에 다음을 입력하자.

python-3.8.3

 

5. pip freeze 하기 : 내가 코딩하면서 이것저것 다운받았던 pip 모듈들 포장해서 Heroku에게 알려주기

다음 코드를 입력하면 requirements.txt를 자동으로 만들어 준다.

<<터미널>>에 다음을 입력하자.

pip freeze > requirements.txt

 

6. main.py( 또는 프로그램 진입점이라고 할 수 있는 파일 )가 있는 최상위 루트에서 heroku를 위한 git 생성

이제 내가 가진 코드들과 1~4번까지 한 모든 행동들을 Heroku에게 다 떠맡기고 손 터는 과정이다.

<<터미널>>에 다음 순서대로 입력하자.

git init을 또 한다고 해서 기존 자신이 관리하던 github 로그에 아무 영향을 주지 않으니, 걱정은 하지 말자.

git init
git add .
git commit -m "Heroku~~~~"
git push heroku master

 

❤️ 축하한다. 됐다.

만약 안된다면 우리는 영어와 친숙한 사람들이기 때문에, 다음 코드를 코드를 입력하면 Heroku가 친절히 요목조목 따져가며 알려줄 것이다.

<<터미널>>에 입력하자.

heroku logs --tail

728x90
반응형