Frontend/statik saytni deploy qilish
Backend serverni VPS'ga qo'yishni ko'rdik. Frontend โ ya'ni React, Vue, Angular yoki oddiy statik sayt โ ancha soddaroq deploy qilinadi. Chunki natija oxir-oqibat shunchaki statik fayllar (HTML, CSS, JS) bo'ladi, va ularni maxsus statik hosting platformalari deyarli bepul, juda oson joylashtiradi. Ushbu darsda build jarayonini, mashhur platformalarni va SPA'ga xos sozlamalarni o'rganamiz.
npm run build kabi) lokalxostda ham, platforma serverida ham ishlaydi. Platforma sozlamalari esa statik config fayllar orqali beriladi โ ular ham tushunib o'qish uchun keltirilgan.Build jarayoni nima?
Zamonaviy frontend loyihalari brauzer to'g'ridan-to'g'ri tushunmaydigan narsalar bilan yoziladi: JSX (React), .vue fayllar, TypeScript, SCSS, ES modullar. Build โ bu shu manba kodni brauzer tushunadigan oddiy HTML, CSS va JavaScript'ga aylantirish jarayoni.
Build vositasi (Vite, webpack, esbuild va boshqalar) kodni qayta ishlaydi, birlashtiradi (bundle), kichraytiradi (minify) va tayyor natijani odatda dist/ yoki build/ papkasiga joylaydi:
# Frontend loyihasini build qilish:
$ npm run build
# Natija dist/ papkasida hosil bo'ladi:
dist/
index.html
assets/
index-a1b2c3.js
index-d4e5f6.css
Ana shu dist/ papkasidagi fayllar โ deploy qilinadigan yakuniy natija. Bu fayllar hech qanday Node.js talab qilmaydi; ularni istalgan oddiy veb-server (Nginx, GitHub Pages) yoki statik hosting uzata oladi.
npm run build aslida package.jsondagi scripts.build buyrug'ini ishga tushiradi. Aynan qaysi vosita ishlashini shu yerda ko'rasiz โ masalan, "build": "vite build".Statik hosting nima?
Statik hosting โ bu HTML/CSS/JS fayllarni internetga chiqarish uchun maxsus sozlangan xizmat. Ular server boshqaruvini talab qilmaydi: siz faqat fayllarni (yoki Git repozitoriyani) berasiz, platforma qolganini o'zi bajaradi โ global keshlash (CDN), HTTPS, avtomatik build.
Uchta eng mashhur bepul (yoki bepul rejasi bor) platforma: Netlify, Vercel va GitHub Pages. Ularning umumiy ishlash printsipi bir xil: Git repozitoriyaga ulanasiz, platforma har push'da avtomatik build qilib, natijani chiqaradi.
Netlify
Netlify โ statik saytlar uchun eng mashhur platformalardan biri. GitHub repozitoriyangizni ulaysiz, build buyrug'i va chiqish papkasini ko'rsatasiz โ tamom. Har git push'da avtomatik qayta deploy bo'ladi.
Sozlamalarni panel orqali ham, loyiha ildizidagi netlify.toml fayli orqali ham berish mumkin:
# netlify.toml
[build]
command = "npm run build"
publish = "dist"
[[redirects]]
from = "/*"
to = "/index.html"
status = 200
Bu yerda command โ build buyrug'i, publish โ chiqish papkasi. Pastdagi redirects qismi SPA marshrutlash uchun kerak โ buni quyida batafsil ko'ramiz.
mening-loyiham.netlify.app). O'z domeningizni ham panel orqali bir necha bosishda ulash mumkin, HTTPS esa avtomatik yoqiladi โ sertifikat bilan ovora bo'lmaysiz.Vercel
Vercel โ Netlify'ga juda o'xshash, ayniqsa Next.js loyihalari uchun optimallashgan platforma (Next.js'ni aynan Vercel yaratgan). Ish printsipi bir xil: GitHub'ni ulaysiz, u avtomatik freymvorkni aniqlaydi va build sozlamalarini o'zi taxmin qiladi.
Ko'p hollarda hech qanday config kerak emas โ Vercel Vite, Create React App, Next.js kabi loyihalarni avtomatik taniydi. Kerak bo'lsa, vercel.json faylida sozlaysiz:
# vercel.json (SPA marshrutlash uchun)
{
"rewrites": [
{ "source": "/(.*)", "destination": "/index.html" }
]
}
GitHub Pages
GitHub Pages โ GitHub'ning bepul statik hosting xizmati. To'g'ridan-to'g'ri repozitoriyadan sayt chiqaradi. Oddiy statik saytlar, hujjatlar va portfolio uchun ideal. Odatda GitHub Actions bilan birga ishlatiladi โ u avtomatik build qilib, natijani Pages'ga chiqaradi:
# .github/workflows/deploy.yml
name: Deploy to GitHub Pages
on:
push:
branches: [main]
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- run: npm run build
- uses: actions/deploy-pages@v4
with:
path: dist
/repo-nomi/ pastki yo'lida ochiladi (masalan, foydalanuvchi.github.io/loyiha/). Shu sababli build vositasida base yo'lni sozlash kerak, aks holda CSS/JS fayllari topilmaydi. Vite'da bu base: '/loyiha/' orqali beriladi.// vite.config.js โ GitHub Pages uchun base yo'l
export default {
base: '/loyiha/',
};
SPA marshrutlash muammosi
SPA (Single Page Application โ bir sahifali ilova) โ React, Vue kabi loyihalarda odatiy holat. Bunda sayt aslida bitta index.html faylidan iborat, marshrutlash (routing) esa brauzerda JavaScript orqali bajariladi. Foydalanuvchi /haqida yoki /mahsulotlar sahifasiga o'tganda, brauzer serverga bormaydi โ JS'ning o'zi to'g'ri komponentni ko'rsatadi.
Muammo shu yerda paydo bo'ladi: agar foydalanuvchi to'g'ridan-to'g'ri mening-saytim.uz/haqida manzilini ochsa yoki sahifani yangilasa (refresh), brauzer serverdan /haqida faylini so'raydi. Lekin bunday fayl yo'q โ faqat index.html bor. Natijada server 404 qaytaradi.
Yechim: serverni shunday sozlash kerakki, u mavjud bo'lmagan har qanday yo'l uchun index.htmlni qaytarsin. Keyin brauzerdagi JS marshrutlash to'g'ri sahifani ko'rsatadi. Har platformada bu boshqacha yoziladi:
- Netlify:
netlify.tomldagiredirects(yuqorida ko'rdik) yoki_redirectsfayli; - Vercel:
vercel.jsondagirewrites; - Nginx (o'z serveringizda):
try_filesdirektivasi.
Agar SPA'ni o'z Nginx serveringizda joylashtirsangiz, config quyidagicha bo'ladi:
# Nginx'da SPA marshrutlash
server {
listen 80;
server_name mening-saytim.uz;
root /var/www/mening-sayt/dist;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}
try_files $uri $uri/ /index.html; โ kalit qator. U shunday ishlaydi: avval so'ralgan faylni ($uri) qidiradi, topilmasa papkani, u ham bo'lmasa index.htmlni qaytaradi. Shu tufayli har qanday yo'l ishlaydi va SPA marshrutlash buzilmaydi.Frontend muhit o'zgaruvchilari
Frontend'da ham muhit o'zgaruvchilari kerak bo'ladi โ masalan, API manzili. Lekin bu yerda muhim farq bor: build vaqtida o'zgaruvchilar kodga "qotib" qoladi va oxir-oqibat brauzerga yuklanadi. Ya'ni ular maxfiy emas โ har kim ko'rishi mumkin.
Vite'da muhit o'zgaruvchilari VITE_ prefiksi bilan boshlanishi shart, aks holda ular kodga qo'shilmaydi. Ular .env fayliga yoziladi va import.meta.env orqali o'qiladi:
# .env (Vite loyihasida)
VITE_API_URL=https://api.mening-saytim.uz
VITE_APP_NAME=Mening Ilovam
// Kodda o'qish:
const apiUrl = import.meta.env.VITE_API_URL;
fetch(apiUrl + '/users')
.then(r => r.json())
.then(data => console.log(data));
.env faylini Git'ga qo'shmasdan, build vaqtida qiymatlarni yetkazishning toza yo'li.Backend qayerda qoladi?
Statik hosting faqat frontend'ni chiqaradi โ u Node.js serverni ishlata olmaydi. Odatda zamonaviy loyiha ikkiga bo'linadi:
- Frontend (React/Vue) โ Netlify yoki Vercel'da statik joylashadi;
- Backend (Node.js/Express API) โ VPS'da (oldingi dars) yoki Render/Railway kabi PaaS'da ishlaydi.
Frontend backend'ga fetch orqali murojaat qiladi, manzil esa yuqorida ko'rgan VITE_API_URL muhit o'zgaruvchisidan olinadi. Shu tarzda ikki qism mustaqil deploy qilinadi va bir-biriga bog'lanadi.
cors middleware bilan) hal qilinadi.Xulosa
- Build (
npm run build) manba kodni brauzer tushunadigan statik fayllarga aylantiradi (dist/); - Netlify va Vercel โ Git'ga ulanib, har push'da avtomatik build va deploy qiladi; HTTPS avtomatik;
- GitHub Pages โ GitHub Actions bilan bepul hosting; pastki yo'l uchun
baseni sozlash kerak; - SPA marshrutlash uchun barcha yo'llarni
index.htmlga yo'naltirish shart (Netlify redirects, Vercel rewrites, Nginxtry_files); - Frontend muhit o'zgaruvchilari (Vite'da
VITE_) maxfiy emas โ ularga hech qachon sir yozmang; - Odatda frontend statik hostingda, backend esa VPS yoki PaaS'da alohida deploy qilinadi.