배포, Heroku, WSGI, 대시보드, Metabase
requirements.txt
, Procfile
, 그리고 내가 작성한 코드만 push 해주면 Heroku에서 알아서 코드를 해석하고, 공유할 수 있는 도메인까지 넘겨준다. 되게 편한거지~add-ons
라는 페이지가 있는데, 여기서 여러 DB를 연결할 수도 있다고 한다. 아직 직접 해보지는 못 했다.아래 내용을 참고하자. 오늘 웜업 영상에서 봤던 거다.
AWS EC2
vs Heroku
뭘 써야할까? 선택하는 기준은? (출처)Heroku = Platform as a Service
/ AWS EC2 = Infrastructure as a Service
로 생각하면 된다.Heroku
: 작성한 코드만 push하면 히로쿠에서 알아서 해석하고 도메인 이름도 주고 다 해준다. 그런 의미에서 플랫폼이라고 하는 거다.AWS EC2
: 인프라를 위한 비용을 지불하는 것인데, 여기서 인프라란 서버를 말한다. 즉, 그 안에 뭘 설치하고 등등 다 내가 알아서 해야한다는 얘기다.AWS EB
를 출시했는데, 히로쿠보다 저렴하고 비교적 빠르기 때문에 히로쿠 대신 AWS EB
를 선택할 수도 있다고 한다. 다만, 아직은 히로쿠가 더 빠르고 사용하기 쉽다고 한다.참고로 install 해줘야 한다~
$ heroku login
: 입력하면 히로쿠 사이트로 연결되며 로그인을 하면 CLI을 사용할 수 있도록 인증이 된다.$ heroku apps
: 계정 내에 등록된 앱들의 목록을 볼 수 있다. 5개까진가? 이후부터는 유료로 넘어간다고 한다. $ heroku create app_name
: 로컬에서 개발했던 앱을 등록하기 위해 히로쿠에 앱을 만들 수 있다. $ git push heroku main
: 작업한 코드가 변경되면 git add와 commit을 해주고 히로쿠로 푸시를 해줘야 반영이 된다. Heroku
가 무엇이고 어떨 때 쓰는지만 알고 넘어가면 되고, Heroku
를 통한 배포 과정은 아래 실습 부분에 자세히 적어두겠다.어떤 과정으로 우리가 배포한 어플리케이션이 왔다갔다 하는지도 공부했다.
Web Server Gateway Interface
의 약자로 '위스키'라고 부르곤 한다고 한다. 서버의 3계층(3-tier Architecture)라고
한다고 함.gunicorn
이었다.pre-fork worker
모델이라고 한다. 파이썬에서 어떤 애플리케이션이나 프레임워크가 주어지게 되면 사전에 '포킹'을 한 뒤에 worker 를 통해 작업을 실행합니다.
라고 하는데.. 정확히 무슨 말인지는 잘 모르겠다. (오늘은 제출해야할 과제는 없었다.)
어제 작업했던 flask 어플리케이션 폴더를 복제해서 Heroku를 통해 배포하는 걸 해보았는데, 아예 프로젝트 폴더 만드는 것부터 완전 새롭게 해보고 싶어서 다시 과정을 하나하나 밟아보았고, 그걸 기록해둔다. 나중에 와서 보면 바로 할 수 있게~!
[flask 프로젝트 폴더 생성 및 가상환경 세팅]
herokutest/my_app
_init__.py
파일 생성.$ conda create -n herokutest
$ pip install flask
, $ pip install gunicorn
$ pip freeze
로 설치 잘 되었는지 확인했다. __init__.py
에 기본 내용 기입.# 필요한 패키지 import
from flask import Flask, render_template #render_tamplate은 뒤에서 html 파일 내용 가져와서 할거라 미리 기입해둠.
def create_app():
app = Flask(__name__)
@app.route('/')
def index():
return "Hello World!"
return app
if __name__ == "__main__":
app = creat_app()
app.run(debug=True)
$ FLASK_APP=my_app flask run
=> 확인 완료[Heroku 앱 생성하기]
$ heroku login
을 통해 인증을 해둔 상태라 해당 과정은 생략함)$ heroku create app_name
(앱 실제 이름은 적지 않겠다)heroku apps:info --app app_name
을 통해 확인할 수 있다. (경우에 따라 heroku apps:info
만 해도 나올 수 있음)근데 그 전에 할게 있지!
[requirements.txt, Profile 생성하기]
my_app
폴더와 동일한 디렉토리에 위치해야 한다.requirements.txt
생성하기: $ pip freeze > requirements.txt
requirements.txt
파일 들어가서 gunicorn
잘 들어가 있는지 확인했고(없으면 직접 넣어야 함), Pytest 관련 지금 쓸데없는 건 리스트에서 제거해주었다. 이상 없다!Procfile
생성: $ touch Procfile
Procfile
들어가서 내용 기입web: gunicorn --workers=1 'my_app:create_app()'
[Heroku에 배포하기]
$ git init
Initialized empty Git repository in {경로}
메시지 확인 가능함.$ git remote add heroku {아까 확인한 git url}
$ git add .
, $ git commit -m 'my first commit'
, $ git push heroku master
이러면 배포가 된거다. 배포가 되었다는 건, 도메인을 다른 사람이 들어와도 똑같은 화면이 보인다는 거다.
git add, commit push
하면서 수정사항 히로쿠에 반영해주면 됨.끝~~ 쫄지마 쫄지마!
- Metabase는 원래 내일 실습해보려고 했는데, heroku 실습하고 생각보다 에너지가 많이 남아있어서 해본다.
- metabase에서 만든 대시보드를 웹 어플리케이션에 임베딩하는 것까지 해볼 예정이다.
1. Metabase 설치하기(docker이용)
-d
는 백그라운드에서 돌아가도록 하는 거라 빼고 돌렸다.localhost:3000
에 접속하면 내 metabase를 사용할 수 있다. 2. metabase에 db 연결하기
Add your data
화면이 나온다.chinook.db
를 써볼거다. 그래서 sqlite를 선택을 하면 아래와 같은 화면이 나온다.Filename
을 채우기 전에, 실행 중인 metabase docker에다가 chinook.db
를 넘겨줄거다. ls
를 한 번 봐보자. 터미널에서 docker 컨테이너 안으로 들어가려면 다음 명령어 쓰면 된다. $ docker exec -it metabase /bin/bash
/app
에 db 파일을 넘겨주기로 했다.chinook.db
가 들어있는 디렉토리로 변경을 해준다음에 docker cp 명령 수행! $ docker cp ./chinook.db metabase:/app
Filename
쓰는 곳에 /app/chinook.db
를 입력하면 끝![간단히 대시보드 만들어보기]
[내 웹 어플리케이션에 대시보드 임베딩하기!]
오늘 내가 metabase를 하게 만든 이유! 원인! 한번 가보자~!
(참고 - 임베딩 안내문서)
templates
폴더를 새로 만들고 그 안에 index.html
파일을 만들어주었다. 그리고 아까__init__.py
에 만들었던 index route에 render_template('index.html')
해줌. [Trouble Shooting]