Loyihani deploy qilish

Deploy nima?

Siz ilovani yozdingiz, u o'z kompyuteringizda mukammal ishlaydi. Lekin sizdan boshqa hech kim uni ochib ko'ra olmaydi. Deploy โ€” bu ilovani o'z kompyuteringizdan olib, internetdagi doimo ishlab turadigan serverga joylashtirish jarayoni. Shundan so'ng har kim brauzerda manzilni yozib, ilovangizga kira oladi. Ushbu darsda deploy nima ekanligini, u qanday muhitlarda amalga oshirilishini va jarayonning umumiy bosqichlarini o'rganamiz.

Bu bob โ€” server muhitiga oid. Bu yerdagi buyruqlar terminalda, Linux serverida ishlaydi. Ularni brauzerda ishga tushirib bo'lmaydi, shuning uchun barcha misollar statik โ€” tushunib o'qish uchun keltirilgan. Har bir buyruqni mazmunini anglagan holda o'rganing.

Deploy so'zining ma'nosi

Deploy (deployment, o'zbekcha "joylashtirish", "yetkazib berish") โ€” bu tayyor dasturiy ta'minotni foydalanuvchilar foydalana oladigan muhitga o'rnatish va ishga tushirish jarayoni. Ya'ni kod endi faqat sizning kompyuteringizda emas, balki haqiqiy, internetga ulangan mashinada ishlaydi.

Deploy โ€” bu bir martalik hodisa emas. Odatda siz kodni ko'p marta yangilaysiz: yangi imkoniyat qo'shasiz, xatoni tuzatasiz. Har safar bu o'zgarishni serverga yetkazish ham deploy deb ataladi. Shuning uchun deploy jarayonini iloji boricha oddiy va takrorlanadigan qilish muhim.

Lokalxost va server farqi

Lokalxost (localhost) โ€” bu sizning o'z kompyuteringiz. Node.js serverini ishga tushirganingizda u odatda http://localhost:3000 manzilida ochiladi. Bu manzil faqat shu kompyuterda ishlaydi โ€” internetning boshqa qismidan unga kirib bo'lmaydi.

Server (yoki ishlab chiqarish serveri) โ€” bu internetga doimo ulangan, o'chirilmaydigan mashina. Uning ommaviy IP manzili (masalan, 203.0.113.10) yoki domeni (masalan, mening-saytim.uz) bo'ladi, va dunyoning istalgan nuqtasidan unga kirish mumkin.

Ular orasidagi farqlar shunchaki manzil bilan cheklanmaydi. Serverda muhit boshqacha bo'ladi: operatsion tizim (odatda Linux), o'zgaruvchilar, fayllar joylashuvi, ruxsatlar. Kod lokalxostda ishlab, serverda ishlamasligi mumkin โ€” masalan, portlar band bo'lsa, kutubxona o'rnatilmagan bo'lsa yoki fayl yo'llari boshqacha bo'lsa.

Ko'p tarqalgan ibora bor: "menda ishlayapti-ku" ("works on my machine"). Bu aynan lokalxost va server farqidan kelib chiqadi. Shuning uchun ilovani muhitga bog'liq bo'lmagan qilib yozish โ€” masalan, sozlamalarni .env orqali berish โ€” juda muhim. Bu haqida VPS darsida batafsil to'xtalamiz.

Ishlab chiqarish (production) muhiti

Dasturchilar odatda bir necha muhit (environment) bilan ishlashadi. Muhit โ€” bu ilova ishlaydigan alohida sozlangan makon. Uchta eng ko'p uchraydigani:

Production muhitida ilova developmentdan farqli sozlanadi. Masalan, xato xabarlari foydalanuvchiga to'liq ko'rsatilmaydi (xavfsizlik uchun), kodlar kichraytiriladi (minify), keshlash yoqiladi. Node.js'da bu ko'pincha NODE_ENV=production o'zgaruvchisi orqali boshqariladi.

# Development rejimida ishga tushirish:
NODE_ENV=development node server.js

# Production rejimida ishga tushirish:
NODE_ENV=production node server.js
Express kabi freymvorklar NODE_ENV=production bo'lganda avtomatik ravishda ba'zi optimizatsiyalarni yoqadi (masalan, shablonlarni keshlaydi, batafsil xato izlarini yashiradi). Shu sababli productionda bu o'zgaruvchini o'rnatishni unutmang.

Server turlari: VPS va PaaS

Ilovani joylashtirish uchun serverga ega bo'lish kerak. Buning ikki asosiy yondashuvi bor va ular bir-biridan tubdan farq qiladi.

VPS (virtual xususiy server)

VPS (Virtual Private Server) โ€” bu sizga to'liq nazorat beriladigan virtual Linux mashinasi. Siz unga SSH orqali ulanasiz, kerakli dasturlarni o'zingiz o'rnatasiz (Node.js, Nginx, ma'lumotlar bazasi), va hamma narsani o'zingiz sozlaysiz.

Mashhur VPS provayderlar: DigitalOcean, Hetzner, Linode, Vultr, AWS EC2. Ularda oyiga bir necha dollardan boshlanadigan tariflar bor. VPS'ga deploy qilishni keyingi darsda amalda ko'ramiz.

