PM2 protsessihaldur Veebimajutuse serveris
Kuidas hoida Node.js rakendus töös: käivitamine, jälgimine, uuendamine ja veaotsing
1. Mis on PM2 ja milleks seda vaja on
Kui käivitad Node.js rakenduse käsuga node server.js, töötab see ainult seni, kuni SSH-ühendus on avatud. PM2 on protsessihaldur, mis:
-
käivitab rakenduse taustal, nii et see jääb tööle ka pärast SSH-ühenduse sulgemist;
-
käivitab rakenduse uuesti, kui see jookseb kokku;
-
kogub rakenduse väljundi logifailidesse;
-
jätab meelde, millised rakendused peavad töös olema (käsk pm2 save).
Kuidas PM2 Veebimajutuses töötab
- PM2 aktiveeritakse iseteeninduses: Veebiserver → PM2 ja Node.JS.
- Iga SSH-kasutaja saab oma PM2 (andmed on kaustas ~/.pm2). Sa ei näe teiste kasutajate rakendusi.
- Rakendusi saab hallata kahel viisil: SSH kaudu käsurealt (pm2 …) või iseteeninduses PM2 lehel. Mõlemad näitavad sama nimekirja.
- PM2 käivitab rakenduse keskkonnas, kus on olemas muutuja ELKDATA_APP_IP (sinu rakenduste IP-aadress).
2. Enne alustamist
- PM2 on iseteeninduses aktiveeritud (leht ütleb „PM2 protsessihaldur on aktiveeritud").
- Rakenduse kood on serveris, nt ~/apps/ulesanded, ja npm install on tehtud.
- Rakendus kuulab aadressil process.env.ELKDATA_APP_IP ja pordil, mis on lisatud portide suunamisse (vt juhendit „Portide suunamine").
- Käsitsi node server.js käivitamisel ilmub logisse Server listening on 10.0.10.128:3000 (IP võib erineda).
Näpunäide: Kontrolli enne PM2 kasutamist alati, et rakendus käivitub käsitsi. Siis tead, et viga ei ole PM2-s.
3. Rakenduse käivitamine
Viis A. SSH ja seadistusfail (soovitatav)
Seadistusfail ecosystem.config.js kirjeldab rakendust ühes kohas. Nii käivitub rakendus alati ühtemoodi.
module.exports = {
apps: [
{
name: 'ulesanded',
cwd: __dirname, // käivita alati rakenduse kaustast (siis leitakse ka .env)
script: 'server.js',
},
],
};
| Väli | Mida tähendab |
| name | Rakenduse nimi PM2-s. Seda kasutad kõigis käskudes (pm2 restart ulesanded). Iga rakenduse nimi peab olema erinev. |
| cwd | Kaust, kust rakendus käivitatakse. __dirname tähendab „kaust, kus see fail asub". See on oluline, sest .env otsitakse töökaustast. |
| script | Fail, mida käivitatakse. Suhteline cwd-st. |
Käivita serveris rakenduse kaustas:
cd ~/apps/ulesanded
pm2 start ecosystem.config.js
pm2 save
Teadmiseks: Esimesel käivitusel prindib PM2 suure ASCII-logo ja teate „Spawning PM2 daemon". See on normaalne.
Viis B. Iseteenindus
Iseteeninduses (Veebiserver → PM2 ja Node.JS) on vorm, kuhu sisestad:
- Rakenduse nimi, nt ulesanded;
- Skripti teekond, mis on suhteline sinu kodukataloogist, nt apps/ulesanded/server.js.
Skriptifail peab enne lisamist serveris olemas olema. Pärast lisamist ilmub rakendus nimekirja „Aktiivsed rakendused".
Näpunäide: Käsurealt (viis A) lisatud rakenduse väljundlogi ei näita iseteeninduses ajatempleid. Ajatemplitega logid saad, kui lisad rakenduse iseteeninduse kaudu. Kui rakendus on juba käsurealt lisatud, käivita või taaskäivita see iseteeninduse nuppudega.
4. Oleku jälgimine
Käsurealt
pm2 status
pm2 logs ulesanded --lines 50 --nostream
pm2 show ulesanded
pm2 status näitab tabelit. Olulisemad veerud:
| Veerg | Tähendus |
| status | online = töötab. errored = jookseb kokku. stopped = peatatud. |
| ↺ (restarts) | Mitu korda on PM2 rakenduse uuesti käivitanud. Kui see arv kasvab kogu aeg, jookseb rakendus kokku. Vaata logi. |
| uptime | Kui kaua rakendus on järjest töötanud. |
| mem | Rakenduse mälukasutus. |
| mode | Tavaliselt fork (üks protsess). |
Iseteeninduses
PM2 lehel on nimekiri aktiivsetest rakendustest (nimi, staatus, skript, uptime, mälu). Klõpsa Halda.
Avanevad:
-
rakenduse skripti täielik tee, olek, uptime ja mälukasutus;
-
kolm nuppu (taaskäivita, peata, kustuta);
-
Väljundlogi (rakenduse console.log väljund).
5. Käskude ülevaade
| Käsk | Mida teeb | Pärast pm2 save? |
| pm2 start ecosystem.config.js | Käivitab rakenduse | Jah |
| pm2 status | Näitab rakendusi | - |
| pm2 logs ulesanded --lines 100 | Näitab logi viimast 100 rida | - |
| pm2 show ulesanded | Näitab rakenduse üksikasju | - |
| pm2 restart ulesanded | Taaskäivitab rakenduse | Soovitatav |
| pm2 reload ulesanded | Fork-režiimis sama mis restart | Soovitatav |
| pm2 stop ulesanded | Peatab rakenduse | Jah |
| pm2 delete ulesanded | Eemaldab rakenduse PM2-st | Jah |
| pm2 flush ulesanded | Tühjendab logid | - |
| -pm2 save |
Salvestab nimekirja | - |
6. Miks pm2 save on oluline
pm2 save kirjutab praeguse töötavate rakenduste nimekirja faili ~/.pm2/dump.pm2. Rakendused taastuvad pärast serveri hooldust või taaskäivitust just selle nimekirja põhjal. Kui pm2 save on tegemata, võib rakendus jääda pärast taaskäivitust käivitamata ja sait on maas.
| Tegid | Kas pm2 save on vaja? |
| Käivitasid uue rakenduse | Jah |
| Kustutasid rakenduse (pm2 delete) | Jah, muidu taastub see taaskäivitusel |
| Peatasid rakenduse ja tahad, et see jääks peatatuks | Jah |
| Muutsid rakenduse nime või ecosystem.config.js faili | Jah |
| Tegid pm2 restart või pm2 reload | Ei ole vaja, aga see ei tee ka halba |
| Käivitasid või peatasid rakenduse iseteeninduses | Logi SSH-ga sisse ja tee pm2 save |
Näpunäide: Kahtluse korral tee pm2 save. See on ohutu.
Ära kasuta pm2 startup: See annab käsu, mis nõuab sudo õigust (serveris on kasutaja õigused piiratud). Veebimajutuse keskkonnas piisab käsust pm2 save.
7. Rakenduse uuendamine
cd ~/apps/ulesanded
git pull # või lae uued failid üles scp-ga
npm ci --omit=dev # ainult kui sõltuvused muutusid
pm2 restart ulesanded
pm2 save
Tähelepanu: pm2 reload käitub ühe protsessiga (fork-režiim) nagu restart: rakendus on hetkeks kättesaamatu ja ↺ arv kasvab. Katkestuseta reload vajab seadistuses exec_mode: 'cluster' ja instances seadistust. Mälus hoitud andmed (nt muutujad ja massiivid) kustuvad iga taaskäivitusega.
8. Keskkonnamuutujad
- ELKDATA_APP_IP on PM2 protsessis olemas. Kasuta seda koodis (process.env.ELKDATA_APP_IP), ära kirjuta IP-d käsitsi.
- .env faili loeb rakendus ise igal käivitusel (näites process.loadEnvFile()). Pärast .env muutmist tee pm2 restart ulesanded.
- Ära pane paroole ecosystem.config.js faili, kui see läheb Giti. Kasuta .env faili ja kaitse seda käsuga chmod 600 .env.
- Kui muudad muutujaid ecosystem.config.js failis, kasuta pm2 restart ulesanded --update-env.
9. Logid
PM2 salvestab logid kaustas ~/.pm2/logs/: ulesanded-out.log (tavaline väljund) ja ulesanded-error.log (vead). Neid ei kustutata automaatselt ja nad võivad kasvada lõputult.
pm2 logs ulesanded --lines 100 --nostream # vaata viimast 100 rida
pm2 flush ulesanded # tühjenda logid
pm2 install pm2-logrotate # pikemas plaanis automaatne logide puhastamine
10. Mitu rakendust
- Igal rakendusel on oma nimi ja oma port (1025–65535).
- Iga port lisa portide suunamisse (vt juhendit „Portide suunamine").
- Kui panna samasse ecosystem.config.js faili mitu rakendust, kasuta igaühe jaoks oma name ja script väärtust ning anna igaühele oma port (nt env: { PORT: 3001 } või oma .env fail oma kaustas).
11. Veaotsing
Alusta alati kahest käsust: pm2 status ja pm2 logs <nimi> --lines 100 --nostream.
| Sümptom | Põhjus | Mida teha |
| status on errored | Rakendus jookseb käivitamisel kokku | Vaata logi. Sageli Cannot find module: tee npm install. Või on script tee vale. |
| ↺ arv kasvab kogu aeg | Rakendus jookseb korduvalt kokku | Vaata ulesanded-error.log. Paranda viga, siis pm2 restart. |
| Logis localhost:3000 | ELKDATA_APP_IP on rakenduse keskkonnas tühi | Kontrolli pm2 env 0 väljundist. Kui muutuja puudub, võta ühendust klienditoega. |
| EADDRINUSE | Port on juba kasutusel (sageli vana koopia) | pm2 status, pm2 delete <vana>, pm2 save. Või vali teine port ja muuda see ka portide suunamises |
| EADDRNOTAVAIL | Rakendus kuulab IP-l, mis ei ole sinu oma | Kasuta process.env.ELKDATA_APP_IP. |
| Brauseris 502 | Rakendus ei tööta või kuulab vales kohas | Kontrolli pm2 status ja porti suunamises. |
| Rakendus kadus pärast serveri hooldust | pm2 save jäi tegemata | pm2 start ecosystem.config.js, siis pm2 save. |
| pm2: command not found | PM2 pole aktiveeritud või logisid sisse ilma täieliku sessioonita | Aktiveeri PM2 iseteeninduses ja logi SSH-ga tavapäraselt sisse. |
| Ketas täis | Logid on suureks kasvanud | pm2 flush <nimi> ja pm2-logrotate. |
12. Kontroll-loend
☐ PM2 on iseteeninduses aktiveeritud
☐ Rakendus käivitub käsitsi (node server.js)
☐ pm2 start ecosystem.config.js on tehtud
☐ pm2 status näitab online ja ↺ ei kasva
☐ pm2 save on tehtud
☐ .env on kaitstud (chmod 600)
☐ Rakendus vastab brauseris
Vaata ka
➪ Portide suunamine Veebimajutuse serveris
➪ Node.js rakenduse paigaldamise juhend Veebimajutuse jagatud serverisse