SSL, Nginx, PM2를 사용하여 단일 서버에 여러 NodeJS 앱 배포 - 1부
8460 단어 tutorialnodedevopsjavascript
동기 부여
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
다음 부분에 또 다른 앱을 추가할 예정이니 계속 지켜봐주세요 😃
Reference
이 문제에 관하여(SSL, Nginx, PM2를 사용하여 단일 서버에 여러 NodeJS 앱 배포 - 1부), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ranjan/deploy-multiple-nodejs-apps-on-single-server-with-ssl-nginx-pm2-part-1-4841텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)