[Pill So Good] (5) Heroku, AWS EC2 배포

HY·2022년 8월 1일
0

pill-so-good

목록 보기
5/6
post-thumbnail

배포된 관리자 페이지: http://pillsogood-admin.herokuapp.com/login?returnUrl=%2F

관리자 페이지 배포

팀원들이 따로 관리자 페이지를 빌드하지 않아도 관리자 페이지를 사용할 수 있도록 Heroku에 관리자 페이지를 배포하였다.
하지만 현재 git repository에 pillsogood-server, pillsogood-admin, pillsogood-client로 세 프로젝트가 있어 그저 git을 연동하는 방식으로는 자동으로 배포 되지 않았다.
이를 해결하기 위해 https://github.com/timanovsky/subdir-heroku-buildpack을 추가하고 PROJECT_PATH를 따로 지정했다.

Heroku 설정

deploy

Heroku 앱을 생성하고, deploy 메뉴에서 github 계정을 연동한다.
그리고 github 내 repository 중 배포할 repository를 선택한다.
자동적으로 main branch가 배포되도록 선택된다.

settings

우선 Buildpacks에서 https://github.com/timanovsky/subdir-heroku-buildpack를 추가한다. 그리고 자동 빌드를 위해 heroku/nodejs 빌드 팩을 추가한다.
현재 root 하단에 관리자 페이지 프로젝트가 포함되어 있기 때문에,PROJECT_PATHpillsogood-admin config vars를 추가한다.

시연

서버 배포

Heroku에서 관리자 페이지를 배포했을 때 정상적으로 배포되었기 때문에 API 서버도 Heroku에서 배포하려고 시도했다.
하지만 Heroku에서는 서버 포트를 임의로 지정하기 때문에 Heroku에 API 서버를 배포할 경우 클라이언트에서 데이터 요청을 할 수가 없었다.
그래서 AWS EC2에 서버를 배포하였다.
프리 티어를 사용할 수 있었기 때문에 프리 티어로 디폴트 설정인 인스턴스를 생성하였다.

보안 그룹 설정

클라이언트에서 GraphQL API를 요청할 수 있도록 4000 포트를 인바운드 규칙에 추가하였다.

PM2를 사용한 무중단 서비스

인스턴스에 접속하여 서버를 실행하자 정상적으로 동작하였다. 하지만 접속한 쉘을 종료하자 서버도 다운되었다. 서비스를 위해 컴퓨터를 켜놓을 수는 없고, 쉘이 종료된 뒤에도 서비스가 실행되도록 PM2를 사용하였다.
PM2는 Node.js 어플리케이션을 쉽게 관리할 수 있게 해주는 Process Manager이다. Node.js 어플리케이션을 cluster mode 로 실행시킨다거나, 메모리가 넘친다거나, 오류로 인해 프로세스가 종료되는 등의 상황에 직면했을 때 각각의 상황을 사용자가 모두 신경 써서 처리해줄 수도 있지만, 너무 복잡하고 신경 써야 할 일들이 많아진다.
npm으로 pm2를 설치하고, pm2 start npm — dev를 실행하여 서버를 가동했다.

pm2 ls를 통해 서버가 online 상태인 것을 확인할 수 있다.

참고 문헌

https://www.realpythonproject.com/how-to-setup-automated-deployment-for-multiple-apps-under-a-single-github-repository-in-heroku/
https://aws.amazon.com/ko/ec2/getting-started/
https://armadillo-dev.github.io/javascript/nodejs/node-js-pm2/
https://engineering.linecorp.com/ko/blog/pm2-nodejs/#PM2%EB%A5%BC%ED%99%9C%EC%9A%A9%ED%95%9CNode.js%EB%AC%B4%EC%A4%91%EB%8B%A8%EC%84%9C%EB%B9%84%EC%8A%A4%ED%95%98%EA%B8%B0-%EC%84%9C%EB%B9%84%EC%8A%A4%EC%9A%B4%EC%98%81%ED%95%98%EA%B8%B0

profile
사실은 공부를 비밀스럽게 하고 싶었다

0개의 댓글