Node.js juda tez rivojlanadi va har bir loyiha o'z versiyasiga bog'lanib qoladi. Ikki yil oldin yozilgan admin panel eski versiyada ishlaydi, yangi Next.js loyiha esa zamonaviy LTS versiyasini talab qiladi. Tizimga paket menejeri orqali bitta Node.js o'rnatilgan bo'lsa, ikkalasini bir serverda ushlash qiyinlashadi. nvm, ya'ni Node Version Manager, har bir foydalanuvchiga o'z uy papkasida bir nechta Node.js versiyasini saqlash va ular orasida bitta buyruq bilan almashish imkonini beradi.
nvm qanday ishlaydi
nvm oddiy shell skript bo'lib, Node.js versiyalarini foydalanuvchining ~/.nvm papkasiga yuklab oladi. Versiya almashtirilganda u faqat joriy terminal sessiyasining PATH o'zgaruvchisini o'zgartiradi, tizim fayllariga tegmaydi. Shu sababli nvm ishlatish uchun root huquqi kerak emas va bir foydalanuvchining sozlamalari boshqasiga ta'sir qilmaydi. Buning teskari tomoni ham bor: nvm orqali o'rnatilgan Node.js faqat shu foydalanuvchi uchun va faqat nvm yuklangan sessiyada ko'rinadi.
nvm o'rnatish
O'rnatish rasmiy GitHub omboridagi skript orqali bajariladi. Skript versiya raqami bilan chaqiriladi, shuning uchun eng so'nggi relizni nvm repozitoriysidagi README'dan tekshirib oling. Quyidagi misolda v0.40.1 ko'rsatilgan.
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
source ~/.bashrc
nvm --version
Skript ~/.bashrc fayliga nvm'ni yuklaydigan bir necha qator qo'shadi. Agar nvm --version "command not found" desa, terminalni yopib qayta oching yoki source buyrug'ini qayta bajaring. zsh ishlatayotgan bo'lsangiz, qatorlar ~/.zshrc ga qo'shiladi.
Versiyalarni o'rnatish va almashtirish
nvm'da eng ko'p ishlatiladigan buyruqlar bir nechta. Mavjud versiyalar ro'yxatini ko'rish, kerakli versiyani o'rnatish, unga o'tish va standart versiyani belgilash shular jumlasidan. Production uchun odatda LTS, ya'ni uzoq muddat qo'llab-quvvatlanadigan versiyalar tanlanadi, chunki ular uzoqroq vaqt xavfsizlik yangilanishlarini oladi.
nvm ls-remote --lts # mavjud LTS versiyalar
nvm install --lts # eng so'nggi LTS
nvm install 18 # 18.x ning oxirgisi
nvm use 18 # joriy sessiyada 18 ga o'tish
nvm alias default 20 # yangi sessiyalar uchun standart
nvm ls # o'rnatilgan versiyalar
node -v
nvm use faqat ochiq terminalga ta'sir qiladi. Yangi sessiya ochilganda default sifatida belgilangan versiya yuklanadi. Shuning uchun serverda eng ko'p ishlatiladigan versiyani standart qilib qo'yish, qolganlariga esa kerak bo'lganda o'tish qulay.
.nvmrc fayli: loyiha o'z versiyasini eslab qoladi
Har safar qaysi loyiha qaysi versiyada ishlashini eslab yurish shart emas. Loyiha papkasiga .nvmrc nomli fayl yaratib, ichiga versiya raqamini yozsangiz, shu papkada nvm use buyrug'i parametrsiz ham to'g'ri versiyani tanlaydi. Bu fayl Git'da saqlanadi va jamoadagi har bir dasturchi bir xil versiyada ishlaydi.
cd /var/www/eski-panel
echo "18" > .nvmrc
nvm install # .nvmrc dagi versiyani o'rnatadi
nvm use # .nvmrc dagi versiyaga o'tadi
Qo'shimcha ravishda package.json faylidagi engines maydonida ham kerakli versiya oralig'ini ko'rsatish foydali. Bu nvm'ni boshqarmaydi, lekin noto'g'ri versiyada o'rnatishga urinilganda ogohlantirish beradi.
PM2, cron va systemd bilan ishlatish
Eng ko'p uchraydigan muammo shu yerda paydo bo'ladi. nvm faqat interaktiv shell'da yuklanadi, cron vazifalari va systemd xizmatlari esa ~/.bashrc ni o'qimaydi. Natijada terminalda hamma narsa ishlaydi, lekin cron'dagi skript "node: command not found" deb yiqiladi. Yechim oddiy: bunday joylarda Node.js'ga to'liq yo'l ko'rsating.
nvm which 20
# /home/deploy/.nvm/versions/node/v20.x.x/bin/node
# crontab ichida
*/10 * * * * /home/deploy/.nvm/versions/node/v20.18.0/bin/node /var/www/misol-app/jobs/sync.js
Yuqoridagi v20.18.0 faqat misol, o'zingizdagi aniq yo'lni nvm which natijasidan oling. PM2 bilan esa vaziyat biroz osonroq: PM2'ni kerakli versiya tanlangan sessiyada o'rnatsangiz, u ishga tushirgan ilovalar shu versiyadan foydalanadi. Turli loyihalar turli versiyada ishlashi kerak bo'lsa, ecosystem faylida interpreter maydoniga aniq yo'lni yozish mumkin.
apps: [{
name: "eski-panel",
script: "index.js",
interpreter: "/home/deploy/.nvm/versions/node/v18.20.4/bin/node"
}]
Node.js versiyasini yangilagandan keyin pm2 startup buyrug'ini qayta bajarish kerak bo'lishi mumkin, chunki startup skriptida eski versiya yo'li yozilgan bo'ladi. PM2 bu haqda o'zi ogohlantiradi.
Amaliy misol: bitta VPS'da ikki loyiha
Samarqanddagi kichik veb-studiya bitta VPS'da ikki mijoz loyihasini saqlaydi. Birinchisi misol.uz uchun 2022 yilda yozilgan Express panel bo'lib, u Node.js 18 dan yuqorida ba'zi eski paketlar tufayli ishlamaydi. Ikkinchisi example.uz uchun yangi Next.js sayt, u Node.js 20 yoki undan yuqorini talab qiladi. Studiya deploy foydalanuvchisiga nvm o'rnatib, har ikki versiyani yukladi, har bir loyiha papkasiga .nvmrc qo'ydi va PM2 ecosystem faylida har biriga o'z interpreter yo'lini yozdi. Endi eski panelni yangilash yangi saytga ta'sir qilmaydi.
Keraksiz versiyalarni tozalash
Vaqt o'tishi bilan ~/.nvm papkasida ishlatilmaydigan versiyalar to'planib qoladi va disk joyini egallaydi. Ularni o'chirishdan oldin hech bir PM2 ilovasi yoki cron vazifasi shu versiyaga bog'lanmaganini tekshiring.
nvm ls
nvm uninstall 16
nvm cache clear
Agar sizga bir nechta Node.js versiyasi bilan erkin ishlash muhim bo'lsa, sayt.uz kabinetidan VPS olib, nvm'ni o'z foydalanuvchingiz ostida sozlashingiz mumkin. Bu usul tizim paketlariga tegmaydi va har bir loyiha o'z muhitida qoladi.