노드를 설정하는 방법Ubuntu 16.04의 js 운영 애플리케이션

노드를 설정하는 방법Ubuntu 16.04의 js 운영 애플리케이션

소개


노드js는 서버와 네트워크 응용 프로그램을 구축하는 데 사용되는 자바스크립트가 실행될 때 시작하는 환경입니다.이 플랫폼은 Linux, MacOS, FreeBSD 및 Windows에서 실행됩니다.노드js 응용 프로그램은 명령줄에서 실행할 수 있지만, 우리는 그것들을 서비스로 실행하는 데 중점을 두어 다시 시작하거나 고장이 났을 때 자동으로 다시 시작하고 생산 환경에서 안전하게 사용할 수 있도록 합니다.
이 강좌에서 우리는 어떻게 생산 준비 노드를 설정하는지 소개할 것이다.단일 Ubuntu 16.04 서버의 js 환경이 서버는 노드를 실행합니다.js 응용 프로그램은 PM2에서 관리하고 Nginx 역방향 에이전트를 통해 사용자에게 응용 프로그램에 대한 안전한 접근을 제공합니다.Nginx 서버는 Let's Encrypt에서 제공하는 무료 인증서를 사용하여 HTTPS를 제공합니다.

선결 조건


이 가이드는 다음과 같은 조건을 갖추고 있다고 가정합니다.
  • Ubuntu 16.04 서버로 sudo 권한을 가진 비root 사용자를 설정합니다. initial server setup guide for Ubuntu 16.04에서 말한 바와 같습니다.
  • How to Set Up a Host Name with DigitalOcean에 따라 서버의 공공 IP를 가리키는 도메인 이름입니다.이 강좌는 시종 example.com을 사용할 것이다.
  • Nginx 설치, How To Install Nginx on Ubuntu 16.04
  • 에 포함
  • Nginx는 Let's Encrypt certificates를 사용하여 SSL을 구성합니다.How To Secure Nginx with Let’s Encrypt on Ubuntu 16.04은 전체 과정을 안내합니다.
  • 선결 조건이 완료되면 https://example.com/의 기본 Nginx 자리 표시자 페이지에 서비스를 제공할 서버가 있습니다.
    설치 노드부터 시작합시다.서버의 js가 실행될 때.

    1단계 - 노드를 설치합니다.회사 명


    우리는 노드의 최신 LTS 버전을 설치할 것이다.js, NodeSource 패키지 압축 파일을 사용합니다.
    먼저 NodeSource PPA를 설치하여 컨텐츠에 액세스해야 합니다.홈 디렉터리에 있는지 확인하고 curl 검색 노드의 설치 스크립트를 사용하십시오.js 16.x 파일:
    1. cd ~
    2. curl -sL https://deb.nodesource.com/setup_16.x -o nodesource_setup.sh
    nano(또는 원하는 텍스트 편집기)을 사용하여 이 스크립트의 내용을 확인할 수 있습니다.
    1. nano nodesource_setup.sh
    그리고 sudo에서 스크립트를 실행합니다.
    1. sudo bash nodesource_setup.sh
    PPA가 구성에 추가되고 로컬 패키지 캐시가 자동으로 업데이트됩니다.nodesource에서 설치 스크립트를 실행하면 노드를 설치할 수 있습니다.js 패키지의 방식은 위와 같습니다.
    1. sudo apt-get install nodejs
    nodejs 패키지는 node 바이너리 파일과 npm을 포함하고 있기 때문에 npm을 따로 설치할 필요가 없습니다.단, 일부 npm 패키지가 정상적으로 작동하도록 (예를 들어 원본 코드에서 코드를 컴파일해야 하는 패키지) build-essential 패키지를 설치해야 합니다.
    1. sudo apt-get install build-essential
    노드현재 jsruntime가 설치되어 응용 프로그램을 실행할 수 있습니다.우리들은 노드를 하나 작성합시다.js 응용 프로그램.

    2단계 - 노드를 생성합니다.js 응용 프로그램


    Hello World 응용 프로그램을 작성하여 HTTP 요청에 대한 "Hello World"를 반환합니다.이것은 노드를 가져오는 데 도움을 줄 수 있는 예시 프로그램입니다.js 설정, 응용 프로그램으로 바꿀 수 있습니다. - 응용 프로그램을 수정해서 적당한 IP 주소와 포트를 탐지할 수 있도록 하십시오.

    안녕 세계 코드


    먼저 노드를 만들고 엽니다.편집용 js 프로그램입니다.이 강좌에서는 nano이라는 hello.js의 예제 응용 프로그램을 편집합니다.
    1. cd ~
    2. nano hello.js
    파일에 다음 코드를 삽입합니다.필요한 경우 두 위치에서 강조 표시된 포트 8080을 교체할 수 있습니다 (비관리 포트, 즉 1024 이상을 사용하십시오.
    안녕하세요.회사 명
    #!/usr/bin/env nodejs
    var http = require('http');
    http.createServer(function (req, res) {
      res.writeHead(200, {'Content-Type': 'text/plain'});
      res.end('Hello World\n');
    }).listen(8080, 'localhost');
    console.log('Server running at http://localhost:8080/');
    
    지금 저장하고 종료합니다.
    이 노드.js 응용 프로그램은 지정한 주소(localhost)와 포트(8080)를 탐지하고 200 HTTP 성공 코드가 있는 "Hello World"를 되돌려줍니다.로컬 호스트에서 수신하기 때문에 원격 클라이언트는 응용 프로그램에 연결할 수 없습니다.

    테스트 응용 프로그램


    응용 프로그램을 테스트하려면 hello.js을 사용하여 chmod을 실행 가능하게 설정하십시오.
    1. chmod +x ./hello.js
    이렇게 실행합니다.
    1. ./hello.js
    Output
    Server running at http://localhost:8080/
    참고: 노드를 실행합니다.js 프로그램은 Ctrl-C를 눌러 프로그램을 종료할 때까지 이런 방식으로 다른 명령을 막습니다.
    애플리케이션을 테스트하려면 서버에서 다른 터미널 세션을 열고 curl을 사용하여 로컬 호스트에 연결합니다.
    1. curl http://localhost:8080
    다음 출력을 보았을 때 프로그램이 정상적으로 작동하고 정확한 주소와 포트를 탐색하고 있음을 나타냅니다.
    Output
    Hello World
    정확한 출력을 보지 못하면 노드를 확인하십시오.js 프로그램이 실행 중이며, 정확한 주소와 포트로 설정되어 있습니다.
    작업이 정상적으로 작동하고 있는지 확인하면 다른 터미널로 전환하여 노드를 죽입니다.js 응용 프로그램(아직 없으면), Ctrl+C를 누르십시오.

    3단계 - PM2 설치


    이제 노드의 프로세스 관리자인 PM2를 설치합니다.js 응용 프로그램.PM2는 응용 프로그램을 관리하고 감시하는 간단한 방법을 제공했다.
    Node와 함께 설치할 노드 모듈을 위한 패키지 관리자인 npm을 사용합니다.js, 우리 서버에 PM2를 설치합니다.이 명령을 사용하여 PM2를 설치하려면:
    1. sudo npm install -g pm2
    -g 옵션은 시스템 내에서 사용할 수 있도록 npm 글로벌 설치 모듈을 알려 줍니다.

    단계 4 - PM2 관리 어플리케이션 사용


    우리는 PM2의 몇 가지 기본 용도를 소개할 것이다.

    응용 프로그램 시작


    첫 번째 작업은 pm2 start 명령을 사용하여 백그라운드에서 응용 프로그램 hello.js을 실행하는 것입니다.
    1. pm2 start hello.js
    또한 PM2의 프로세스 목록에 응용 프로그램을 추가합니다. 이 목록은 응용 프로그램을 시작할 때마다 출력됩니다.
    Output
    [PM2] Spawning PM2 daemon with pm2_home=/home/sammy/.pm2 [PM2] PM2 Successfully daemonized [PM2] Starting /home/sammy/hello.js in fork_mode (1 instance) [PM2] Done. ┌─────┬──────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐ │ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │ ├─────┼──────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤ │ 0 │ hello │ default │ N/A │ fork │ 13734 │ 0s │ 0 │ online │ 0% │ 25.0mb │ sammy │ disabled │ └─────┴──────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
    보시다시피 PM2는 자동으로 이름 (파일 이름 기반, .js 확장자 없음) 과 PM2 id를 분배합니다. PM2는 프로세스의 PID, 현재 상태, 메모리 사용과 같은 다른 정보를 유지합니다.
    응용 프로그램이 충돌하거나 죽으면 PM2에서 실행된 응용 프로그램이 자동으로 다시 시작되지만, 시스템이 시작될 때 응용 프로그램을 시작하기 위한 추가 절차가 필요합니다.다행히도 PM2는 startup자 명령이라는 간단한 방법을 제공했다.startup 하위 명령은 서버가 부트할 때 PM2 및 관리 프로세스를 시작하도록 시작 스크립트를 생성하고 구성합니다.
    1. pm2 startup systemd
    결과 출력의 마지막 줄에는 명령이 포함되어 있으며 수퍼유저 권한으로 명령을 실행해야 합니다.
    Output
    [PM2] Init System found: systemd [PM2] You have to run this command as root. Execute the following command: sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u sammy --hp /home/sammy
    생성된 명령을 실행합니다(위에 강조 표시된 출력과 유사하지만 sammy 대신 사용자 이름을 사용함). PM2를 시작할 때 시작합니다(자신의 출력에서 명령을 사용함).
    1. sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u sammy --hp /home/sammy
    이것은 시스템을 만들 것입니다. 안내할 때 사용자를 위해 pm2을 실행합니다.이 pm2 실례는 hello.js을 순서대로 운행한다.systemctl을 통해 systemd 단원의 상태를 검사할 수 있습니다.
    1. systemctl status pm2-sammy
    시스템d에 대한 상세한 개술은 Systemd Essentials: Working with Services, Units, and the Journal을 참조하십시오.

    추가 PM2 용도(옵션)


    PM2는 많은 하위 명령을 제공하여 응용 프로그램에 대한 정보를 관리하거나 찾을 수 있습니다.pm2을 매개 변수 없이 실행하면 도움말 페이지가 표시됩니다. 예시 사용법을 포함하여 이 페이지는 본 강좌의 이 부분보다 PM2의 사용법을 더 상세하게 소개합니다.
    이 명령을 사용하여 응용 프로그램을 중지합니다(PM2 App name 또는 id 지정):
    1. pm2 stop app_name_or_id
    이 명령을 사용하여 응용 프로그램을 다시 시작합니다(PM2 App name 또는 id 지정):
    1. pm2 restart app_name_or_id
    또한 list 하위 명령을 사용하여 현재 PM2에서 관리하는 응용 프로그램 목록을 찾을 수 있습니다.
    1. pm2 list
    info 하위 명령(PM2 응용 프로그램 이름 또는 id 지정)을 사용하면 특정 응용 프로그램에 대한 추가 정보를 찾을 수 있습니다.
    1. pm2 info example
    PM2 프로세스 모니터는 monit 하위 명령을 사용하여 시작할 수 있습니다.애플리케이션 상태, CPU 및 메모리 사용량이 표시됩니다.
    1. pm2 monit
    현재, 당신의 노드.js 응용 프로그램이 실행 중입니다. PM2에서 관리합니다. 역방향 에이전트를 설정합니다.

    단계 5 - Nginx를 리버스 프록시 서버로 설정


    프로그램이 실행 중이고 로컬 호스트에서 정탐하고 있으니, 사용자를 위해 접근 방식을 설정해야 합니다.이를 위해 Nginx 웹 서버를 리버스 에이전트로 설정합니다.
    필수 자습서에서 /etc/nginx/sites-available/default 파일에 Nginx 구성을 설정했습니다.편집할 파일을 엽니다.
    1. sudo nano /etc/nginx/sites-available/default
    server 블록 중 현재 location / 블록이 있어야 합니다.블록의 컨텐트를 다음 구성으로 대체합니다.응용 프로그램이 다른 포트를 정탐하도록 설정하면 강조 표시된 부분을 정확한 포트 번호로 업데이트합니다.
    /etc/nginx/sites available/default
    . . .
        location / {
            proxy_pass http://localhost:8080;
            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;
        }
    }
    
    이것은 서버를 루트 디렉터리에서 요청에 응답하도록 설정합니다.우리 서버가 example.com에서 사용할 수 있다고 가정하면 웹 브라우저를 통해 https://example.com/에 접근하면 hello.js에 요청을 보내고 로컬 호스트에서 포트 8080을 탐지합니다.
    같은 서버에 다른 응용 프로그램에 대한 액세스를 제공하기 위해 같은 서버 블록에 location 블록을 추가할 수 있습니다.예를 들어, 다른 노드를 실행하고 있는 경우포트 8081의 js 응용 프로그램에서 http://example.com/app2을 통해 접근할 수 있도록 이 위치 블록을 추가할 수 있습니다.
    /etc/nginx/sites available/default-선택 가능
        location /app2 {
            proxy_pass http://localhost:8081;
            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;
        }
    
    응용 프로그램의 위치 블록을 추가한 후 저장하고 종료합니다.
    구문 오류가 발생하지 않도록 다음 내용을 입력합니다.
    1. sudo nginx -t
    이제 Nginx를 다시 시작합니다.
    1. sudo systemctl restart nginx
    노드를 가정하십시오.js 프로그램이 실행 중이고 프로그램과 Nginx가 올바르게 설정되어 있습니다. 이제 Nginx 역방향 에이전트를 통해 프로그램에 접근할 수 있어야 합니다.서버의 URL(공용 IP 주소 또는 도메인 이름)에 액세스하여 시도합니다.

    결론


    축하이제 노드가 생겼습니다.Ubuntu 16.04 서버에서 Nginx 역방향 프록시를 실행한 후 js 응용 프로그램입니다.이러한 역방향 프록시 설정은 사용자가 다른 응용 프로그램이나 공유할 정적 웹 내용에 접근할 수 있도록 충분히 유연하다.당신의 노드에 행운을 빕니다.js 개발.