SSL, Nginx, PM2를 사용하여 단일 서버에 여러 NodeJS 앱 배포 - 1부

동기 부여



Greatings, 서버에 배포할 준비가 된 멋진 NodeJS 앱의 코딩을 마쳤고 VPS에서 호스팅하고 싶거나 단일 VPS에 호스팅할 앱이 두 개 이상 있다고 가정해 보겠습니다. 어떻게 하시겠습니까?

소개



Nginx: 들어오는 요청을 처리하기 위한 웹 서버 또는 리버스 프록시.
PM2 : NodeJS 앱을 관리하는 프로세스 관리자 오류를 포착하더라도 항상 실행되도록 하거나 동일한 앱의 여러 인스턴스를 생성하여 앱에서 사용 가능한 코어/스레드(클러스터 모드)를 활용하는 것과 같이 마지막 부분은 선택 사항입니다.
Certbot: Let's Encrypt SSL for Free를 사용하여 도메인용 앱 SSL을 관리합니다.

전제 조건



SSH 액세스 권한이 있는 Ubuntu 20.04 서버 및 sudo 권한이 있는 루트가 아닌 사용자.

01단계 - Node.js 설치



먼저 노드 js를 설치하려면 최신 LTS 버전에 대한 PPA를 추가해야 합니다.

cd ~
curl -sL https://deb.nodesource.com/setup_16.x -o nodesource_setup.sh

# and then 

sudo bash nodesource_setup.sh


이 후 PPA가 추가되면 Node js를 간단하게 설치할 수 있습니다.

sudo apt install nodejs


우리가 설치한 노드의 버전을 확인하려면 간단히 다음을 입력하십시오.

 node -v


내 경우에는 16.17.0 의 정확한 설치 버전이 표시됩니다.

소스 코드에서 패키지를 컴파일하려면 build-essentials가 필요할 가능성이 높으므로 패키지도 설치하겠습니다.

sudo apt install build-essential


02단계 - 프로젝트 복제 및 종속성 설치




git clone awesomeproject.git

cd awesomeproject
npm install
npm start (or whatever your start command)
# stop app
ctrl+C


또는 간단한 앱을 만들 수 있습니다.

cd ~
nano app.js


파일에 다음을 삽입

const http = require('http');

const hostname = 'localhost';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello Everyone!\n');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});


그런 다음 실행하십시오.

node app


당신은 출력으로 다음을 받게됩니다

Output
Server running at http://localhost:3000/


03단계 - PM2 설정



먼저 PM2를 설치해야 합니다.

sudo npm i pm2 -g


그리고 앱을 시작하기 위해

pm2 start app  #(or whatever your file name)

#for Cluster mode 
pm2 start app -i max 
#it will create an instance for every available thread 
#optionally you can also pass Number like 2,3 for instances count

# Other pm2 commands
pm2 show app
pm2 status
pm2 restart app
pm2 stop app
pm2 logs (Show log stream)
pm2 flush (Clear logs)

# To make sure app starts when reboot
pm2 startup ubuntu


앱은 정의된 IP 및 포트를 사용하여 액세스할 수 있어야 합니다.

04단계 - UFW 방화벽 설정



이제 해당 포트를 차단하는 방화벽을 설정하고 포트 80(http) 또는 포트 443(https)을 사용하여 직접 액세스할 수 있도록 NGINX를 역방향 프록시로 설정하려고 합니다.

sudo ufw enable
sudo ufw status
sudo ufw allow ssh (Port 22) # for SSH
sudo ufw allow http (Port 80)
sudo ufw allow https (Port 443)


05단계 - NGINX 설치 및 구성



다음과 같이 입력하면 Nginx 설치가 매우 쉽습니다.

sudo apt install nginx


편집할 기본 구성을 엽니다.

sudo nano /etc/nginx/sites-available/default


서버 블록의 위치 부분에 다음을 추가하십시오.

    server_name yourdomain.com www.yourdomain.com;

    location / {
        proxy_pass http://localhost:3000; #whatever port your app runs on
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }


그런 다음 NGINX를 확인하고 다시 시작하십시오.

# Check NGINX config
sudo nginx -t

# Restart NGINX
sudo service nginx restart


이제 포트가 없는 IP(포트 80)를 방문하여 앱을 볼 수 있습니다.

06단계 - 도메인 추가



모든 VPS에 도메인을 추가하는 것은 각 공급자마다 매우 다릅니다. 먼저 VPS의 IP 주소를 가리키도록 A 레코드를 등록하고 추가해야 합니다. 또는 VPS 공급자가 지원하는 경우 사용자 지정 이름 서버를 추가할 수도 있습니다. 나타나다.

07단계 - Lets Encrypt로 SSL 추가



Lets Encrypt는 certbot 패키지와 함께 무료 SSL을 제공하므로 먼저 패키지를 설치해야 합니다.

sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install python3-certbot-nginx


그런 다음 추가한 도메인에 대한 인증서를 추가합니다.

sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com


앱이 https://yourdomain.com에 게시되어야 합니다.

이 인증서는 90일마다 갱신해야 합니다.
달리기를 갱신하다

certbot renew 


다음 부분에 또 다른 앱을 추가할 예정이니 계속 지켜봐주세요 😃

좋은 웹페이지 즐겨찾기