Programming/ETC

GCP로 node 배포하기 1. (네트워크, DNS 세팅)

Juun 2024. 7. 30. 18:14
반응형

이번 토이 프로젝트로 구글에서 제공하는 API, storage를 사용해서 간단한 서비스를 만들어 봤습니다.

구글에서 제공하는 서비스를 쓰다보니 배포 역시 AWS 보단 GCP를 사용해보기로 했습니다.

번외로 회사에서 GCP를 사용해서 겸사겸사 해보면 좋을거 같다는 생각도 했습니다.

 

1. GCP 접속

GCP > Compute Engine > VM 인스턴스 > 인스턴스 만들기

 

 

2. 인스턴스 만들기

본인의 사양에 맞게 머신 구성

저는 제일 저렴한 지역과 머신으로 선택했습니다.

액세스 할 서비스 계정을 설정하고 방화벽은 HTTP/ HTTPS 트래픽 허용

 

 

3. 프로젝트 세팅 (Git & Node)

SSH 연결을 통해 인스턴스를 실행해봅시다.

GCP는 기본적으로 git이 설치되어 있지만 확인해보기

$ git --version

// 설치가 안되어 있다면
$ sudo apt install git

 

Git으로 프로젝트 클론

$ git clone 내프로젝트 주소

 

Node 설치

프로젝트 세팅한 노드로 설치

$ sudo apt-get update
$ sudo apt-get install -y build-essential
$ sudo apt-get install curl
$ curl -sL https://deb.nodesource.com/setup_20.x | sudo -E bash --
$ sudo apt-get install -y nodejs

 

설치 잘되었는지 확인

$ node -v
$ npm -v

 

프로젝트 디렉토리에서 패키지 설치

$ npm install

 

무중단 배포를 위한 pm2 설치

$ sudo npm i pm2 --location=global

 

서버 시작하기 전에 환경 변수 세팅하고 시작해주세요~

// 본인 환경에 맞는 환경변수 세팅하기
$ vim .env
$ pm2 start app.js

이렇게 되면 정상적으로 설정 완료

 

 

4. 방화벽 규칙 만들기

4.1 서버 포트 확인

방화벽 설정하기 전에 백엔드 서버 포트 확인하기

프로젝트 app.js에서 확인 가능

저는 3000번 포트를 열어놨습니다.

인스턴스 외부ip:3000 을 통해서 접근이 가능하다는 얘기입니다.

 

TCP 포트 3000: 이 포트는 네트워크 서비스나 애플리케이션이 데이터를 송수신하는 데 사용됩니다.

예를 들어, 웹 개발에서 자주 사용하는 Node.js 서버는 기본적으로 TCP 포트 3000을 사용합니다.

 

4.2 VPC 네트워크 > 방화벽 > 방화벽 규칙 만들기

 

이름은 my-project-3000으로 설정해줬습니다.

소스 IPv4 범위는 0.0.0.0/0 모든 ip 접근을 허용해줍니다.

위에서 확인한 Node 서버 포트인 3000 번을 TCP 포트 추가해줍니다.

 

위에서 설정한 방화벽 규칙을 저희 인스턴스에 적용해봅시다.

 

GCP > Compute Engine > 생성한 VM 인스턴스 > 수정

네트워크 태그에 설정한 방화벽 규칙 추가

서버가 열렸으니 접근이 가능한지 확인

인스턴스의 외부ip:3000 접속하면 아래와 같이 접근되면 완료입니다.

4.3 고정 ip 승급

마지막으로 해당 인스턴스의 외부ip 고정ip로 승급시켜주면 됩니다.

고정 IP (Static IP): 고정 IP는 할당된 후에는 변경되지 않습니다. 인스턴스가 재부팅되거나 일시적으로 중지되더라도 IP 주소가 그대로 유지됩니다.

 

VPC > IP 주소

프로젝트의 인스턴스 외부 Ip인지 확인 후 고정 IP주소로 승급해주면 됩니다.

 

5. DNS 설정

DNS 설정 전에 도메인부터 구매합시다.

 

프론트엔드 서버와의 통신 시, 특정 도메인을 통해 요청을 보내는 것이 일반적입니다.

그러나 HTTP 프로토콜을 사용하는 도메인으로 요청을 보내는 경우, "Mixed Content" 오류가 발생할 수 있습니다.

이 오류는 브라우저의 보안 정책에 의해 발생하며, HTTPS를 통해 보안된 연결이 아닌 경우 브라우저에서 차단됩니다.

 

이를 방지하기 위해 SSL 인증서를 통해 도메인을 HTTPS로 설정하는 것이 중요합니다.

 

네트워크 서비스 > Cloud Domains > 도메인 등록

도메인 구매 후 Cloud DNS 설정을 해줍니다.

 

네트워크 서비스 > Cloud DNS > DNS 영역 만들기

 

영역 이름은 본인이 설정한 이름을 적고 DNS 이름은 구매한 도메인으로 설정해줍니다.

만들고 난 후 영역 세부정보로 들어갑니다.

영역 세부정보에 처음 들어가면 2가지 항목이 나올텐데 표준 추가를 추가해줍니다.

 

DNS 이름은 별도 설정 안해줘도 되고 리소스 레코드 유형은 A, IPv4 주소는 이전에 설정했던 고정 IP 주소를 넣어줍니다.

그리고 설정한 도메인:3000 를 주소창에다 입력하면 고정 IP:3000을 넣어야 접근이 가능했던걸 이제는 도메인:3000를 입력하면 접근이 가능하게 됩니다.

 

다음 포스팅은 nginx를 통한 포트포워딩과 SSL 인증에 대해 작성해보겠습니다.

반응형

'Programming > ETC' 카테고리의 다른 글

GCP로 node 배포하기 2. (HTTPS, SSL 인증 받기)  (0) 2024.07.31