웹사이트 검색

nginx, forever 및 crontab을 사용하여 단일 VPS에서 여러 Node.js 애플리케이션을 호스팅하는 방법


이 자습서를 따르기 위한 요구 사항

nginx 및 Node.js가 설치되어 있어야 하며 DigitalOcean에는 이러한 주제에 대한 잘 작성된 자습서가 이미 있습니다.

Node.js를 설치하는 방법.

또한 http://[your-vps-ip]:[port]로 이동하는 대신 실행 중인 Node.js 서비스를 도메인 이름에 매핑하려면 이미 도메인을 소유하고 있어야 합니다.

Forever로 Node.js 애플리케이션 실행

Forever는 Node.js 애플리케이션이 지속적으로(즉, 영원히) 실행되도록 하는 간단한 명령줄 도구입니다. 즉, 앱에 오류가 발생하여 충돌이 발생하면 영원히 이 문제를 처리하고 다시 시작합니다.

전 세계적으로 영원히 설치하기만 하면 몇 초 만에 영원히 사용할 수 있습니다.

npm install forever -g

영원히 스크립트를 시작하려면 다음 단계를 따라야 합니다.

Node.js 애플리케이션으로 이동합니다.

cd /path/to/your/node/app/

영원히 다음과 같이 서버/메인 JavaScript 파일을 실행합니다.

forever start --spinSleepTime 10000 main.js

여기서 --spinSleepTime 10000은 크래시 스크립트 실행 사이의 최소 가동 시간(밀리초)을 나타냅니다. 이 명령은 거의 모든 경우에 적용됩니다.

이제 브라우저에서 http://[your-vps-ip]:[port]를 가리키고 실행 중인 앱을 확인합니다.

Node.js 애플리케이션에 도메인 매핑

이제 DigitalOcean 제어판에 DNS 레코드를 추가하여 도메인 이름을 드롭릿(VPS)에 매핑해야 합니다.

따라야 할 단계는 다음과 같습니다.

    참고: DNS가 전파되는 데 최대 24시간이 걸릴 수 있으므로 변경 사항은 즉시 적용되지 않습니다.

    nginx를 사용하여 VPS에서 실행되는 서비스에 도메인 매핑

    이 섹션에서는 몇 가지 간단한 단계를 통해 nginx로 리버스 프록시를 설정하는 방법을 배웁니다.

    우선, 선호하는 편집기를 사용하여 /etc/nginx/conf.d/에 원하는 도메인에 대한 파일을 생성합니다(저는 nano를 사용하겠습니다). 일관성을 위해 파일 이름은 도메인 이름을 따서 지정해야 합니다.

    nano /etc/nginx/conf.d/example.com.conf
    

    참고: 원하는 대로 파일을 호출할 수 있으며 중요한 부분은 .conf 확장자입니다.

    이 파일에서 다음 코드 스니펫을 복사하여 이전에 만든 파일에 붙여넣을 수 있습니다.

    server {
        listen 80;
    
        server_name your-domain.com;
    
        location / {
            proxy_pass http://localhost:{YOUR_PORT};
            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;
        }
    }
    

    이제 your-domain.com을 등록한 도메인으로 바꾸고 YOUR_PORT를 Node.js 앱이 VPS에서 수신하는 포트로 바꾸십시오.

    참고: 하나의 Node.js 앱(예: example.com)에 대해 여러 도메인을 참조하려면 /etc/nginx/nginx.conf 파일에 다음 코드를 추가해야 합니다. >http 섹션:

    server_names_hash_bucket_size 64;
    

    DNS 변경 사항이 전파되면 웹 브라우저에서 도메인을 가리킬 수 있으며 인터넷에서 액세스할 수 있는 애플리케이션이 실행 중인 것을 볼 수 있습니다.

    재부팅 시 Node.js 앱 다시 시작

    응용 프로그램이 충돌할 때 실행 상태를 유지하는 데 있어 Forever는 좋습니다. 하지만 VPS가 재부팅되면 어떻게 됩니까?

    여기에서 간단한 cronjob으로 애플리케이션과 사용자가 예기치 않은 다운타임을 방지할 수 있습니다.

    애플리케이션의 홈 폴더에 starter.sh라는 파일을 만들고 다음 코드를 복사합니다.

    #!/bin/sh
    
    if [ $(ps -e -o uid,cmd | grep $UID | grep node | grep -v grep | wc -l | tr -s "\n") -eq 0 ]
    then
            export PATH=/usr/local/bin:$PATH
            forever start --sourceDir /path/to/your/node/app main.js >> /path/to/log.txt 2>&1
    fi
    
    

    여기서 main.js는 애플리케이션의 기본 스크립트로 대체되어야 합니다.

    이 유용한 스니펫은 여기에서 가져왔습니다.

    재부팅할 때마다 이 스크립트를 시작하려면 다음 명령으로 crontab을 편집해야 합니다.

    crontab -e
    

    이 파일에 다음 코드를 추가합니다.

    @reboot /path/to/starter.sh
    

    이제 starter.sh 파일의 절대 경로를 설정하십시오.

    팁: starter.sh 파일이 있는 위치를 탐색하고 pwd를 사용하여 현재 디렉토리를 인쇄하십시오.

    각 도메인/서비스에 대해 위의 단계를 반복합니다.

    제출자: Christian Fei