2013-02-08 2 views
3

나는 Node.jsSocket.io을 사용하여 실시간 앱을 개발 해왔다. 로컬 테스트 단계에서 일부 사용자와 테스트 해보기로하자. 문제는 내가 내 서버에 ssh 세션을 닫으면 사용을 시작한 서버도 중지됨 node app.jsNode.js : 서버 재시동 및 서버 가동 시간, howto?

nohup,을 사용하려고 생각했지만 때때로 서버를 다운시키는 세그먼트 오류 또는 기타 임의 오류가 발생합니다. 나는 1) 내 서버가 언제 추락했는지 (그리고 잘하면 왜) 있는지 알 필요가있다. 그래서 나는 크래시를 줄이기 위해 노력할 수 있고 다시 시작하도록 할 수있다. 또한 서버를 직접 다시 시작하기 위해 깨어나 지 못할 수도 있으므로 daemon 일종의 서비스는 좋을 것입니다.

forever은 npm을 통해 사용할 수 있지만 0.8.x보다 최신 노드 버전과 호환되지 않으며 0.9.1을 실행 중이며 매우 잘 유지되는 것처럼 보이지 않습니다.

나는 또한 distributionup을 넘어 섰지 만 문서와 예제를 사용하여 괜찮은 앱을 만들지는 못하는 것 같습니다.

다음은 clusteros 모듈을 사용하는 답변입니다. https://stackoverflow.com/a/10997753/1883464

그러나 노드는 노드의 서버를 유지하고 실행에 대한 응답, 사례의 부족 및 토론 (그리고 자신의 코드를 업데이트!) 나는 시작 했어 실제 프로덕션 환경에서 함께 실험 http://nodejs.org/api/cluster.html

로 클러스터를 나열 내가 처음으로 자신의 앱을 배포하려는 사람처럼 느낀다.) 어떻게 든 나는 내가 찾지 못한이 문제에 대한 몇 가지 공통적 인 대답이 있다는 것을 확신한다.

+1

http://stackoverflow.com/questions/14287429/what-is-the-current-best-practice-for-a-production-deployment-of-node-to-aws/에 대한 내 대답을 살펴보십시오. 14288820 # 14288820 그리고 특히'cluster'의 신뢰성에 대한 논평. –

+1

또한 http://gun.io/blog/tutorial-deploy-node-js-server-with-example/을 읽고 monit를 사용하여 monitore를 사용하고 충돌이 발생하면 node.js 앱을 다시 시작하십시오. – Kaeros

+0

감사[email protected] 거기에 대한 답은 클러스터 방법을 사용하여 좀 더 마음을 사로 잡습니다. – runspired

답변

2

OS 제공 init 시스템은 모든 Node.js 모듈보다 많은 이점을 제공합니다. 재부팅 후 앱이 자동으로 시작되도록하는 유일한 방법은 init 시스템에 연결하는 것입니다.

우리는 우분투와 업 스타트를 많이 사용합니다. Upstart는 크래시시 응용 프로그램을 다시 시작하고 프로세스를 실행하기 전에 사용자 ID/그룹을 설정할 수 있습니다. 루트로 실행하지 마십시오..

업 스타트 파일을 작성하는 것은 약간의 어려움이 있습니다. 우리는 Node Foreman을 사용하여 응용 프로그램 Procfile에서 일련의 업 스타트 파일을 자동으로 생성하고 내 보냅니다.

npm i -g foreman 
cd MY_APP 
nf export -o /etc/init 

이 시작 sudo start foremansudo stop foreman으로 중지 할 수 있습니다 /etc/init에 신출내기 파일 세트를 배치합니다.

위업 만이 유일한 해결책은 아니며 위의 내용은 필요에 따라 다른 OS에 맞게 조정할 수 있습니다. Redhat에서 나는 systemd을 보길 권합니다. 나는 생산을 위해 Mac OSX를 사용하는 것을 권유하지 않겠지 만, 핀치에는 launchd이있다.

+0

"Do not Run As Root"에 대한 이유는 무엇입니까? 또는 공유 호스팅 또는 VPM에 대한 조언입니까? – runspired

+1

응용 프로그램에 취약점이 있고 * 모든 응용 프로그램에 취약점이있는 경우 시스템을 과도하게 노출하고 있습니다. 포트 80에 바인드 할 필요가 있다면 루트로 시작한 다음'process.setuid (...) '를 사용하여 권한을 ** drop **하십시오. –

+0

Node.js를 systemd와 함께 배포하는 방법에 대한 자세한 내용은 http://savanne.be/articles/deploying-node-js-with-systemd/를 확인하십시오. –