Jaki jest najlepszy sposób wdrożenia Node.js?
Mam Dreamhost VPS (tak nazywają maszynę wirtualną ) i udało mi się zainstalować Node.js i skonfigurować serwer proxy. Działa to świetnie, o ile utrzymuję połączenie SSH, które rozpocząłem z otwartym węzłem.
node.js
service
deployment
daemon
szacunek Kod
źródło
źródło
Odpowiedzi:
Odpowiedź 2016 : prawie każda dystrybucja Linuksa jest dostarczana z systemd, co oznacza, że na zawsze, monitorowanie, PM2 itp. Nie są już potrzebne - Twój system operacyjny już obsługuje te zadania .
Utwórz
myapp.service
plik (oczywiście zastępując „myapp” nazwą aplikacji):Uwaga: jeśli dopiero zaczynasz korzystać z Uniksa:
/var/www/myapp/app.js
powinien być#!/usr/bin/env node
w pierwszej linii.Skopiuj plik usługi do
/etc/systemd/system
folderu.Poinformuj systemd o nowej usłudze za pomocą
systemctl daemon-reload
.Zacznij od
systemctl start myapp
.Włącz go, aby uruchamiał się przy rozruchu
systemctl enable myapp
.Zobacz dzienniki z
journalctl -u myapp
To pochodzi z tego, jak wdrażamy aplikacje węzłów w systemie Linux, edycja 2018 , która obejmuje również polecenia do generowania AWS / DigitalOcean / Azure CloudConfig do budowania serwerów Linux / węzłów (w tym
.service
pliku).źródło
Failed to issue method call: Unit name ... is not valid.
?/etc/systemd/system
może być konieczne uruchomieniesystemctl daemon-reload
(systemd zwykle powie ci, czy jest to potrzebne). TBH najlepiej zadać to jako osobne pytanie./etc/systemd/system
, możesz po prostu użyćsystemctl enable /full/path/to/myapp.service
, który tworzy dowiązanie symboliczne/etc/systemd/system
dla ciebie .node
jest wywoływany/var/www/myapp/app.js
sam. W Uniksie, jeśli plik jest wykonywalny, a pierwsza linia zaczyna się#!/some/file
od pliku, będzie interpretowany z tym plikiem binarnym. Google „interpreter Unix”, aby dowiedzieć się więcej.Posługiwać się zawsze . Uruchamia programy Node.js w osobnych procesach i uruchamia je ponownie, jeśli jakiś umiera.
Stosowanie:
forever start example.js
rozpocząć proces.forever list
aby zobaczyć listę wszystkich procesów rozpoczętych na zawszeforever stop example.js
aby zatrzymać proces lubforever stop 0
zatrzymać proces z indeksem 0 (jak pokazano przezforever list
).źródło
forever stop 0
miał błąd i rzeczy po prostu się rozpadły. Próbowałem to zrobić bez rootowania na własnym użytkowniku, abym mógł łatwo wyczyścić, gdy tylko znajdę właściwe rozwiązanie. To może być mój problem. Przyjrzę się temu jeszcze trochę.O mojej metodzie wdrażania pisałem tutaj: wdrażania pisałem Wdrażanie aplikacji node.js
W skrócie:
źródło
pm2 robi sztuczki.
Funkcje obejmują: monitorowanie, ponowne ładowanie gorącego kodu, wbudowany moduł równoważenia obciążenia, automatyczny skrypt uruchamiania i procesy wskrzeszenia / zrzutu.
źródło
Można użyć
monit
,forever
,upstart
lubsystemd
, aby rozpocząć swój serwer.Możesz użyć Lakier lub HAProxy zamiast Nginx (wiadomo, że Nginx nie działa z gniazdami internetowymi).
Jako szybkie i brudne rozwiązanie możesz użyć
nohup node your_app.js &
do zapobiegania aplikacja kończące się z serwerem, aleforever
,monit
i inne proponowane rozwiązania są lepsze.źródło
Stworzyłem skrypt Upstart aktualnie używany dla moich aplikacji:
Dostosuj wszystko przed #########, utwórz plik w /etc/init/your-service.conf i wklej go tam.
Następnie możesz:
źródło
Napisałem dość obszerny przewodnik po wdrażaniu Node.js, z przykładowymi plikami:
Samouczek: Wdrażanie aplikacji Node.js wraz z przykładami
Obejmuje rzeczy takie jak http-proxy, SSL i Socket.IO .
źródło
Oto dłuższy artykuł na temat rozwiązania tego problemu z systememd: http://savanne.be/articles/deploying-node-js-with-systemd/
Kilka rzeczy, o których należy pamiętać:
Wszystkie te rzeczy można łatwo wykonać przy pomocy systemd.
źródło
Jeśli masz dostęp do roota, lepiej skonfiguruj demona, aby działał bezpiecznie i działał w tle. Możesz przeczytać, jak to zrobić dla Debiana i Ubuntu w blogu Uruchom Node.js jako usługę na Ubuntu .
źródło
Wieczność załatwi sprawę.
@Kevin: Powinieneś być w stanie dobrze zabijać procesy. Chciałbym jeszcze trochę sprawdzić dokumentację. Jeśli możesz odtworzyć błąd, dobrze byłoby opublikować go jako problem na GitHub.
źródło
Spróbuj tego: http://www.technology-ebay.de/the-teams/mobile-de/blog/deploying-node-applications-with-capistrano-github-nginx-and-upstart.html
Świetny i szczegółowy przewodnik dotyczący wdrażania aplikacji Node.js za pomocą Capistrano, Upstart i Nginx
źródło
Jak powiedział Box9, Forever jest dobrym wyborem dla kodu produkcyjnego. Możliwe jest jednak także kontynuowanie procesu, nawet jeśli połączenie SSH jest zamknięte od klienta.
Chociaż niekoniecznie jest to dobry pomysł na produkcję, jest to bardzo przydatne, gdy znajduje się w środku długich sesji debugowania lub śledzi wyniki konsolowe długich procesów lub gdy przydatne jest rozłączenie połączenia SSH, ale utrzymanie terminala na serwerze aby połączyć się później (np. uruchomienie aplikacji Node.js w domu i ponowne połączenie z konsolą później w pracy, aby sprawdzić, jak się sprawy mają).
Zakładając, że twój serwer to * nix box, możesz użyć polecenia screen z powłoki, aby proces nadal działał, nawet jeśli klient SSH jest zamknięty. Możesz pobrać / zainstalować ekran z Internetu, jeśli nie jest jeszcze zainstalowany (poszukaj pakietu dla swojej dystrybucji w przypadku Linuksa lub użyj MacPorts w przypadku OS X).
Działa w następujący sposób:
W razie potrzeby możesz mieć wiele sesji ekranu uruchomionych w ten sposób i możesz połączyć się z dowolną z nich z dowolnego klienta. Przeczytaj dokumentację online dla wszystkich opcji.
źródło
nohup
iforever
Forever jest dobrą opcją do utrzymywania działania aplikacji (i npm można zainstalować jako moduł, co jest miłe).
Ale w przypadku poważniejszych „wdrożeń” - takich jak zdalne zarządzanie wdrażaniem, restartowaniem, uruchamianiem poleceń itp. - użyłbym capistrano z rozszerzeniem węzła.
https://github.com/loopj/capistrano-node-deploy
źródło
https://paastor.com to stosunkowo nowa usługa, która wykonuje wdrożenie za Ciebie, na VPS lub innym serwerze. Istnieje interfejs CLI do wypychania kodu. Paastor ma darmowy poziom, przynajmniej tak było w momencie publikowania tego.
źródło
W twoim przypadku możesz użyć demona upstart . Aby uzyskać kompletne rozwiązanie do wdrożenia, mogę zaproponować capistrano . Dwa przydatne przewodniki to: Jak skonfigurować Node.js env i Jak wdrożyć za pomocą capistrano + upstart .
źródło
Spróbuj zainstalować serwer na węźle . Jest to złożony zestaw narzędzi do wdrażania aplikacji na prywatnych serwerach. Jest napisany w Node.js i używa npm do instalacji.
źródło