Node.js diegimas su nvm ir paleidimas su pm2
Paleiskite serveryje viena komanda (pirmiausia patikrinkite skripto turinį žemiau):
curl -sSL https://cp.lv/scripts/ustanovit-nodejs-pm2.sh | sudo bash…arba su wget:
wget -qO- https://cp.lv/scripts/ustanovit-nodejs-pm2.sh | sudo bashSkripto turinys ustanovit-nodejs-pm2.sh:
#!/usr/bin/env bash
set -e
APP_DIR=/var/www/myapp
# 1. Install nvm and load it into the current shell
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
# 2. Node.js LTS as the default version
nvm install --lts
nvm use --lts
nvm alias default 'lts/*'
# 3. Application dependencies (exact versions from the lock file)
cd "$APP_DIR"
npm ci --omit=dev
# 4. Install pm2 and start the application
npm install -g pm2
pm2 start app.js --name myapp
# 5. Start automatically after a server reboot
sudo env PATH=$PATH:$(dirname "$(command -v node)") \
pm2 startup systemd -u "$USER" --hp "$HOME"
pm2 save
pm2 status
echo "Node.js application myapp is running under pm2."
Kad Node.js programa gamybinėje aplinkoje veiktų stabiliai, jos negalima tiesiog paleisti komanda node app.js SSH sesijoje — ji sustos jums atsijungus. Reikia procesų valdiklio pm2: jis palaiko programą gyvą, perkrauna ją nukritus ir paleidžia po serverio perkrovimo. O patį Node.js patogu diegti per nvm — tada lengva perjungti versijas.
1 žingsnis. nvm diegimas
nvm (Node Version Manager) įdiegia Node.js be root teisių ir leidžia laikyti kelias versijas:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
source ~/.bashrc
Patikrinkite:
nvm --version
2 žingsnis. Node.js LTS diegimas
Diekite LTS versiją — ji stabili ir ilgai palaikoma:
nvm install --lts
nvm use --lts
nvm alias default lts/*
Patikrinkite versijas:
node -v
npm -v
3 žingsnis. Programos paruošimas
Įkelkite kodą (per git clone arba rsync) ir įdiekite priklausomybes gamybiniu režimu:
cd /var/www/myapp
npm ci --omit=dev
npm ci įdiegia tikslias versijas iš package-lock.json — tai nuspėjamiau nei npm install. Patikrinkite, ar programa pasileidžia:
node app.js
Jei pamatėte „server listening on port 3000“ — sustabdykite (Ctrl+C) ir pereikite prie pm2.
4 žingsnis. pm2 diegimas ir paleidimas
Įdiekite pm2 globaliai ir paleiskite programą:
npm install -g pm2
pm2 start app.js --name myapp
Programoms, kurių įėjimo taškas nurodytas package.json faile:
pm2 start npm --name myapp -- run start
Patikrinkite būseną:
pm2 status
pm2 logs myapp
5 žingsnis. Automatinis paleidimas po perkrovimo
Kad pm2 keltų programas serveriui startuojant, sugeneruokite systemd servisą ir išsaugokite procesų sąrašą:
pm2 startup systemd
# įvykdykite komandą, kurią pm2 išves (prasideda nuo sudo env ...)
pm2 save
pm2 save užfiksuoja esamą procesų rinkinį, o pm2 resurrect automatiškai atkuria juos po perkrovimo.
6 žingsnis. Klasterio režimas (pasirinktinai)
Jei programa palaiko kelis darbininkus, pm2 gali paleisti procesą visuose CPU branduoliuose:
pm2 start app.js --name myapp -i max
Tai paskirsto krūvį tarp branduolių be išorinio apkrovos balansuoklio.
Naudingos pm2 komandos
| Užduotis | Komanda |
|---|---|
| Procesų sąrašas | pm2 list |
| Perkrauti | pm2 restart myapp |
| Sklandus perkrovimas | pm2 reload myapp |
| Sustabdyti | pm2 stop myapp |
| Pašalinti iš pm2 | pm2 delete myapp |
| Stebėsena | pm2 monit |
Dažni klausimai
Kam reikalingas nvm, jei Node.js yra apt saugykloje? Ubuntu saugyklos versija dažnai pasenusi. nvm įdiegia bet kurią reikiamą versiją ir leidžia greitai perjungti tarp projektų su skirtingais reikalavimais.
Kuo pm2 restart skiriasi nuo reload?
restart visiškai perkrauna procesą (su trumpa prastova), o reload klasterio režime perkrauna darbininkus paeiliui be prastovos (zero-downtime).
Programa nukrinta — ar pm2 ją pakels?
Taip, pm2 automatiškai perkrauna nukritusį procesą. Sukonfigūruokite --max-restarts ir stebėkite žurnalus, kad esant nuolatinei klaidai perkrovimas neįsisuktų į ciklą.
Kaip apriboti proceso atmintį?
Vėliavėlė --max-memory-restart 300M perkraus programą viršijus limitą — tai apsauga nuo atminties nutekėjimų.
Node.js programoms naudingas greitas CPU ir pakankamai atminties. Serverį galite išsirinkti puslapyje VPS serverio nuoma, o konteinerinėms sąrankoms pravers Docker VPS.