prosource

Node.js 응용 프로그램을 자체 프로세스로 실행하려면 어떻게 해야 합니까?

probook 2023. 8. 6. 10:11
반응형

Node.js 응용 프로그램을 자체 프로세스로 실행하려면 어떻게 해야 합니까?

Node.js를 배포하는 가장 좋은 방법은 무엇입니까?

Dreamhost VPS(VM이라고 함)가 있으며 Node.js를 설치하고 프록시를 설정할 수 있습니다.노드를 시작한 SSH 연결을 개방 상태로 유지하는 한 이 작업은 매우 효과적입니다.

2016년 답변: 거의 모든 리눅스 배포판에는 systemd가 함께 제공됩니다. 즉, 영구, 모니터, PM2 등이 더 이상 필요하지 않습니다. OS는 이미 이러한 작업을 처리합니다.

를 만듭니다.myapp.service파일(분명히 'myapp'을 앱 이름으로 표시):

[Unit]
Description=My app

[Service]
ExecStart=/var/www/myapp/app.js
Restart=always
User=nobody
# Note Debian/Ubuntu uses 'nogroup', RHEL/Fedora uses 'nobody'
Group=nogroup
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
WorkingDirectory=/var/www/myapp

[Install]
WantedBy=multi-user.target

Unix를 처음 사용하는 경우 참고: /var/www/myapp/app.js했어야 했습니다#!/usr/bin/env node합니다.chmod +x myapp.js.

을 서스파에복다에 합니다./etc/systemd/system폴더를 누릅니다.

에 systemd의 에 대해 .systemctl daemon-reload.

시하기로 합니다.systemctl start myapp.

시실가로 부팅 시 실행 systemctl enable myapp.

가 있는 로그 journalctl -u myapp

이는 Linux/노드 서버를 구축하기 위한 AWS/DigitalOcean/Azure CloudConfig를 생성하는 명령어가 포함된 2018년 Linux 버전 노드 애플리케이션 구축 방법에서 가져온 것입니다..service

영구 사용.Node.js 프로그램을 별도의 프로세스로 실행하고 중단된 프로그램이 있으면 다시 시작합니다.

용도:

  • forever start example.js프로세스를 시작합니다.
  • forever list에 의해 목록
  • forever stop example.js프로세스를 중지하거나,forever stop 00으로 합니다("0"으로 됨).forever list).

여기에 제 배포 방법인 node.js배포에 대해 썼습니다.

간단히 말해서:

  • git 사후 수신 후크 사용
  • 빌드 도구를 위한 Jake
  • 노드에 대한 서비스 래퍼로 시작
  • 애플리케이션이 다운될 때 모니터링 및 재시작
  • nginx - 동일한 서버의 다른 응용프로그램으로 요청을 라우트합니다.

pm2가 묘기를 부립니다.

기능은 모니터링, 핫 코드 다시 로드, 내장 로드 밸런서, 자동 시작 스크립트 및 다시 시작/덤프 프로세스입니다.

사용할 수 있습니다.monit,forever,upstart또는systemd서버를 시작합니다.

Nginx 대신 Vanish 또는 HAProxy를 사용할 수 있습니다(Nginx는 웹 소켓에서 작동하지 않는 것으로 알려져 있습니다).

으로 르고더러솔으사로수있다니습용할빠루를 사용할 수 있습니다.nohup node your_app.js &되는 것을 합니다.forever,monit그리고 다른 제안된 해결책이 더 좋습니다.

현재 앱에 사용되는 시작 스크립트를 만들었습니다.

description "YOUR APP NAME"
author "Capy - http://ecapy.com"

env LOG_FILE=/var/log/node/miapp.log
env APP_DIR=/var/node/miapp
env APP=app.js
env PID_NAME=miapp.pid
env USER=www-data
env GROUP=www-data
env POST_START_MESSAGE_TO_LOG="miapp HAS BEEN STARTED."
env NODE_BIN=/usr/local/bin/node
env PID_PATH=/var/opt/node/run
env SERVER_ENV="production"

######################################################

start on runlevel [2345]
stop on runlevel [016]

respawn
respawn limit 99 5

pre-start script
    mkdir -p $PID_PATH
    mkdir -p /var/log/node
end script

script
    export NODE_ENV=$SERVER_ENV
    exec start-stop-daemon --start --chuid $USER:$GROUP --make-pidfile --pidfile $PID_PATH/$PID_NAME --chdir $APP_DIR --exec $NODE_BIN -- $APP >> $LOG_FILE 2>&1
end script

post-start script
    echo $POST_START_MESSAGE_TO_LOG >> $LOG_FILE
end script

######## 앞에 있는 모든 사용자 지정, /etc/init/your-service.conf에 파일을 생성하여 붙여넣습니다.

그러면 다음을 수행할 수 있습니다.

start your-service
stop your-service
restart your-service
status your-service

Node.js를 배포하기 위한 매우 포괄적인 가이드를 작성했습니다. 예 파일은 다음과 같습니다.

자습서:Node.js 애플리케이션 배포 방법(예 포함)

http-proxy, SSL, 소켓 등을 다룹니다.IO.

systemd로 이 문제를 해결하는 방법에 대한 더 긴 기사가 있습니다. http://savanne.be/articles/deploying-node-js-with-systemd/

