Asosiy kontentga o‘tish
Innovialabs

PM2: Node.js ilovalarini prodakshnda qanday ishga tushirish

Amaliyot3 daq

Qisqacha

PM2 Node.js ilovasini doim ishlab turishini ta’minlaydi, yiqilganda qayta ishga tushiradi, cluster mode’da yuklamani yadrolar bo‘ylab taqsimlaydi va server qayta yuklangandan keyin jarayonlarni tiklaydi.

Qisqa javob: PM2 nima uchun kerak

Ilovani node server.js buyrug‘i bilan ishga tushirsangiz, u terminal yopilganda, xatolikda yoki server qayta yuklanganda to‘xtaydi. PM2 — Node.js uchun jarayonlar menejeri bo‘lib, u:

  • ilovani fonda ushlab turadi va yiqilganda qayta ishga tushiradi;
  • turli CPU yadrolarida bir nechta nusxani ishga tushiradi (cluster mode);
  • kodni uzilishsiz qayta yuklaydi;
  • server qayta ishga tushgandan keyin jarayonlarni tiklaydi;
  • loglarni yig‘adi va resurs sarfini ko‘rsatadi.

O‘rnatish va birinchi ishga tushirish

npm install -g pm2
pm2 start server.js --name api

Asosiy buyruqlar:

BuyruqNima qiladi
pm2 listjarayonlar ro‘yxati va holati
pm2 logs apireal vaqtdagi loglar
pm2 monitterminalda CPU va xotira
pm2 restart apiqattiq qayta ishga tushirish
pm2 reload apiuzilishsiz qayta ishga tushirish
pm2 stop api / pm2 delete apito‘xtatish / ro‘yxatdan olib tashlash

Uzun buyruqlar o‘rniga ecosystem fayli

Sozlamalarni repozitoriyda, ecosystem.config.js faylida saqlash qulayroq:

module.exports = {
  apps: [
    {
      name: "api",
      script: "./dist/server.js",
      instances: "max",
      exec_mode: "cluster",
      max_memory_restart: "500M",
      env: {
        NODE_ENV: "production",
        PORT: 3000,
      },
    },
  ],
};

Ishga tushirish: pm2 start ecosystem.config.js. Shunda konfiguratsiya barcha serverlarda bir xil bo‘ladi va Git tarixida ko‘rinadi. Maxfiy ma’lumotlarni bu faylga qo‘ymang — ularni server muhit o‘zgaruvchilari yoki repozitoriyga tushmaydigan .env orqali uzating.

Cluster mode

Node.js JavaScript’ni bitta oqimda bajaradi, ya’ni bitta jarayon bitta yadrodan foydalanadi. Cluster mode da PM2 bir nechta nusxani ishga tushiradi va kiruvchi ulanishlarni ular o‘rtasida taqsimlaydi. instances: "max" — yadrolar soniga ko‘ra.

Muhim shartlar:

  • ilova stateless bo‘lishi kerak: sessiyalar, kesh va navbatlar jarayon xotirasida emas, tashqi xotirada (Redis, baza) saqlanadi;
  • ilova ichidagi jadvalli vazifalar har bir nusxada bajariladi — ularni alohida chiqaring yoki faqat bittasida ishga tushiring;
  • klasterda WebSocket sticky-sessiyalar yoki tashqi adapterga e’tibor talab qiladi.

Uzilishsiz qayta yuklash

pm2 reload api nusxalarni navbat bilan qayta ishga tushiradi: biri qayta yuklanayotganda boshqalari so‘rovlarga xizmat qiladi. Bu cluster mode’da ishlaydi. Qayta yuklash haqiqatan ham silliq bo‘lishi uchun:

  • SIGINT signalini qayta ishlang — server va baza ulanishlarini to‘g‘ri yoping;
  • kerak bo‘lsa, PM2 ilova haqiqatan tayyor bo‘lishini kutishi uchun wait_ready: true va process.send("ready") dan foydalaning.

Server qayta yuklangandan keyin avtomatik ishga tushish

pm2 startup
# PM2 chiqargan buyruqni bajaring
pm2 save

pm2 startup tizim xizmatini yaratadi, pm2 save esa joriy jarayonlar ro‘yxatini eslab qoladi. Ilovalarni qo‘shgan yoki o‘chirgandan keyin pm2 save ni takrorlang.

Loglarni boshqarish

Odatda loglar ~/.pm2/logs ga yoziladi va o‘z-o‘zidan o‘chirilmaydi. Rotatsiya modulini o‘rnating:

pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 50M
pm2 set pm2-logrotate:retain 10

Aks holda loglar ertami-kechmi diskni to‘ldiradi.

PM2 yoki Docker

PM2Docker
Kirish darajasipastyuqoriroq
Muhitserverga bog‘liqhamma joyda bir xil
Bir nechta til va xizmatlarnoqulaytabiiy
Ko‘p serverlarga masshtablashqo‘ldaorkestrator orqali
Kimga mosbitta server, kichik loyihajamoalar, mikroservislar, CI/CD

Agar sizda bitta VPS va bir-ikkita Node.js ilovasi bo‘lsa, PM2 — oddiy va ishonchli tanlov. Loyiha o‘sib, bir nechta xizmat paydo bo‘lsa va muhitni takrorlanuvchan qilish kerak bo‘lsa, Docker ga o‘ting. Konteyner ichida PM2 odatda kerak emas: qayta ishga tushirishni Docker yoki orkestratorning o‘zi bajaradi, bir nechta nusxa esa alohida konteynerlar sifatida ishga tushiriladi.

Ko‘p beriladigan savollar

restart barcha jarayonlarni to‘xtatib, qaytadan ishga tushiradi — qisqa uzilish bo‘ladi. reload nusxalarni navbat bilan qayta ishga tushiradi va cluster mode’da uzilishsiz ishlaydi.

Bunda yordam beramiz

O‘zingiz shug‘ullanmasdan natija olishni istasangiz — biz har kuni shu bilan shug‘ullanamiz.

Loyihani muhokama qilish

Yana o‘qing

G‘oya yoki vazifangiz bormi? Bizga aytib bering

Ish kuni davomida javob beramiz va yechim taklif qilamiz. Konsultatsiya bepul.