Node.js Deployment and Management

서버 환경 설정 (Server Environment Setup)

Node.js 애플리케이션을 배포하려면 서버 환경을 올바르게 설정하는 것이 중요합니다. 이 단계에는 Linux 환경 구성과 보안 설정이 포함됩니다.

Linux 환경 구성 (Configuring Linux Environment)

  1. 서버 접근 및 패키지 업데이트: 서버에 SSH로 접근한 후, 패키지를 업데이트합니다.
   sudo apt update
   sudo apt upgrade
  1. Node.js 및 npm 설치: Node.js의 공식 PPA를 추가하고 Node.js 및 npm을 설치합니다.
   curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
   sudo apt install -y nodejs
  1. 필수 도구 설치: Git과 pm2를 설치합니다.
   sudo apt install -y git
   sudo npm install -g pm2

pm2는 Node.js 애플리케이션의 프로세스 관리 및 클러스터링을 지원하는 도구입니다.

보안 설정 (Security Configuration)

  1. 방화벽 설정: UFW(Uncomplicated Firewall)를 사용하여 기본적인 방화벽을 설정합니다.
   sudo ufw allow OpenSSH
   sudo ufw allow 80/tcp
   sudo ufw allow 443/tcp
   sudo ufw enable
  1. SSL/TLS 설정: Let’s Encrypt를 사용하여 무료 SSL 인증서를 발급받고 Nginx와 함께 설정합니다.
   sudo apt install -y certbot python3-certbot-nginx
   sudo certbot --nginx

SSL/TLS 인증서를 자동으로 갱신하려면 cron 작업을 추가합니다.

   sudo crontab -e
   0 0,12 * * * certbot renew --quiet
  1. 보안 모듈 및 설정: 서버의 보안을 강화하기 위해 Fail2ban과 같은 보안 도구를 설치합니다.
   sudo apt install -y fail2ban

AWS, Azure, Google Cloud 등의 클라우드 플랫폼 활용 (Using Cloud Platforms: AWS, Azure, Google Cloud)

클라우드 플랫폼을 활용하여 Node.js 애플리케이션을 배포할 수 있습니다. 각 플랫폼에서 Node.js 애플리케이션을 배포하는 방법을 소개합니다.

AWS (Amazon Web Services)

  1. EC2 인스턴스 생성: AWS Management Console에서 EC2 인스턴스를 생성하고, 필요한 보안 그룹과 키 페어를 설정합니다.
  2. Node.js 애플리케이션 배포: EC2 인스턴스에 SSH로 접속하여 애플리케이션을 배포합니다.
   ssh -i your-key.pem ec2-user@your-ec2-public-ip

Git을 사용하여 애플리케이션 코드를 클론하고, 필요한 패키지를 설치합니다.

   git clone https://github.com/your-repo/your-app.git
   cd your-app
   npm install
  1. 애플리케이션 실행: pm2를 사용하여 애플리케이션을 실행합니다.
   pm2 start app.js
   pm2 startup
   pm2 save

Azure

  1. Azure Virtual Machine 생성: Azure Portal에서 가상 머신을 생성하고 SSH 키를 설정합니다.
  2. Node.js 애플리케이션 배포: 가상 머신에 SSH로 접속하여 애플리케이션을 배포합니다.
   ssh azureuser@your-azure-vm-ip

Git을 사용하여 애플리케이션 코드를 클론하고, 필요한 패키지를 설치합니다.

   git clone https://github.com/your-repo/your-app.git
   cd your-app
   npm install
  1. 애플리케이션 실행: pm2를 사용하여 애플리케이션을 실행합니다.
   pm2 start app.js
   pm2 startup
   pm2 save

Google Cloud

  1. Google Compute Engine 인스턴스 생성: Google Cloud Console에서 Compute Engine 인스턴스를 생성하고, 필요한 방화벽 규칙을 설정합니다.
  2. Node.js 애플리케이션 배포: 인스턴스에 SSH로 접속하여 애플리케이션을 배포합니다.
   gcloud compute ssh your-instance-name

Git을 사용하여 애플리케이션 코드를 클론하고, 필요한 패키지를 설치합니다.

   git clone https://github.com/your-repo/your-app.git
   cd your-app
   npm install
  1. 애플리케이션 실행: pm2를 사용하여 애플리케이션을 실행합니다.
   pm2 start app.js
   pm2 startup
   pm2 save

CI/CD 파이프라인 구축 (Building CI/CD Pipelines)

CI/CD(지속적 통합/지속적 배포) 파이프라인을 구축하면 코드 변경 사항을 자동으로 테스트하고 배포할 수 있습니다. Jenkins와 Travis CI를 사용하여 CI/CD 파이프라인을 설정하는 방법을 소개합니다.

Jenkins

  1. Jenkins 설치: Jenkins를 설치하고 웹 인터페이스에 접근합니다.
   sudo apt update
   sudo apt install openjdk-11-jdk
   wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
   sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary > /etc/apt/sources.list.d/jenkins.list'
   sudo apt update
   sudo apt install jenkins
  1. Jenkins 설정: 웹 브라우저에서 http://your-server-ip:8080에 접속하여 Jenkins를 설정합니다.
  2. 파이프라인 작성: Jenkins 대시보드에서 새로운 파이프라인 프로젝트를 생성하고, Jenkinsfile을 사용하여 파이프라인을 정의합니다.
   pipeline {
       agent any

       stages {
           stage('Build') {
               steps {
                   checkout scm
                   sh 'npm install'
               }
           }
           stage('Test') {
               steps {
                   sh 'npm test'
               }
           }
           stage('Deploy') {
               steps {
                   sh 'pm2 restart all'
               }
           }
       }
   }

Travis CI

  1. Travis CI 설정: .travis.yml 파일을 프로젝트 루트 디렉토리에 추가합니다.
   language: node_js
   node_js:
     - '14'

   script:
     - npm install
     - npm test

   deploy:
     provider: script
     script: pm2 restart all
     on:
       branch: main
  1. Travis CI와 GitHub 연동: GitHub 저장소와 Travis CI를 연결하고, 커밋 시 자동으로 테스트 및 배포가 수행되도록 설정합니다.

이와 같은 설정을 통해 Node.js 애플리케이션을 안정적으로 배포하고 관리할 수 있습니다. 각 단계에서 제공된 예제와 설정을 통해 서버 환경을 구성하고 클라우드 플랫폼을 활용하여 효율적으로 애플리케이션을 운영할 수 있습니다.

Leave a Reply

Your email address will not be published. Required fields are marked *