Uruchomienie aplikacji Node.js
💡 Autorem poradnika jest Ozelot.
W tym poradniku pokażę ci jak uruchomić na serwerze swoją aplikację napisaną w technologii Node.js. Zajmiemy się tutaj bardzo podstawowym przykładem prostej aplikacji takiej jak np. boty Discord, process workery itp.
Przykładowa aplikacja
Aplikacja którą chcemy uruchomić może być zbudowana w mniej-więcej taki sposób. Oto przykład naszej aplikacji:
.
├── node_modules
├── index.js
├── package.json
└── package-lock.json
Umieszczenie plików aplikacji na serwerze
Na początku umieścimy wszystkie pliki aplikacji (pomijając katalog node_modules
i plik package-lock.json
) na serwerze na przykład w ten sposób, w wybranym katalogu. Na potrzeby poradnika użyjemy katalogu /srv/app
.
Instalacja Node.js
Kolejnym krokiem będzie zainstalowanie Node.js wraz z NPM na naszym serwerze.
Na dystrybucjach bazujących na Debianie (w tym Ubuntu) zainstalujemy za pomocą apt.
curl -sL https://deb.nodesource.com/setup_22.x | sudo -E bash -
apt -y install nodejs make gcc g++
Podmień numer wersji jeśli jest taka potrzeba.
Natomiast w dystrybucjach takich jak Alpine (dotyczy serwerów Frog) zrobimy to za pomocą apk.
sudo apk add --update nodejs npm
W dalszej części poradnika przy wyszczególnianiu poszczególnych opcji dla wyżej wymienionych grup dystrybucji będę posługiwał się nazwami Debian i Alpine.
Następnie możemy zweryfikować poprawność instalacji w ten sposób:
node -v
npm -v
Jeśli zwróciło nam wersję to oznacza, że wszystko zostało zainstalowane prawidłowo.
Instalacja zależności
Po udanej instalacji możemy przejść do przygotowania naszej aplikacji do uruchomienia. W tym celu, będąc w katalogu naszej aplikacji (cd /srv/app
) musimy zainstalować pakiety wymagane przez naszą aplikację:
npm ci
Alternatywnie możemy użyć także
npm install
, jednak może on zmodyfikować plikpackage-lock.json
oraz zainstalować nowsze wersje zależności zgodne zpackage.json
, co nie gwarantuje identycznego środowiska.
Powyższe zadziała tylko wtedy, gdy w pliku package.json
zostały wcześniej uwzględnione wszystkie wymagane zależności. Jeśli tak nie jest, konieczne będzie ręczne doinstalowanie brakujących pakietów za pomocą npm install NAZWA
(gdzie NAZWA
to nazwa pakietu).
Jeśli wszystkie pakiety zostały zainstalowane prawidłowo możemy przejść dalej.
Testowe uruchomienie aplikacji
Pozostajemy w katalogu naszej aplikacji. Nadszedł czas na jej uruchomienie. W tym celu używamy polecenia node PLIK_URUCHAMIAJACY.js
, na naszym przykładzie będzie to:
node index.js
index.js
to plik uruchamiający aplikację, jeśli ma inną nazwę, podmień ją.
Aplikacja powinna zostać uruchomiona, a my powinniśmy zobaczyć jej logi.
Aby w tym momencie zabić aplikację używamy kombinacji klawiszy Ctrl + C.
Aplikację można w ten sposób uruchomić testowo, jednak jej działanie zostanie przerwane po zamknięciu sesji SSH. W celu uruchomienia aplikacji w sposób trwały, odpowiedni dla środowiska produkcyjnego, należy wykonać dodatkowe kroki opisane w kolejnym punkcie.
Uruchomienie aplikacji w tle
W tym poradniku przedstawię 2 narzędzia pozwalające na osiągnięcie tego. Dla ułatwienia nadal pozostajemy w katalogu aplikacji.
Sposób 1 - screen
screen to prosty menedżer sesji terminalowych, który pozwala uruchomić proces w osobnej sesji, odłączyć ją i wrócić do niej później.
Instalacja screen
Na nowszych wersjach dystrybucji narzędzie screen może nie być domyślnie zainstalowane (sprawdzisz to wpisując screen
). Jeśli nie jest - należy je zainstalować:
Dla Debiana:
apt install screen
Dla Alpine:
sudo apk add screen
Utworzenie nowej sesję screen
screen -S NAZWA
W miejscu
NAZWA
wprowadź dowolną nazwę kojarzoną z twoją aplikacją.
Zostaniemy przeniesieni do nowej sesji. Tam uruchamiamy aplikację, podobnie jak wcześniej:
node index.js
index.js
to plik uruchamiający aplikację, jeśli ma inną nazwę, podmień ją.
Aby opuścić sesję bez zabijania procesu, możemy użyć CTRL + A + D.
Natomiast aby zatrzymać aplikację (np. aby ją zrestartować) możemy wewnątrz sesji użyć CTRL + C.
Powrót do istniejącej sesji
Jeśli chcemy powrócić do sesji, np. aby przejrzeć logi aplikacji, możemy to zrobić w następujący sposób:
screen -r NAZWA
W miejscu
NAZWA
wprowadź wcześniej ustawioną nazwę twojej sesji.
Wyświetlenie listy aktywnych sesji
Jeśli chcemy sprawdzić listę aktywnych sesji, wraz z nazwami, możemy zrobić to w następujący sposób:
screen -ls
Zabicie sesji
Jeśli chcemy zabić sesję (całkowicie usunąć ją), możemy zrobić to w następujący sposób:
screen -S NAZWA -X quit
W miejscu
NAZWA
wprowadź wcześniej ustawioną nazwę twojej sesji.
Alternatywnie, możemy także zabić wszystkie sesje:
pkill screen
Sposób 2 - pm2
pm2 to zaawansowany menedżer procesów dedykowany aplikacjom Node.js. Pozwala na automatyczny restart aplikacji, monitorowanie jej działania oraz logowanie.
Instalacja pm2
pm2 instalujemy w następujący sposób:
npm install -g pm2
Uruchomienie aplikacji
Możemy uruchomić aplikację za pomocą pm2 w następujący sposób:
pm2 start index.js --name NAZWA
_
index.js
to plik uruchamiający aplikację, jeśli ma inną nazwę, podmień ją. W miejscuNAZWA
wprowadź dowolną nazwę kojarzoną z twoją aplikacją.
Lista uruchomionych aplikacji
Możemy wyświetlić listę uruchomionych za pomocą pm2 aplikacji
pm2 list
Aby opuścić podgląd logów używamy CTRL + C.
Podgląd logów aplikacji
Aby wyświetlić podgląd logów aplikacji, wykonujemy:
pm2 logs NAZWA
W miejscu
NAZWA
wprowadź wcześniej ustawioną nazwę kojarzoną z twoją aplikacją.
Restart, zatrzymywanie, ponowne uruchomienie aplikacji
Aplikację możemy zrestartować za pomocą polecenia:
pm2 restart NAZWA
Możemy ją także łatwo zatrzymać:
pm2 stop NAZWA
A także ponownie uruchomić:
pm2 start NAZWA
W miejscu
NAZWA
wprowadź wcześniej ustawioną nazwę kojarzoną z twoją aplikacją.
Usunięcie aplikacji
Aby usunąć aplikację z pm2 możemy zrobić to następującym poleceniem:
pm2 delete NAZWA
W miejscu
NAZWA
wprowadź wcześniej ustawioną nazwę kojarzoną z twoją aplikacją.
Automatyczne uruchomienie aplikacji po reboocie systemu
pm2 pozwala na automatyczne uruchomienie aplikacji po restarcie całego systemu. W tym celu, po skonfigurowaniu i uruchomieniu aplikacji należy wykonać:
pm2 startup
pm2 save
Podsumowanie
Nasza aplikacja została uruchomiona na serwerze i działa w tle — niezależnie od aktywności terminala czy sesji SSH. Dzięki takim narzędziom jak screen lub pm2 możemy w prosty sposób zarządzać jej działaniem, monitorować logi, restartować ją, a nawet zapewnić jej automatyczne uruchomienie po restarcie serwera.