Compute Engine에서 Node.js 시작하기


이 가이드에서는 Compute Engine을 시작하는 방법을 보여줍니다. 이 가이드에 따라 Hello World Node.js 웹 앱을 Compute Engine에 배포합니다. App Engine을 시작하는 데 도움이 필요하면 App Engine 표준 환경을 참조하세요.

목표

  • Cloud Shell을 사용하여 Hello World 샘플 앱을 다운로드하고 배포합니다.
  • Hello World 샘플 앱을 단일 Compute Engine 인스턴스에 배포합니다.

비용

이 문서에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.

프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요. Google Cloud를 처음 사용하는 사용자는 무료 체험판을 사용할 수 있습니다.

시작하기 전에

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Compute Engine API.

    Enable the API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Compute Engine API.

    Enable the API

  8. Google Cloud 콘솔의 Cloud Shell에서 앱을 엽니다.

    Cloud Shell로 이동

    Cloud Shell을 사용하면 브라우저에서 직접 명령줄을 통해 클라우드 리소스에 액세스할 수 있습니다.

  9. 저장소를 클론하는 데 동의하면 확인을 클릭하여 샘플 코드를 다운로드하고 앱 디렉터리로 변경합니다.

  10. 새 Google Cloud 프로젝트를 사용하도록 Cloud Shell에서 gcloud CLI를 구성합니다.
    # Configure gcloud for your project
    gcloud config set project YOUR_PROJECT_ID

Cloud Shell에서 앱 실행

이전 섹션에서 Cloud Shell로 이동을 클릭한 경우 Cloud Shell에서 nodejs-getting-started 저장소를 인스턴스에 클론했습니다. 인스턴스가 시작된 후의 작업 디렉터리는 ~/cloudshell_open/nodejs-getting-started/gce입니다. 이 디렉터리에 없으면 시작하기 전에 단계를 참조하세요.

  1. 종속 항목을 설치합니다.

    npm install
    
  2. 앱을 실행합니다.

    npm start
    
  3. Cloud Shell에서 웹 미리보기 를 클릭하고 포트 8080에서 미리보기를 선택합니다. 그러면 실행 중인 앱이 표시된 새 창이 열립니다.

로컬 웹 서버를 중지하려면 Control+C를 누릅니다.

Cloud Source Repositories 설정

  1. Cloud Source Repositories API를 사용 설정합니다.

    Cloud Source Repositories API 사용 설정

  2. Google Cloud Console에서 Cloud Source Repositories로 이동합니다.

    Cloud Source Repositories로 이동

  3. 저장소 추가를 선택합니다.

    저장소 추가를 선택합니다.

  4. 새 저장소 만들기를 선택하고 계속을 클릭합니다.

  5. 저장소 이름 필드에 new-repo를 입력합니다.

  6. 프로젝트 필드에 이 가이드에서 만들거나 선택한 프로젝트의 프로젝트 ID를 입력한 다음 계속을 클릭합니다.

  7. 저장소를 로컬 Git 저장소로 클론을 선택합니다.

  8. Cloud Shell에서 루트로 돌아가 Google Cloud SDK 탭의 안내에 따라 저장소를 클론하고 이 탭을 열린 상태로 둡니다.

    안내에 따라 저장소 저장소를 로컬 Git 저장소로 클론합니다.

  9. 안내 아래의 마지막 단계를 완료하기 전에 앱을 Cloud Shell의 새 저장소에 복사합니다.

    cd new-repo
    cp ../cloudshell_open/nodejs-getting-started/gce/app.js app.js
    cp ../cloudshell_open/nodejs-getting-started/gce/package.json package.json
  10. Google Cloud SDK 탭의 다음 안내에 따라 저장소에 변경사항을 커밋합니다. 브라우저를 새로고침하고 코드가 저장소 new-repo에 추가되었는지 확인하여 코드를 저장소에 추가했는지 확인합니다.

단일 인스턴스에 배포

이 섹션에서는 Compute Engine에서 앱의 단일 인스턴스 실행을 단계별로 알아봅니다.

단일 인스턴스 배포

Cloud Shell에서 앱을 실행하는 단일 Compute Engine 인스턴스 가상 머신(VM)에 배포할 수 있습니다.

시작 스크립트를 사용하여 인스턴스 초기화

인스턴스에서 코드를 다운로드하고 실행하도록 지시할 방법이 필요합니다. 인스턴스를 시작하거나 재시작할 때마다 실행되는 시작 스크립트를 인스턴스에 포함하면 됩니다.

다음은 Hello World 샘플 앱에 포함된 시작 스크립트입니다.

set -v

# Talk to the metadata server to get the project id
PROJECTID=$(curl -s "http://metadata.google.internal/computeMetadata/v1/project/project-id" -H "Metadata-Flavor: Google")
REPOSITORY="new-repo"

# Install logging monitor. The monitor will automatically pick up logs sent to
# syslog.
curl -s "https://storage.googleapis.com/signals-agents/logging/google-fluentd-install.sh" | bash
service google-fluentd restart &

# Install dependencies from apt
apt-get update
apt-get install -yq ca-certificates git build-essential supervisor

