Node.js nvm-iga ja rakenduse käivitamine pm2-ga
Käivita serveris ühe käsuga (kontrolli enne skripti sisu allpool):
curl -sSL https://cp.lv/scripts/ustanovit-nodejs-pm2.sh | sudo bash…või wgetiga:
wget -qO- https://cp.lv/scripts/ustanovit-nodejs-pm2.sh | sudo bashSkripti sisu 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."
Et Node.js-rakendus töötaks toodangus stabiilselt, ei saa seda lihtsalt SSH-sessioonis käsuga node app.js käivitada — väljalogimisel see peatub. Vaja on protsessihaldurit pm2: see hoiab rakenduse elus, taaskäivitab selle tõrke korral ja käivitab pärast serveri taaskäivitust. Node.js-i ennast on mugav paigaldada nvm-iga — siis on versioone lihtne vahetada.
Samm 1. nvm-i paigaldamine
nvm (Node Version Manager) paigaldab Node.js-i ilma root-õigusteta ja lubab hoida mitut versiooni korraga:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
source ~/.bashrc
Kontrolli:
nvm --version
Samm 2. Node.js LTS-i paigaldamine
Paigalda LTS-versioon — see on stabiilne ja saab pikaajalist tuge:
nvm install --lts
nvm use --lts
nvm alias default lts/*
Kontrolli versioone:
node -v
npm -v
Samm 3. Rakenduse ettevalmistus
Lae kood alla (git clone või rsync abil) ja paigalda sõltuvused toodangurežiimis:
cd /var/www/myapp
npm ci --omit=dev
npm ci paigaldab täpsed versioonid failist package-lock.json — see on ettearvatavam kui npm install. Kontrolli, et rakendus käivitub:
node app.js
Kui nägid teadet «server listening on port 3000», peata rakendus (Ctrl+C) ja liigu pm2 juurde.
Samm 4. pm2 paigaldamine ja käivitamine
Paigalda pm2 globaalselt ja käivita rakendus:
npm install -g pm2
pm2 start app.js --name myapp
Rakendustele, mille sisenemispunkt on kirjas failis package.json:
pm2 start npm --name myapp -- run start
Kontrolli olekut:
pm2 status
pm2 logs myapp
Samm 5. Automaatne käivitus pärast taaskäivitust
Et pm2 tõstaks rakendused serveri käivitumisel üles, genereeri systemd-teenus ja salvesta protsesside loend:
pm2 startup systemd
# käivita käsk, mille pm2 väljastab (see algab sõnadega sudo env ...)
pm2 save
pm2 save fikseerib praeguse protsessikomplekti ja pm2 resurrect taastab need pärast taaskäivitust automaatselt.
Samm 6. Klastrirežiim (valikuline)
Kui rakendus toetab mitut töölist, saab pm2 käivitada protsessi kõigil protsessori tuumadel:
pm2 start app.js --name myapp -i max
See jaotab koormust tuumade vahel ilma välise koormusjaoturita.
Kasulikud pm2 käsud
| Ülesanne | Käsk |
|---|---|
| Protsesside loend | pm2 list |
| Taaskäivitus | pm2 restart myapp |
| Sujuv taaslaadimine | pm2 reload myapp |
| Peatamine | pm2 stop myapp |
| Eemaldamine pm2-st | pm2 delete myapp |
| Monitooring | pm2 monit |
Korduma kippuvad küsimused
Milleks nvm, kui Node.js on aptis olemas? Ubuntu hoidla versioon on sageli aegunud. nvm paigaldab mis tahes vajaliku versiooni ja lubab kiiresti vahetada erinevate nõuetega projektide vahel.
Mille poolest erineb pm2 restart käsust reload?
restart taaskäivitab protsessi täielikult (lühikese seisakuga), reload taaskäivitab klastrirežiimis töölised järjest ilma seisakuta (zero-downtime).
Rakendus kukub kokku — kas pm2 tõstab selle üles?
Jah, pm2 taaskäivitab kokku kukkunud protsessi automaatselt. Seadista --max-restarts ja jälgi logisid, et püsiva vea korral taaskäivitus tsüklisse ei jääks.
Kuidas piirata protsessi mälukasutust?
Lipp --max-memory-restart 300M taaskäivitab rakenduse limiidi ületamisel — see on kaitse mälulekete vastu.
Node.js-rakendused võidavad kiirest protsessorist ja piisavast mälust. Serveri saab valida lehel VPS-i rent, konteinerdatud ehituste jaoks kulub ära Dockeri VPS.