PaaS (platforma xizmat sifatida)

PaaS (Platform as a Service) โ€” bu server boshqaruvining ko'p qismini o'z zimmasiga oladigan bulut xizmati. Siz faqat kodni beryapsiz, qolganini (server, tarmoq, masshtablash) platforma o'zi bajaradi.

Backend uchun mashhur PaaS platformalar: Render, Railway, Fly.io, Heroku. Frontend/statik saytlar uchun esa Netlify, Vercel, GitHub Pages โ€” bularni frontend darsida ko'ramiz.

Qaysi birini tanlash kerak? Agar siz Linux, SSH va Nginx bilan tanish bo'lsangiz va nazoratni xohlasangiz โ€” VPS. Agar tez va oson yechim kerak bo'lsa, server boshqaruvi bilan shug'ullanishni istamasangiz โ€” PaaS. Ko'p dasturchilar ikkalasidan ham foydalanadi: mayda loyihalar uchun PaaS, jiddiy nazorat kerak bo'lganda VPS.

Domen va DNS haqida umumiy tushuncha

Server IP manzilga ega bo'ladi, masalan 203.0.113.10. Lekin foydalanuvchilar raqamlarni emas, domen nomini (masalan, mening-saytim.uz) yodda tutadi. Domen โ€” bu insonlarga qulay, o'qiladigan manzil.

DNS (Domain Name System) โ€” bu domen nomlarini IP manzillarga o'giradigan internetning "telefon kitobi". Foydalanuvchi brauzerda mening-saytim.uz yozganda, brauzer avval DNS'dan so'raydi: "bu domen qaysi IP'ga tegishli?" โ€” javob olgach, o'sha IP'ga ulanadi.

# Domen qaysi IP'ga ko'rsatayotganini ko'rish (statik misol):
$ nslookup mening-saytim.uz

Name:    mening-saytim.uz
Address: 203.0.113.10

Ya'ni deploy zanjiri quyidagicha ishlaydi: domen โ†’ DNS โ†’ server IP โ†’ Nginx โ†’ ilovangiz. Domenni sotib olish, DNS yozuvlarini sozlash va uni serverga ulash โ€” bularni oxirgi (domen va HTTPS) darsida batafsil ko'ramiz.

Domensiz ham deploy qilish mumkin โ€” foydalanuvchilar to'g'ridan-to'g'ri IP manzil (http://203.0.113.10) orqali kirishadi. Lekin bu chiroyli emas va HTTPS'ni to'g'ri sozlash uchun ham domen kerak bo'ladi. Jiddiy loyiha uchun domen deyarli har doim olinadi.

Deploy jarayonining bosqichlari

Har xil platforma va texnologiyada tafsilotlar farq qilsa-da, deploy jarayoni umumiy bosqichlarga ega. Backend ilovasini VPS'ga joylashtirishning tipik bosqichlari:

  1. Server tayyorlash โ€” VPS olish, unga SSH orqali ulanish, kerakli dasturlarni o'rnatish (Node.js, Git, Nginx);
  2. Kodni yetkazish โ€” kodni serverga olib borish, odatda git clone orqali;
  3. Bog'liqliklarni o'rnatish โ€” npm install bilan kutubxonalarni o'rnatish;
  4. Muhitni sozlash โ€” .env faylida maxfiy ma'lumotlar (parollar, kalitlar) va sozlamalarni berish;
  5. Ilovani ishga tushirish โ€” uni doimo ishlab turadigan qilish (PM2 kabi vosita bilan);
  6. Reverse proxy sozlash โ€” Nginx orqali 80/443 portidan ilovaga trafikni yo'naltirish;
  7. Domen va HTTPS โ€” domenni ulash, SSL sertifikat o'rnatish.

Frontend/statik sayt uchun jarayon soddaroq: kodni build qilasiz (npm run build), natijadagi statik fayllarni hosting platformasiga yuklaysiz โ€” tamom. Bu bosqichlar frontend darsida ko'riladi.

Zamonaviy loyihalarda bu bosqichlarni qo'lda emas, avtomatik bajarish odat tusiga kirgan โ€” bunga CI/CD deyiladi. Masalan, GitHub'ga kodni push qilasiz, GitHub Actions esa avtomatik testlarni ishga tushiradi, build qiladi va serverga deploy qiladi. Lekin buni tushunish uchun avval qo'lda deploy qilishni bilish shart.

Docker bilan bog'liqlik

Agar siz Docker darsidan o'tgan bo'lsangiz, deploy jarayonini yanada ishonchli qilishning yana bir yo'lini bilasiz: ilovani konteynerga joylash. Docker ilovani barcha bog'liqliklari bilan bir "qutiga" o'raydi, shu tufayli u lokalxostda ham, serverda ham bir xil ishlaydi.

Bu aynan "menda ishlayapti-ku" muammosini hal qiladi: konteyner ichidagi muhit hamma joyda bir xil. Ko'p zamonaviy deploy quvurlari (pipeline) Docker image yaratib, uni serverda ishga tushiradi. Bu bobda biz Docker'siz, klassik yondashuvni ko'ramiz โ€” lekin ikkala yo'lni ham bilish foydali.

Xulosa