2014-10-07 12 views
37

Jak widać na podstawie mojego pytania, jestem nowy w tym ...Jak pozostawić serwer Node.js na EC2 działający wiecznie?

Zbudowałem swoją pierwszą stronę internetową, skonfigurowałem swój pierwszy serwer Node.js, aby go wyświetlał, a następnie przesyłałem wszystko na żywo na EC2.

Testowałem wszystko na moim adresie IP EC2 i wszystko wydaje się działać.

Do tej pory testowałem swoją aplikację lokalnie, więc ma sens, że gdybym zamknął terminal, app.js przestałby działać, aby nic nie zostało dostarczone na localhost.

Teraz, gdy mój serwer jest na EC2, dzieje się to samo ("oczywiście" można powiedzieć ...) za każdym razem, gdy zamykam terminal.

Więc moje pytanie brzmi: w jaki sposób mogę zachować mój serwer node.js uruchomionych na EC2 dla jak ... forever..so że moja strona pozostaje wiecznie żyć .. :)

Czytałem coś o module węzła nazywane "na zawsze", ale zastanawiam się (bycie nowym i wszystkim). Dlaczego ta "wieczna" funkcjonalność nie jest domyślnym ustawieniem systemu Node.js-EC2?

Mam na myśli, popraw mnie, jeśli się mylę, ale czy nie chodzi o to, aby skonfigurować serwer internetowy i pchać go na żywo, aby pozostał na zawsze? Czy to nie jest to, co serwery i tak mają robić (nieskończenie nasłuchując żądań)? A jeśli tak, to dlaczego potrzebujemy dodatkowych modułów/ustawień, aby to osiągnąć?

Dzięki za pomoc .. Jak widać nie jestem tylko szuka rozwiązania, ale o wyjaśnienie, jak również dlatego, że mam naprawdę mylić .. :-)

EDIT (kilka szczegółów ty może wymagać) - Po zainstalowaniu moją aplikację na EC2 to są kroki, które śledzę na terminalu (Aplikacja działa na Amazon Linux przy okazji):

  • wpisaniu ssh -i xxxxxxxxxxx.pem EC2 użytkownikowi @ ec2-xx-xx-xx-x.eu-west-1.compute.amazonaws.com na terminalu terminal

  • Po zalogowaniu na maszynę Amazon I następnie przejdź do odpowiedniego folderu i uruchomić węzeł app.js

  • Istnieją 3 foldery w komputerze: node, node_modules i *name of my app*

  • app.js przebywa w *name of my app*

  • Po tym, witryna żywo idzie na mojej EC2 OD

  • Gdy zamknę terminalu, wszystko jest wyłączony

Odpowiedz

45

Przed powołać node.js, uruchom polecenie:

screen

stworzy trwałe środowisko, które pozwoli na proces kontynuować po rozłączeniu.

Po ponownym połączeniu, można użyć tego polecenia, aby podłączyć się do tego środowiska:

screen -r

Oto losowo link, aby dowiedzieć się więcej na temat ekranu:

http://www.rackaid.com/blog/linux-screen-tutorial-and-how-to/

Jednak tym nie pomoże ci, jeśli twoja instancja EC2 zostanie ponownie uruchomiona. Jest na to wiele różnych sposobów. Dodanie polecenia startowego do /etc/rc.local jest jednym ze sposobów. Oto link do przewodnika Amazon, który zawiera dodanie czegoś do /etc/rc.local.

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/building-shared-amis.html

Nadzieja to pomaga,

James

+0

Dla celów testowych/programisty, działa to jak wdzięk dla konfiguracji NodeJS Express. Tak się cieszę, że nie muszę już dłużej otwierać terminalu Putty! Inna uwaga - wskazówka dla początkujących (takich jak ja): Aby zamknąć uruchomiony proces w środowisku 'screen', naciśnij * CTRL + C *, aby go zatrzymać (jeśli to nie zadziała, może być konieczne znalezienie ID procesu lub PID i zabij go przez nowy Putty/terminal działający z głównego środowiska), a na koniec wpisz 'exit', aby zamknąć środowisko ekranu i powrócić do głównego. – bigp

+0

Co jeśli chciałbym zachować wiele rzeczy działających, takich jak serwer mongodb, serwer nodejs, serwer reagowania itp.? Wierzę, że screen -r zabrałby mnie tylko do tego, który jest inicjowany przez 'screen'. Szukam czegoś takiego jak 'screen myScreenOne',' screen myScreenTwo', etc? Możemy to zrobić? – Aditya

+0

Czy można bezpiecznie używać tego w środowisku produkcyjnym? I czy nadaje się do aplikacji Java? –

1

Albo użyć tmux Wystarczy wpisać serwer węzła run ekranem tmux Ctrl + b Hit D i gotowe.

17

Przez pewien czas pracowałem z poprawną odpowiedzią, ale czasami ekran kończy się bez powodu, ekran nie ma również ładowarki balansowej i innych funkcji, które w środowisku produkcyjnym powinno się troszczyć, Obecnie używam komponentu npm, aby to zrobić praca.

https://www.npmjs.com/package/pm2

To jest tak łatwe w obsłudze.

$ npm install pm2 -g 

potem po prostu uruchomić aplikację z PM2 jak ten

$ pm2 start app.js 

W powyższym linku można znaleźć diferents zadań do wykonania, jeśli trzeba.

Mam nadzieję, że to pomoże początkującym jak ja.

+0

Próbowałem pm2, ale moja strona zaczęła podawać błędy, więc wróciłem do rozwiązania "ekranowego", które działa teraz. Zbadam dalej i zobaczę, co się dzieje. –

+0

To wydaje się być bardzo szybkim i prostym rozwiązaniem. Pracuję dla mnie. – Brent

Powiązane problemy