# Install nodejs
mkdir /opt/nodejs
curl https://nodejs.org/dist/v16.15.0/node-v16.15.0-linux-x64.tar.gz | tar xvzf - -C /opt/nodejs --strip-components=1
ln -s /opt/nodejs/bin/node /usr/bin/node
ln -s /opt/nodejs/bin/npm /usr/bin/npm

# Get the application source code from the Google Cloud Repository.
# git requires $HOME and it's not set during the startup script.
export HOME=/root
git config --global credential.helper gcloud.sh
git clone https://source.developers.google.com/p/${PROJECTID}/r/${REPOSITORY} /opt/app/new-repo

# Install app dependencies
cd /opt/app/new-repo
npm install

# Create a nodeapp user. The application will run as this user.
useradd -m -d /home/nodeapp nodeapp
chown -R nodeapp:nodeapp /opt/app

# Configure supervisor to run the node app.
cat >/etc/supervisor/conf.d/node-app.conf << EOF
[program:nodeapp]
directory=/opt/app/new-repo
command=npm start
autostart=true
autorestart=true
user=nodeapp
environment=HOME="/home/nodeapp",USER="nodeapp",NODE_ENV="production"
stdout_logfile=syslog
stderr_logfile=syslog
EOF

supervisorctl reread
supervisorctl update

# Application should now be running under supervisor

시작 스크립트는 다음과 같은 작업을 수행합니다.

  • Cloud Logging 에이전트를 설치합니다. 에이전트는 syslog에서 자동으로 로그를 수집합니다.

  • 앱을 데몬으로 실행하기 위해 Supervisor를 설치합니다.

  • Cloud Source Repositories에서 앱의 소스 코드를 클론하고 종속 항목을 설치합니다.

  • 앱을 실행하도록 Supervisor를 구성합니다. Supervisor는 앱이 예기치 않게 종료되거나 관리자 또는 다른 프로세스에 의해 종료된 경우 앱이 다시 시작되게 만듭니다. 또한 앱의 stdoutstderr을 syslog로 보내서 Logging 에이전트가 이를 수집하도록 합니다.

Compute Engine 인스턴스 만들기 및 구성

  1. Compute Engine 인스턴스를 만듭니다.

    Linux/macOS

    gcloud compute instances create my-app-instance \
        --image-family=debian-9 \
        --image-project=debian-cloud \
        --machine-type=g1-small \
        --scopes userinfo-email,cloud-platform \
        --metadata app-location=us-central1-f \
        --metadata-from-file startup-script=gce/startup-script.sh \
        --zone us-central1-f \
        --tags http-server
    

    Windows

    gcloud compute instances create my-app-instance ^
        --image-family=debian-9 ^
        --image-project=debian-cloud ^
        --machine-type=g1-small ^
        --scopes userinfo-email,cloud-platform ^
        --metadata-from-file startup-script=gce/startup-script.sh ^
        --zone us-central1-f ^
        --tags http-server
    

    영역을 개발 영역으로 바꿉니다(예시: us-central1-a). 리전 및 영역에 대한 자세한 내용은 지역 및 리전을 참조하세요.

    그러면 새 인스턴스가 생성되고, 인스턴스가 Google Cloud 서비스에 액세스하도록 허용되고, 시작 스크립트가 실행됩니다. 인스턴스 이름은 my-app-instance입니다.

  2. 인스턴스 생성의 진행 상황을 확인합니다.

    gcloud compute instances get-serial-port-output my-app-instance --zone YOUR_ZONE
    

    YOUR_ZONE을 인스턴스가 배포된 영역으로 바꿉니다.

    시작 스크립트가 완료되면 다음 메시지가 표시됩니다.

    startup-script: INFO Finished running startup scripts.
    
  3. 인스턴스에 대한 트래픽을 허용하도록 방화벽 규칙을 만듭니다.

    gcloud compute firewall-rules create default-allow-http-8080 \
        --allow tcp:8080 \
        --source-ranges 0.0.0.0/0 \
        --target-tags http-server \
        --description "Allow port 8080 access to http-server"
    

  4. 인스턴스의 외부 IP 주소를 가져옵니다.

    gcloud compute instances list
    
  5. 앱 실행을 확인하려면 브라우저에 다음 URL을 입력합니다.

    http://YOUR_INSTANCE_IP:8080
    

    YOUR_INSTANCE_IP를 인스턴스의 외부 IP 주소로 바꿉니다.

인스턴스 관리 및 모니터링

GCP Console을 사용하여 인스턴스를 모니터링하고 관리할 수 있습니다.

  1. In the Google Cloud console, go to the VM instances page.

    Go to VM instances

  2. In the list of virtual machine instances, click SSH in the row of the instance that you want to connect to.
  3. Compute Engine 리소스에서 생성한 모든 로그를 보려면 로그 탐색기 페이지로 이동합니다. 로그 탐색기로 이동

    Cloud Logging이 자동으로 구성되어 syslog를 포함한 다양한 공통 서비스의 로그를 수집합니다.

삭제

이 튜토리얼에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트를 유지하고 개별 리소스를 삭제하세요.

프로젝트 삭제

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

개별 리소스 삭제

gcloud compute instances delete my-app-instance --zone=YOUR_ZONE --delete-disks=all
gcloud compute firewall-rules delete default-allow-http-8080

다음 단계