AWS EC2 + API Gateway + Node Express + Postgresql 로 백엔드 배포하기

버들비·2021년 7월 16일
0

1. EC2 설정하기

  1. AWS ec2 콘솔에서 인스턴스 시작을 클릭. 우분투 64비트 x86 LTS 서버를 선택.

  1. 설정은 다른거 건들 필요없고, 보안그룹 편집으로 포트번호를 추가해줌. 0.0.0.0 은 모든 ip 에서 접속을 허용한다는 것인데, 일단은 그대로 둘것임. SSH와 HTTP, HTTPS에 더해, 난 서버에서 8천번 포트를 사용할 것이기에 사용자 지정 TCP 로 8000 포트를 추가해줬다.

  1. 인스턴스를 생성하려면 키페어 파일(.pem) 파일이 필요하다. 없으면 새로 생성. 이 .pem 파일은 ssh 로 ec2 컴퓨터에 원격접속할때마다 필요한 것이므로 유출되지 않게 잘 보관해야 한다.

  2. EC2 인스턴스를 생성한뒤 탄력적 IP 를 인스턴스에 부여해 줄것이다. EC2 인스턴스는 껐다 켜질때마다 IP 가 새로 생기는데, 이런 바뀌는 IP에 대해 탄력적으로 대응하고, 사용자에게는 고정적인 IP 를 제공하는 탄력적 IP를 부여해 줄것이다.
    EC2 콘솔 사이드메뉴의 네트워크 보안 탭-> 탄력적 IP 를 선택.
    탄력적 IP 할당 버튼 클릭. 별다른 설정 건들지 말고 생성.

  1. 탄력적 IP 를 인스턴스와 연결

  1. 탄력적 IP 를 연결했으면 해당 탄력적 IP로 SSH 접속을 해본다. 첫 접속이면 yes 해준다.

  1. ssh 로 ec2 우분투 컴퓨터에 접속됐으면 업데이트부터 하란다. sudo apt update 해준다.

  2. 그외에 필요한것들을 설치할 것이다. nodejs랑, npm이랑, pm2랑, postgresql 설치하고 환경설정할 것이다.

sudo apt-get install nodejs
sudo apt-get install npm
입력하면 다른 필수 패키지도 같이 설치할거냐 묻는데 Y 해주면 된다. 설치 이후엔 nodejs --version 으로 설치됐는지 체크해준다.
pm2 는 노드 서버를 백그라운드에서 실행되게 하고 모니터링, 멀티코어 컴퓨팅 등을 도와주는 npm 패키지이다. 글로벌로 설치해 준다.
sudo npm install -g pm2

그다음엔 postgresql 설치
sudo apt-get install postgresql postgresql-contrib

postgresql 은 설치하면 기본 사용자 postgres 가 생성된다.
sudo -i -u postgres psql
명령어를 입력하면, postgres 라는 사용자로 postgresql 을 실행한다.

psql 실행 상태에서, postgres 사용자의 비밀번호 바꾸는 명령어
ALTER ROLE postgres WITH PASSWORD 'your-password'

참고로 리눅스 계열의 경우 postgresql의 설정파일 경로는 /etc/postgresql//main 에 있다.

git clone 저장소주소 입력해서 서버 코드를 ec2에 다운받는다. 그다음 npm install 로 패키지들을 설치하고, 환경변수 파일 .env 파일을 만들어서 적절한 환경변수를 넣어준다.

touch .env
ls -a. -a 옵션을 붙이면 숨김파일(.env 같은것)도 다 보여준다.
vim .env

그다음 서버가 8000번 포트를 입력으로 받는데, http 입력은 80번 포트이므로 80번 포트를 8000번으로 포워딩 해줘야한다. 다음 명령어를 ec2 ssh 상에서 입력

sudo iptables -t nat -L
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8000

서버 코드의 Package.json 부분의 실행 스크립트에 다음과 같은 내용을 추가한다.

"start": "cross-env NODE_ENV=production PORT=80 pm2 start index.js"

그다음 npm run start 를 하면 서버가 pm2 로 인해 백그라운드에서 돌아간다.

마지막으로 ec2 콘솔 탄력적 ip 항목으로 돌아가서, 우리가 부여한 탄력적 ip 권한의 inbound 와 outbound 설정을 수정한다. ssh, http, https 의 22, 80, 443번 포트에 더해 custom tcp 로 8000번 포트를 추가한다. 아이피는 0.0.0.0/0 으로한다.

여기까지 진행했으면 해당 탄력적 아이피 주소를 브라우저에 입력하면 서버와의 통신이 된다.

pm2 monit 을 입력하면 서버에 대한 모니터링이 가능하다. 누군가가 접속하면 로그가 뜬다.

2. API Gateway 와 EC2 연결

EC2에 https 를 적용하려면 로드밸런서를 추가하고 로드밸런서에 ssl 을 적용하고... 등등 귀찮은 과정이 많다. API gateway 랑 EC2를 연결하는게 더 편하다.

https://codethief.io/ko/awsapi-gateway와-ec2-연결하기/

API gateway는 크게 HTTP-API와 REST-API 로 나뉘는데, REST 쪽이 더 복잡하고 기능이 많다. 여기선 HTTP 를 사용할 것이다.

주의할점은 경로에서는 /{proxy+} 로 만들지만, 통합할 HTTP URI 에서는 ip주소/{proxy} 로 입력해야된다.

0개의 댓글