🥟
Hosting

Bun runtime: Node.js o'rniga ishlatish mumkinmi va serverda qanday ishga tushiriladi

11.11.2026
← Barcha maqolalar

So'nggi yillarda JavaScript dasturchilari orasida Bun haqida tez-tez gapirilmoqda. U Node.js kabi serverda JavaScript va TypeScript kodini bajaradigan runtime, lekin o'zi bilan paket menejeri, bundler va test vositasini ham olib keladi. Ko'pchilik birinchi bo'lib "Node.js'ni butunlay almashtirsam bo'ladimi?" degan savolni beradi. Javob loyihaning turiga, ishlatilayotgan kutubxonalarga va jamoangiz qancha xavfni ko'tara olishiga bog'liq. Quyida buni amaliy misollar bilan ko'rib chiqamiz.

Bun nimasi bilan Node.js'dan farq qiladi

Node.js Google'ning V8 dvigateliga asoslangan, Bun esa Safari brauzerida ishlatiladigan JavaScriptCore dvigatelidan foydalanadi va asosan Zig tilida yozilgan. Bun TypeScript fayllarni oldindan kompilyatsiya qilmasdan to'g'ridan-to'g'ri ishga tushira oladi, shuning uchun kichik loyihalarda tsc yoki ts-node sozlash zarurati yo'qoladi. Paketlarni o'rnatish ham odatda sezilarli darajada tezroq, bu ayniqsa CI jarayonlarida va har kuni ko'p marta install qilinadigan loyihalarda seziladi.

Bun ishlab chiquvchilari Node.js API'lari bilan moslikka katta e'tibor berishadi: fs, path, http kabi modullar va npm paketlarining katta qismi ishlaydi. Lekin moslik hali yuz foiz emas. C++ da yozilgan native modullar, ba'zi kam ishlatiladigan Node API'lari va Node'ning ichki xatti-harakatiga tayangan kutubxonalar kutilmagan xato berishi mumkin. Shuning uchun loyihangiz uchun aniq javobni faqat sinov ko'rsatadi, rasmiy hujjatlardagi moslik ro'yxatini ham ko'zdan kechirib chiqish foydali.

Qachon Bun'ni tanlash o'rinli

Bun yangi boshlanayotgan, bog'liqliklari kam va zamonaviy kutubxonalarga tayangan loyihalarda o'zini yaxshi ko'rsatadi. Masalan, Toshkentdagi bir kafe uchun menyu va buyurtmalarni qaytaradigan kichik API, Telegram bot yoki ichki hisobot skriptlari uchun Bun qulay tanlov bo'la oladi. Uzoq yillar ishlab kelayotgan, o'nlab native paketlarga ega va to'xtab qolishi katta zarar keltiradigan tizimlarda esa ehtiyotkor bo'lish kerak. Bunday hollarda Bun'ni avval faqat paket menejeri yoki test vositasi sifatida qo'llab, runtime'ni Node.js'da qoldirish ham mumkin.

Bun'ni VPS serverga o'rnatish

Bun doimiy ishlaydigan jarayon bo'lgani uchun uni VPS serverda ishlatish eng qulay yo'l. Oddiy shared hostingda o'zboshimchalik bilan runtime o'rnatib, fon jarayonni doimiy ushlab turish odatda imkonsiz, shu bois bunday loyihalar uchun sayt.uz'dagi VPS xizmati yoki texnik yordam bilan maslahatlashish to'g'ri bo'ladi. O'rnatish uchun rasmiy skriptdan foydalaniladi, u Bun'ni foydalanuvchining uy katalogiga joylaydi.

sudo adduser --disabled-password app
sudo -iu app
curl -fsSL https://bun.sh/install | bash
source ~/.bashrc
bun --version

Ilovani root foydalanuvchisi nomidan ishga tushirmaslik uchun alohida app foydalanuvchisi yaratdik. Bun bu holda /home/app/.bun/bin/bun manzilida bo'ladi, bu yo'l keyingi bosqichda kerak bo'ladi.

Oddiy HTTP server va uni sinash

Bun'ning o'z HTTP serveri bor, u Bun.serve funksiyasi orqali ishga tushiriladi. Quyidagi misol kafe menyusini JSON ko'rinishida qaytaradi va portni muhit o'zgaruvchisidan oladi. Fayl .ts kengaytmasiga ega bo'lsa ham, uni hech qanday kompilyatsiyasiz ishga tushirish mumkin.

// src/index.ts
const menu = [{ id: 1, name: "Osh", price: 45000 }];

Bun.serve({
  port: Number(process.env.PORT ?? 3000),
  hostname: "127.0.0.1",
  fetch(req) {
    const url = new URL(req.url);
    if (url.pathname === "/menu") return Response.json(menu);
    return new Response("Not found", { status: 404 });
  },
});

Ishga tushirish uchun bun install bilan bog'liqliklarni o'rnating va bun run src/index.ts buyrug'ini bering. Keyin boshqa terminaldan curl http://127.0.0.1:3000/menu orqali javobni tekshiring. Mavjud Express loyihasini sinab ko'rmoqchi bo'lsangiz, odatda node server.js o'rniga bun server.js yozishning o'zi kifoya qiladi.

systemd xizmati sifatida doimiy ishlatish

Production'da jarayon terminalga bog'liq bo'lmasligi, xato bilan to'xtasa qayta ko'tarilishi va server yoqilganda o'zi ishga tushishi kerak. Buning uchun systemd xizmat faylini yozamiz. Bu usul qo'shimcha dastur talab qilmaydi va loglarni journalctl orqali ko'rish imkonini beradi.

# /etc/systemd/system/menu-api.service
[Unit]
Description=Menu API (Bun)
After=network.target

[Service]
User=app
WorkingDirectory=/home/app/menu-api
Environment=NODE_ENV=production
Environment=PORT=3000
ExecStart=/home/app/.bun/bin/bun run src/index.ts
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now menu-api
sudo systemctl status menu-api
journalctl -u menu-api -f

Tashqi so'rovlar Node.js ilovalaridagi kabi Nginx orqali qabul qilinadi: proxy_pass http://127.0.0.1:3000; qatori bilan reverse proxy sozlanadi va Let's Encrypt sertifikati Certbot yordamida olinadi. PM2'ga o'rganib qolganlar uchun u ham ishlaydi: pm2 start src/index.ts --interpreter ~/.bun/bin/bun.

Node.js'dan Bun'ga xavfsiz o'tish tartibi

Mavjud loyihani birdaniga ko'chirish o'rniga bosqichma-bosqich harakat qilish tavsiya etiladi. Avval testlarni Bun bilan ishga tushirib ko'ring, keyin staging serverda ilovani bir necha kun kuzating va faqat shundan so'ng asosiy serverni almashtiring. Bun yangilanishlari tez-tez chiqadi, shuning uchun serverdagi versiyani qayd etib qo'ying va yangilashdan oldin uni sinov muhitida tekshiring. Agar biror kutubxona muammo bersa, o'sha servisni Node.js'da qoldirib, qolganlarini Bun'da ishlatish ham mutlaqo normal yechim.

O'xshash maqolalar

⏱️ max_execution_time: uzoq ishlaydigan PHP skriptlar bilan to'g'ri ishlash 📦 Telegram Bot API local server: katta fayllar bilan ishlash uchun o'z serveringiz 💻 VS Code Remote SSH: serverda to'g'ridan-to'g'ri kod yozish va tahrirlash 🚦 "Too many connections" xatosi: sabab va yechim
🌐 Til
🇺🇿 O'zbek ✓ 🇺🇿 Ўзбек 🇷🇺 Русский 🇬🇧 English