1차 프로젝트와는 달리 이번에는 헤로쿠를 활용해서 서버와 DB 배포를 진행하기로 하였다.
그 이유에 대해서는 아래의 링크를 참고하여 결정하였다.
또한, flask 로 서버 구축을 한다는 특성상, 헤로쿠를 통한 배포가 좀 더 효율적인 것 같다는 결론을 내렸다.
이와 관련된 이야기는 블로그 내에 정리해두었으니 참고!
hazel-developer.tistory.com/31?category=816054
heroku 배포하기 첫번째 방법
-> 내가 작업하는 git repo의 특정 branch에 pull/ merge 되면 자동 배포되도록
처음에 아래 두번째 방법대로 하는데 자꾸 push failed가 떴다.
가상환경을 맞추다 보니 다양한 빌드팩들(모듈)을 맞추는 과정에서 발생하는 에러 같은데, 도저히 해결이 안돼서
헤로쿠 사이트를 뒤지다가 좋은 방법을 찾았다!
1. flask 배포에 필요한 gunicorn 설치
pip3 install gunicorn
2. 서버에 올리지 않을 파일들을 .gitignore에 기재해준다
3. 가상환경 활성화 시킨 후에, 해당 프로젝트에 필요한 패키지를 명시하는 requirements.txt 파일을 생성한다.
$ touch requirements.txt
$ pip freeze > requirements.txt
4. procfile 생성해주기
: 서버파일을 명시해주는 파일이다. 해당 파일 내에 아래의 코드를 기재한다.
: 해당 파일은 어떤 확장자도 없이 Procfile 이다.
web: gunicorn "내가 서버 메인파일로 지정한 파일명":app
5. 헤로쿠 회원가입 후에 다시 프로젝트 파일로 돌아와서, 헤로쿠를 설치하고 명령어를 통해 로그인한다
brew install heroku/brew/heroku
git init
heroku login
heroku create 명령어를 입력하면 도메인 주소가 생성
6. 빌드팩 설치하기
: 헤로쿠의 서버 가상환경을 나의 가상환경과 조건을 맞춰주는 것이다. 즉 내가 파이썬을 기반으로 작업하면 헤로쿠의 가상 서버도 파이썬으로 맞춰줘야 하는데 이것이 빌드팩을 설치하는 것이다.
1) 터미널 명령어로 빌드팩 설치하기 : heroku buildpacks:set heroku/python(나는 파이썬이라 파이썬인데, node면 nodejs 등 나에게 맞는 명령어로 시행)
2) 헤로쿠 사이트에서 직접하기
-> 나의 서버 앱에 들어가서 settings 탭에 가면, 하단과 같은 화면이 뜨고, 아래에 buildpacks을 확인할 수 있다.
-> 여기서 add buildpack을 클릭해서 나의 가상환경에 맞는 언어를 선택해서 설치하면 된다,
=> 1번부터 5번까지는 터미널 명령어로 push 하는 아래의 두번째 방법과 동일하다.
6. 로그인을 완료하고 heroku 사이트에 들어가서 내 개인 dashboard를 확인해보자
위와 같이 heroku create를 통해 만들어진 나의 "앱" 즉 서버가 있을 것이다. 이것을 클릭해보자
7. deploy 탭을 들어가면 아래와 같은 화면이 뜨고, 더 아래에 git 과 connect 하겠냐는 명령어가 뜬다.
8. 연결한다고 하면, 나의 깃 아이디로 로그인이 되면서 연동이 되고, 다음에는 어느 repo와 연동할 것인지 물어본다.
내가 진행하려는 프로젝트 레포를 검색해서 찾아낸 다음
내가 배포를 진행하려는 branch를 설정해준다.
-> 나는 이 기능이 제일 좋았다. 배포를 위한 브랜치를 따로 만들어두고, 배포 시도하고자 할때는 해당 브랜치에 pull혹은 push만해도 자동 배포가 되더라!
9. 캐시가 너무 큰 경우에 size 에러가 뜰 수 있다.
이런경우에는 해당 사이트에 들어가서 해결책을 참고!
-> 요약하자면,
1) gitignore 처럼 .slugignore 파일을 만들어서, 진짜 배포에 필요한 파일들이 아니면 배포가 안되도록 담아두자
2) $ heroku plugins:install heroku-builds
$ heroku builds:cache:purge
-> 위의 두 명령어를 실행하자
-> 그래도 안된다면? 내가 가지고 있는 모듈들 자체의 데이터가 문제인 것이다.
stack overflow의 해당글을 참고하니까 tensorflow는 자체 GPU를 쓸수없는 용량이 큰 모듈이라서 배포시에 올리는 것이 문제라 했고, 해당 모듈을 requirement.txt에서 지웠다.
heroku 배포하기 두번째 방법
heroku공식홈페이지를 보면서 조금 수정
1. flask 배포에 필요한 gunicorn 설치
pip3 install gunicorn
2. 서버에 올리지 않을 파일들을 .gitignore에 기재해준다
3. 가상환경 활성화 시킨 후에, 해당 프로젝트에 필요한 패키지를 명시하는 requirements.txt 파일을 생성한다.
$ touch requirements.txt
$ pip freeze > requirements.txt
4. procfile 생성해주기
: 서버파일을 명시해주는 파일이다. 해당 파일 내에 아래의 코드를 기재한다.
: 해당 파일은 어떤 확장자도 없이 Procfile 이다.
web: gunicorn "내가 서버 메인파일로 지정한 파일명":app
5. 헤로쿠 회원가입 후에 다시 프로젝트 파일로 돌아와서, 헤로쿠를 설치하고 명령어를 통해 로그인한다
brew install heroku/brew/heroku
git init
heroku login
6. 프로젝트가 있는 파일 위치에서 heroku create 명령어를 입력하면 도메인 주소가 생성되고,
옆의 깃 주소가 프로젝트 파일들 저장한 깃 주소이다.
-> 해당 깃주소를 remote add 한다,
7. 서버 파일 수정때마다 헤로쿠 서버에 파일 올리는 방법
git add .
git commit -m
git push heroku main
내가 다른 브랜치에 작업을 하고 heroku의 master 브랜치에 push 하고 싶다면
git push heroku 내가만든브랜치:main
git push -f heroku 내가만든브랜치:main
-> 이때 가상환경으로 인해 패키지 설치가 안된다는 에러가 뜨는 경우가 있다. 이럴때는 requirement.txt를 확인해보자.
다른 모듈들은 버전이 기재되어있는데, 생뚱맞게 파일 경로가 기재되어있는 경우가 있을 것이다.
이런 경우, 로컬에 제대로 해당 모듈이 설치가 안되어 있는 경우? 혹은 버전이 잘못 freeze 되어서 전달된 경우이다.
따라서 로컬에 해당 모듈을 다시 설치 혹은 버전 확인을 해주고 수동으로 기재해주자.
헤로쿠 실행 관련 명령어
heroku open : 서버 실행 확인
heroku ps:stop run.1 : 서버 실행 종료
heroku apps : 헤로쿠 서버 실행
heroku ps: scale web=1 : 서버 scale up
heroku ps: scale web=0 : 서버 scale down
heroku ps : 상태확인
https://stackoverflow.com/questions/25834500/push-different-branch-to-heroku/25834522
'DevOps' 카테고리의 다른 글
Deploy Strategy 정리 (0) | 2021.01.06 |
---|---|
Deploy - AWS EC2 Instance 구축하기 (0) | 2021.01.05 |
heroku pipeline (0) | 2020.12.17 |
Web server - apache vs NginX (0) | 2020.11.20 |
Heroku mysql DB 생성해주기 (0) | 2020.11.10 |