서버 환경 설정 (Server Environment Setup)
Node.js 애플리케이션을 배포하려면 서버 환경을 올바르게 설정하는 것이 중요합니다. 이 단계에는 Linux 환경 구성과 보안 설정이 포함됩니다.
Linux 환경 구성 (Configuring Linux Environment)
- 서버 접근 및 패키지 업데이트: 서버에 SSH로 접근한 후, 패키지를 업데이트합니다.
sudo apt update sudo apt upgrade
- 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
- 필수 도구 설치: Git과
pm2
를 설치합니다.
sudo apt install -y git sudo npm install -g pm2
pm2
는 Node.js 애플리케이션의 프로세스 관리 및 클러스터링을 지원하는 도구입니다.
보안 설정 (Security Configuration)
- 방화벽 설정: UFW(Uncomplicated Firewall)를 사용하여 기본적인 방화벽을 설정합니다.
sudo ufw allow OpenSSH sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enable
- 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
- 보안 모듈 및 설정: 서버의 보안을 강화하기 위해 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)
- EC2 인스턴스 생성: AWS Management Console에서 EC2 인스턴스를 생성하고, 필요한 보안 그룹과 키 페어를 설정합니다.
- 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
- 애플리케이션 실행:
pm2
를 사용하여 애플리케이션을 실행합니다.
pm2 start app.js pm2 startup pm2 save
Azure
- Azure Virtual Machine 생성: Azure Portal에서 가상 머신을 생성하고 SSH 키를 설정합니다.
- 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
- 애플리케이션 실행:
pm2
를 사용하여 애플리케이션을 실행합니다.
pm2 start app.js pm2 startup pm2 save
Google Cloud
- Google Compute Engine 인스턴스 생성: Google Cloud Console에서 Compute Engine 인스턴스를 생성하고, 필요한 방화벽 규칙을 설정합니다.
- 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
- 애플리케이션 실행:
pm2
를 사용하여 애플리케이션을 실행합니다.
pm2 start app.js pm2 startup pm2 save
CI/CD 파이프라인 구축 (Building CI/CD Pipelines)
CI/CD(지속적 통합/지속적 배포) 파이프라인을 구축하면 코드 변경 사항을 자동으로 테스트하고 배포할 수 있습니다. Jenkins와 Travis CI를 사용하여 CI/CD 파이프라인을 설정하는 방법을 소개합니다.
Jenkins
- 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
- Jenkins 설정: 웹 브라우저에서
http://your-server-ip:8080
에 접속하여 Jenkins를 설정합니다. - 파이프라인 작성: 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
- 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
- Travis CI와 GitHub 연동: GitHub 저장소와 Travis CI를 연결하고, 커밋 시 자동으로 테스트 및 배포가 수행되도록 설정합니다.
이와 같은 설정을 통해 Node.js 애플리케이션을 안정적으로 배포하고 관리할 수 있습니다. 각 단계에서 제공된 예제와 설정을 통해 서버 환경을 구성하고 클라우드 플랫폼을 활용하여 효율적으로 애플리케이션을 운영할 수 있습니다.