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

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

2022-06-01 last update

17 minutes reading Node.js Ubuntu 18.04 Nginx

소개


Node.js은 서버와 네트워크 응용 프로그램을 구축하는 데 사용되는 자바스크립트가 실행될 때의 환경입니다.이 플랫폼은 Linux, macOS, FreeBSD, Windows에서 실행됩니다.Node를 실행할 수 있지만js 응용 프로그램은 명령줄에서 이 강좌는 이를 서비스로 실행하는 방법을 중점적으로 소개할 것입니다.즉, 재부팅 또는 장애 발생 시 재부팅되며 운영 환경에서 안전하게 사용할 수 있습니다.
이 강좌에서 생산 준비 노드를 설정할 것입니다.단일 Ubuntu 18.04 서버의 js 환경이 서버는 노드를 실행합니다.js 응용 프로그램은 PM2에서 관리하고 Nginx 역방향 에이전트를 통해 사용자에게 응용 프로그램에 대한 안전한 접근을 제공합니다.Nginx 서버는 Let’s Encrypt에서 제공하는 무료 인증서를 사용하여 HTTPS를 제공합니다.

선결 조건


이 가이드는 다음과 같은 조건을 갖추고 있다고 가정합니다.
  • Ubuntu 18.04 서버 설정은 initial server setup guide for Ubuntu 18.04에서 설명한 바와 같습니다.sudo 권한이 있는 비root 사용자와 활동 방화벽이 있어야 합니다.
  • A domain name pointed at your server’s public IP.이 강좌는 항상 도메인 이름 example.com을 사용합니다.
  • Nginx가 설치되었습니다.
  • Nginx는 Let's Encrypt certificates를 사용하여 SSL을 구성합니다.How To Install Nginx on Ubuntu 18.04은 전체 과정을 안내합니다.
  • 전제 조건이 완료되면 서버가 도메인의 기본 자리 표시자 페이지에 https://example.com/ 주소로 서비스를 제공합니다.

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


    먼저 최신 버전의 노드 LTS를 설치합니다.js, How To Secure Nginx with Let’s Encrypt on Ubuntu 18.04 패키지 압축 파일을 사용합니다.
    먼저 NodeSource PPA를 설치하여 컨텐츠에 액세스합니다.홈 디렉터리에 있는지 확인하고 curl 검색 노드의 설치 스크립트를 사용하십시오.js 8.x 파일:
    1. cd ~
    2. curl -sL https://deb.nodesource.com/setup_8.x -o nodesource_setup.sh
    nano 또는 선택한 텍스트 편집기를 사용하여 이 스크립트의 내용을 확인할 수 있습니다.
    1. nano nodesource_setup.sh
    스크립트를 확인한 후 sudo에서 실행하십시오.
    1. sudo bash nodesource_setup.sh
    PPA가 구성에 추가되고 로컬 패키지 캐시가 자동으로 업데이트됩니다.Nodesource에서 설치 스크립트를 실행하면 노드를 설치할 수 있습니다.js 패키지:
    1. sudo apt install nodejs
    노드의 버전을 확인합니다.이 초기 단계를 완료한 후 설치할 js를 입력하십시오.
    1. nodejs -v
    Output
    v8.11.3
    참고 NodeSource PPA에서 설치할 때 노드입니다.js 실행 파일 이름은 nodejs이 아니라 node입니다.nodejs 패키지는 nodejs 바이너리 파일과 NodeSource(노드 모듈의 패키지 관리자)을 포함하기 때문에 npm을 따로 설치할 필요가 없습니다.npm은 홈 디렉터리의 프로필을 사용하여 업데이트를 추적합니다.npm을 처음 실행할 때 생성됩니다.이 명령을 실행하여 npm이 설치되어 있는지 확인하고 구성 파일을 만듭니다.
    1. npm -v
    Output
    5.6.0
    일부 npm 패키지가 정상적으로 작동하도록 (예를 들어 원본 코드에서 코드를 컴파일해야 하는 패키지) npm 패키지를 설치해야 합니다.
    1. sudo apt install build-essential
    원본 코드에서 코드를 컴파일해야 하는 build-essential 패키지를 처리하는 데 필요한 도구가 있습니다.
    노드를 사용합니다.js를 설치해서 실행할 때, 노드를 계속 작성합시다.js 응용 프로그램.

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


    Hello World 응용 프로그램을 작성하여 HTTP 요청에 대한 "Hello World"를 반환합니다.이 예시 프로그램은 노드를 가져오는 데 도움을 줄 것입니다.js 설정.어플리케이션으로 교체할 수 있습니다. 어플리케이션을 수정하여 적절한 IP 주소 및 포트를 탐지할 수 있습니다.
    먼저, npm이라는 예제 응용 프로그램을 만듭니다.
    1. cd ~
    2. nano hello.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 World!\n');
    });
    
    server.listen(port, hostname, () => {
      console.log(`Server running at http://${hostname}:${port}/`);
    });
    
    파일을 저장하고 편집기를 종료합니다.
    이 노드.js 응용 프로그램은 지정한 주소(hello.js)와 포트(localhost)를 정탐하고 "Hello World!"로 돌아갑니다.3000 HTTP 성공 코드가 있습니다.200을 수신하고 있기 때문에 원격 클라이언트는 응용 프로그램에 연결할 수 없습니다.
    응용 프로그램을 테스트하려면 다음을 입력합니다.
    1. node hello.js
    다음 출력이 표시됩니다.
    Output
    Server running at http://localhost:3000/
    참고: 노드를 실행합니다.js 프로그램은 localhost으로 프로그램을 종료할 때까지 이런 방식으로 다른 명령을 막을 것입니다.
    응용 프로그램을 테스트하려면 서버에서 다른 터미널 세션을 열고 CTRL+C을 사용하여 localhost에 연결합니다.
    1. curl http://localhost:3000
    다음 출력을 보았을 때 프로그램이 정상적으로 작동하고 정확한 주소와 포트를 탐색하고 있음을 나타냅니다.
    Output
    Hello World!
    예상한 출력이 보이지 않으면 노드를 확인하십시오.js 프로그램이 실행 중이며 정확한 주소와 포트로 설정되어 있습니다.
    정상적으로 작동하는지 확인한 후 curl을 눌러 프로그램을 종료합니다(종료되지 않은 경우).

    3단계 - PM2 설치


    다음은 노드의 프로세스 관리자인 PM2를 설치하겠습니다.js 응용 프로그램.PM2는 백그라운드에서 서비스로 실행될 수 있도록 응용 프로그램에 대한 백그라운드 모니터링을 할 수 있다.CTRL+C을 사용하여 서버에 최신 버전의 PM2를 설치합니다.
    1. sudo npm install [email protected] -g
    npm 옵션은 시스템 내에서 사용할 수 있도록 -g 글로벌 설치 모듈을 알려 줍니다.
    먼저 npm 명령을 사용하여 백그라운드에서 응용 프로그램 pm2 start을 실행합니다.
    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. ┌──────────┬────┬──────┬──────┬────────┬─────────┬────────┬─────┬───────────┬───────┬──────────┐ │ App name │ id │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ user │ watching │ ├──────────┼────┼──────┼──────┼────────┼─────────┼────────┼─────┼───────────┼───────┼──────────┤ │ hello │ 0 │ fork │ 1338 │ online │ 0 │ 0s │ 0% │ 23.0 MB │ sammy │ disabled │ └──────────┴────┴──────┴──────┴────────┴─────────┴────────┴─────┴───────────┴───────┴──────────┘ Use `pm2 show <id|name>` to get more details about an app
    보시다시피 PM2는 hello.js (파일 이름 기반, App name 확장자 제외) 과 PM2 .js 을 자동으로 할당합니다.PM2는 또한 프로세스의 id, 현재 상태와 메모리 사용 상황 등 다른 정보를 유지합니다.
    프로그램이 충돌하거나 종료되면 PM2에서 실행된 프로그램이 자동으로 다시 시작되지만, PID 하위 명령을 사용하여 시스템이 시작될 때 프로그램을 시작할 수 있습니다.이 하위 명령은 서버가 부트할 때 PM2 및 관리 프로세스를 시작하도록 시작 스크립트를 생성하고 구성합니다.
    1. pm2 startup systemd
    결과 출력의 마지막 줄에는 PM2를 부트 시 시작하도록 설정하기 위해 수퍼유저 권한으로 실행되는 명령이 포함됩니다.
    Output
    [PM2] Init System found: systemd [PM2] To setup the Startup Script, copy/paste the following command: sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u sammy --hp /home/sammy
    출력에서 명령을 실행합니다. 사용자 이름은 startup입니다.
    1. sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u sammy --hp /home/sammy
    추가 단계로 PM2 프로세스 목록과 해당 환경을 저장할 수 있습니다.
    1. pm2 save
    현재 시스템d 단원을 만들었습니다. 이 단원은 안내할 때 사용자에게 sammy을 실행합니다.이 pm2 실례는 pm2을 순서대로 운행한다.hello.js을 사용하여 서비스를 시작합니다.
    1. sudo systemctl start pm2-sammy
    systemd 단원의 상태를 확인하려면:
    1. systemctl status pm2-sammy
    시스템d에 대한 상세한 개술은 systemctl 을 참조하십시오.
    우리가 이미 소개한 것 외에 PM2는 응용 프로그램에 대한 정보를 관리하거나 찾을 수 있도록 많은 하위 명령을 제공합니다.
    이 명령을 사용하여 응용 프로그램을 중지합니다(PM2 App name 또는 id 지정):
    1. pm2 stop app_name_or_id
    애플리케이션 재부팅:
    1. pm2 restart app_name_or_id
    PM2의 현재 관리 응용 프로그램을 나열합니다.
    1. pm2 list
    App name을 사용하여 특정 응용 프로그램에 대한 정보를 얻습니다.
    1. pm2 info app_name
    PM2 프로세스 모니터는 monit 하위 명령을 사용하여 시작할 수 있습니다.애플리케이션 상태, CPU 및 메모리 사용량이 표시됩니다.
    1. pm2 monit
    매개 변수 없이 pm2을 실행하면 예시 사용법이 있는 도움말 페이지가 표시됩니다.
    현재, 당신의 노드.js 응용 프로그램은 PM2에서 실행되고 관리되며 역방향 에이전트를 설정합니다.

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


    응용 프로그램이 localhost에서 실행되고 정탐되고 있지만, 사용자에게 접근 방식을 설정해야 합니다.이를 위해 Nginx 웹 서버를 리버스 에이전트로 설정합니다.
    필수 자습서에서 /etc/nginx/sites-available/example.com 파일에 Nginx 구성을 설정합니다.편집할 파일을 엽니다.
    1. sudo nano /etc/nginx/sites-available/example.com
    server 블록 중 기존의 location / 블록이 있어야 합니다.블록의 컨텐트를 다음 구성으로 대체합니다.응용 프로그램이 다른 포트를 스캔하도록 설정하면 강조 표시된 부분을 올바른 포트 번호로 업데이트합니다.
    /etc/nginx/sites available/example.일반 도메인 이름 형식
    server {
    ...
        location / {
            proxy_pass http://localhost:3000;
            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에 요청을 보내고 3000의 포트 localhost을 감청합니다.
    같은 서버에 다른 응용 프로그램에 대한 액세스를 제공하기 위해 같은 서버 블록에 location 블록을 추가할 수 있습니다.예를 들어, 다른 노드를 실행하고 있는 경우포트 3001의 js 응용 프로그램에서 https://example.com/app2을 통해 접근할 수 있도록 이 위치 블록을 추가할 수 있습니다.
    /etc/nginx/sites available/example.com - 옵션
    server {
    ...
        location /app2 {
            proxy_pass http://localhost:3001;
            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 18.04 서버에서 Nginx 역방향 프록시를 실행한 후 js 응용 프로그램입니다.이러한 역방향 프록시 설정은 사용자가 다른 응용 프로그램이나 공유할 정적 웹 내용에 접근할 수 있도록 충분히 유연하다.