기억해야 할 몇 가지 사항:

  • 누가 프로세스 모니터링을 시작합니까?Forever는 훌륭한 도구이지만 지속적으로 운영하기 위해서는 모니터링 도구가 필요합니다.그건 좀 바보같네요, 그냥 init 시스템을 사용하는 게 어때요?
  • 프로세스를 적절하게 모니터링할 수 있습니까?
  • 여러 백엔드를 실행하고 있습니까?그렇다면, 리소스 사용 측면에서 다른 사용자들의 발목을 잡는 것을 방지하기 위한 대비책이 마련되어 있습니까?
  • 서비스가 항상 필요할까요?그렇지 않은 경우 소켓 활성화를 고려합니다(문서 참조).

이 모든 것들은 systemd로 쉽게 이루어집니다.

루트 액세스 권한이 있는 경우 백그라운드에서 안전하게 실행되도록 데몬을 설정하는 것이 좋습니다.Debian과 Ubuntu를 위한 방법은 Run Node.js의 블로그 게시물 Ubuntu에서 서비스로 실행에서 확인할 수 있습니다.

영원이 그 묘기를 부릴 겁니다.

@케빈: 당신은 공정을 잘 죽일 수 있어야 합니다.서류를 다시 한번 확인해 보겠습니다.만약 당신이 오류를 재현할 수 있다면 GitHub에 이슈로 올리는 것이 좋을 것입니다.

사용해 보십시오. http://www.technology-ebay.de/the-teams/mobile-de/blog/deploying-node-applications-with-capistrano-github-nginx-and-upstart.html

Capistrano, Upstart 및 Nginx와 함께 Node.js 앱을 배포하기 위한 유용하고 상세한 가이드

Box9에서 말했듯이, Forever는 생산 코드에 적합한 선택입니다.그러나 클라이언트에서 SSH 연결이 닫혀 있는 경우에도 프로세스를 계속 진행할 수 있습니다.

운영을 위한 좋은 아이디어는 아니지만, 긴 디버그 세션 중에 또는 긴 프로세스의 콘솔 출력을 따르거나 SSH 연결을 끊는 데 유용하지만 나중에 다시 연결하기 위해 서버에서 터미널을 활성화한 상태로 유지하는 것이 좋습니다(예: 노드 시작).집에서 js 애플리케이션을 사용하고 나중에 회사에서 콘솔에 다시 연결하여 상황이 어떻게 진행되고 있는지 확인합니다.)

서버가 *nix 상자라고 가정하면 셸의 screen 명령을 사용하여 클라이언트 SSH가 닫혀 있더라도 프로세스를 계속 실행할 수 있습니다.아직 설치되지 않은 경우 웹에서 화면을 다운로드/설치할 수 있습니다(Linux인 경우 배포할 패키지를 찾거나 OS X인 경우 MacPorts를 사용합니다).

다음과 같이 작동합니다.

  1. SSH 연결을 처음 열 때 'screen'을 입력합니다. 그러면 화면 세션이 시작됩니다.
  2. 정상적으로 작업 시작(즉, Node.js 애플리케이션 시작)
  3. 작업이 완료되면 터미널을 닫습니다.서버 프로세스가 계속 실행됩니다.
  4. 콘솔에 다시 연결하려면 서버에 SSH를 다시 연결하고 로그인한 다음 'screen -r'을 입력하여 다시 연결합니다.이전 콘솔 컨텍스트가 팝업되어 사용을 다시 시작할 수 있습니다.
  5. 서버에 연결된 상태에서 화면을 종료하려면 콘솔 프롬프트에 '종료'를 입력합니다. 그러면 일반 셸로 이동합니다.

필요한 경우 이와 같이 여러 화면 세션을 동시에 실행할 수 있으며 임의의 클라이언트에서 연결할 수 있습니다.모든 옵션에 대한 설명서를 온라인으로 읽습니다.

영원은 앱을 계속 실행하기 위한 좋은 옵션입니다(그리고 npm은 좋은 모듈로 설치할 수 있습니다).

그러나 배포, 재시작, 명령 실행 등의 원격 관리와 같은 좀 더 진지한 '배포'를 위해서는 노드 확장자가 있는 Capistrano를 사용합니다.

https://github.com/loopj/capistrano-node-deploy

https://paastor.com 은 VPS 또는 다른 서버에 배포하는 비교적 새로운 서비스입니다.코드를 푸시하는 CLI가 있습니다.Pastor는 무료 계층을 가지고 있습니다, 적어도 이것을 게시할 때는 그랬습니다.

이 경우에는 시작 데몬을 사용할 수 있습니다.완벽한 배치 솔루션을 위해서는 카피스트라노를 추천합니다.두 가지 유용한 가이드는 Node.js env 설정 방법과 Capistrano + upstart통한 배포 방법입니다.

node-deploy-server를 사용해 보십시오.개인 서버에 응용프로그램을 배포하기 위한 복잡한 도구 집합입니다.Node.js로 작성되었으며 설치에 npm을 사용합니다.

언급URL : https://stackoverflow.com/questions/4681067/how-do-i-run-a-node-js-application-as-its-own-process

반응형