[node.js] Node.js 애플리케이션을 자체 프로세스로 실행하려면 어떻게합니까?

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

나는 Dreamhost VPS (그들이 VM 이라고 부름 )를 가지고 있으며 Node.js를 설치하고 프록시를 설정할 수있었습니다. 노드를 시작한 SSH 연결을 열린 상태로 유지하는 한 효과적입니다.



답변

2016 답변 : 거의 모든 Linux 배포판에 systemd가 제공 되므로 영원히, monit, 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=nobody
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
WorkingDirectory=/var/www/myapp

[Install]
WantedBy=multi-user.target

유닉스를 처음 접한다면 첫 번째 줄에 /var/www/myapp/app.js있어야 #!/usr/bin/env node합니다.

서비스 파일을 /etc/systemd/system폴더에 복사하십시오 .

로 새로운 서비스에 대해 systemd에 알려주십시오 systemctl daemon-reload.

로 시작하십시오 systemctl start myapp.

로 부팅시 실행되도록 설정하십시오 systemctl enable myapp.

로 로그 참조 journalctl -u myapp

이는 Linux, 2018 년 에디션 에서 노드 앱을 배포하는 방법 에서 가져온 것으로 , 여기에는 .service파일을 포함하여 Linux / 노드 서버를 빌드하기위한 AWS / DigitalOcean / Azure CloudConfig 생성 명령이 포함되어 있습니다.


답변

영원히 사용하십시오 . 별도의 프로세스에서 Node.js 프로그램을 실행하고 죽으면 다시 시작합니다.

용법:

  • forever start example.js 프로세스를 시작합니다.
  • forever list 영원히 시작된 모든 프로세스 목록을 보려면
  • forever stop example.js프로세스 forever stop 0를 중지 하거나 인덱스가 0 인 프로세스를 중지하려면 (로 표시 forever list)

답변

여기에 내 배포 방법에 대해 썼습니다 : node.js 앱 배포

한마디로 :

  • git post-receive hook 사용
  • 빌드 도구 용 Jake
  • 노드의 서비스 래퍼로 시작
  • 다운 된 애플리케이션을 모니터링하고 다시 시작하는 Monit
  • nginx 는 요청을 동일한 서버의 다른 응용 프로그램으로 라우팅

답변

pm2 는 트릭을 수행합니다.

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


답변

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

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

신속하고 더러운 솔루션으로서 당신이 사용할 수있는 nohup node your_app.js &앱이 서버와 함께 종료 방지 할 수 있지만 forever, monit다른 제안 된 솔루션은 더 낫다.


답변

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

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, SSLSocket.IO 와 같은 것들을 다룹니다 .