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ć plik package-lock.json oraz zainstalować nowsze wersje zależności zgodne z package.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 miejscu NAZWA 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.

Powrót do strony głównej