개요
JavaScript(Node.js) 와 Python으로 작성한 코드를 Heroku에 하나의 App으로 배포하고자 합니다.
로컬에서 실행할 때와 달리 Heroku만을 위하여 조금 설정할 내용이 있어 해당 내용을 작성합니다.
Requirement 추가
Node.js도 그렇지만 파이썬 코드를 실행하려면 스크립트에서 import
한 많은 의존성 패키지들을 사전에 설치해주어야 스크립트가 배포된 환경에서도 정상 실행됩니다.
Node.js 앱은 Heroku에 배포시 프로젝트에 포함되어 있는 package.json
파일의 내용에 따라 의존성이 있는 패키지들을 Heroku가 설치해 줍니다. 파이썬 역시 동일한 방식으로 동작하는데, 이 때 사용되는 파일은 requirements.txt
라는 텍스트 파일입니다. 여기에 스크립트가 실행되는데 필요한 모듈의 이름과 버전 등을 기입하면 Heroku에서 이것을 기반으로 실행 환경을 조성해줍니다.
텍스트 파일이므로 직접 작성할 수 있지만 일반적으로 의존성등이 복잡한 스크립트는 실수가 있을 수 있기 때문에 다음과 같이 간단히 명령을 사용하여 현재 설치되어 있는 패키지의 정보가 포함된 requirements.txt
를 작성할 수 있습니다.
$ pip3 freeze > requirements.txt
※ 가상환경을 조성하여 필요한 의존성 패키지만 설치될 수 있도록 하는 것이 더 깔끔합니다.
requirements.txt
에 대한 검증은 다음 명령을 사용합니다. requirements.txt
를 바탕으로 모듈들을 설치하는 것입니다. 이 단계에서 특별히 오류가 발생하지 않는다면 이제 Heroku에 배포할 준비가 된 것입니다.
$ pip3 install -r requirements.txt
참고로 제 경우 다음과 같은 오류가 발생하였는데, 해당 라인(pkg-resources==0.0.0
)을 삭제하여 해결하였습니다.
Could not find a version that satisfies the requirement pkg-resources==0.0.0
Buildpacks 추가
이제 Node.js 와 Python 스크립트가 각각 package.json
과 requirements.txt
를 바탕으로 환경을 조성하도록 Heroku의 buildpacks을 설정합니다.
제 경우 기존에 Node.js를 사용하고 있었기 때문에 현재 buildpacks를 확인해보면 nodejs가 설정되어 있는 것을 확인 할 수 있습니다.
$ heroku buildpacks
=== iceshed-cream-45045 Buildpack URL heroku/nodejs
python 스크립트를 위한 buildpacks을 다음과 같이 추가합니다.
$ heroku buildpacks:add heroku/python
Procfile 생성
여기에 추가로 Node.js App만 단일로 사용시 요구되지 않던 Heroku의 Procfile이 python BuildPack을 추가함으로써 요구됩니다. Procfile 은 Heroku의 Buildpacks 이 스크립트 실행환경을 구성한 후, 어떤 앱을 어떤 방식으로 실행할 것인지 설정하는 것입니다. 여기서는 JavaScript (Node.js) 와 Python 으로 작성한 두개의 스크립트 중 무엇을 어떤 방식으로 실행할 것인지를 지정하는 것입니다.
저는 Node.js에서 동작하는 express프로그램이 메인 프로그램이므로 다음과 같이 내용을 작성하였습니다.
web: npm start
web은 heroku에서 제공하는 가상 프로세스 종류입니다. 저는 앞서 기술한 것처럼 외부의 http요청을 기준으로 스크래핑을 수행하도록 하고자 하였기에 해당 프로세스를 선택하였습니다.
그리고 여기에서 npm start라는 node.js 앱 실행을 위한 명령어를 수행하도록 설정하였습니다.
배포
이제 완성한 코드를 Heroku에 배포합니다.
$ git push heroku master
참고
'개발도구 > 기타' 카테고리의 다른 글
[Ubuntu] 구버전 gcc, g++ 설치 및 기본버전 선택 (0) | 2021.04.17 |
---|---|
[Makefile] Warning: File 'FileName' has modification time 47475481 s in the future (0) | 2021.04.17 |
[Node.js] 외부프로그램 (파이썬 스크립트) 실행하기 (0) | 2020.11.26 |
[ESLint] 시작하기 (0) | 2020.11.15 |
[Vim] 사용 예시 (0) | 2020.11.12 |