GitHub Pages — statik saytni deploy qilish
Muammodan boshlaylik
Portfolio sayt yaratdingiz — HTML, CSS, bir oz JavaScript. Endi uni ish beruvchilarga ko'rsatish kerak. Hosting sotib olish, domen, FTP, server sozlash? Faqat bitta sahifa uchun?
GitHub Pages — repozitoriydagi statik saytni bepul internetga chiqaradi. Manzil: https://username.github.io. Sozlash — 2 daqiqa.
GitHub Pages nima?
- Statik saytlar uchun bepul hosting: HTML, CSS, JS, rasmlar
- HTTPS — avtomatik
- O'z domeningizni ulash mumkin
- Har push da avtomatik yangilanadi
Qila olmaydi: server tomonidagi kod (Node.js API, PHP, baza). Faqat brauzerda ishlaydigan narsalar. React, Vue, Vite kabi frontend lar — build qilingandan keyin statik fayllar bo'lgani uchun — ✅ ishlaydi.
Mos: portfolio, loyiha hujjatlari, blog, landing sahifa, kichik demo.
Ikki turdagi sayt
| Tur | Repozitoriy nomi | Manzil |
|---|---|---|
| Foydalanuvchi sayti | username.github.io (aniq shu nom!) |
https://username.github.io |
| Loyiha sayti | istalgan, masalan dokon |
https://username.github.io/dokon/ |
Bitta foydalanuvchi sayti va cheksiz loyiha saytlari.
1-usul: Oddiy HTML — branch dan
Eng sodda — build kerak bo'lmagan HTML sayt.
mkdir otabek.github.io && cd otabek.github.io
git init
cat > index.html << 'EOF'
<!DOCTYPE html>
<html lang="uz">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Otabek Hasanov — Dasturchi</title>
</head>
<body>
<h1>Salom! Men Otabek</h1>
<p>Backend dasturchi — Node.js, PostgreSQL, Docker</p>
</body>
</html>
EOF
git add . && git commit -m "Portfolio sayt"
git remote add origin git@github.com:otabek/otabek.github.io.git
git push -u origin main
GitHub da: repozitoriy → Settings → Pages:
- Source: Deploy from a branch
- Branch:
main, papka:/ (root)(yoki/docs) - Save
1–2 daqiqadan keyin: https://otabek.github.io — sayt tayyor. Har bir push — avtomatik yangilanish.
2-usul: Vite / React — GitHub Actions bilan
Build kerak bo'lgan loyihalar uchun — GitHub Actions (38-dars). Settings → Pages → Source: GitHub Actions.
# .github/workflows/pages.yml
name: Pages
on:
push:
branches: [main]
workflow_dispatch:
permissions:
contents: read
pages: write
id-token: write
concurrency:
group: pages
cancel-in-progress: true
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: 22, cache: npm }
- run: npm ci
- run: npm run build
- uses: actions/upload-pages-artifact@v3
with:
path: dist
deploy:
needs: build
runs-on: ubuntu-latest
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- id: deployment
uses: actions/deploy-pages@v4
Muhim: base yo'l
Loyiha sayti /dokon/ ostida joylashadi — Vite bilmasa, CSS va JS /assets/... dan qidiriladi va topilmaydi (oq sahifa):
// vite.config.js
export default {
base: '/dokon/', // repozitoriy nomi
};
Foydalanuvchi sayti (username.github.io) uchun — base: '/' (standart).
[!WARNING] GitHub Pages da SPA routing (React Router
BrowserRouter) sahifani yangilashda 404 beradi — serverindex.htmlga yo'naltirmaydi (Docker kursi, 36-dars). Yechimlar:HashRouterishlatish (/#/mahsulot/42— DevDocs sayti ham shunday), yoki404.htmlniindex.htmlnusxasi qilish.
O'z domeningiz
otabek.uz domeningiz bor:
- DNS (domen sotuvchisi panelida):
- Asosiy domen uchun — 4 ta A yozuv:
185.199.108.153,185.199.109.153,185.199.110.153,185.199.111.153 wwwuchun — CNAME:otabek.github.io
- Asosiy domen uchun — 4 ta A yozuv:
- GitHub → Settings → Pages → Custom domain:
otabek.uz→ Save - Enforce HTTPS ✅ (sertifikat bir necha daqiqada avtomatik)
Branch dan deploy da GitHub repozitoriyga CNAME faylini qo'shadi. Actions bilan — public/CNAME fayliga domen nomini yozing, u build ga tushadi.
Tekshirish (Linux kursi, 32-dars):
dig otabek.uz +short
Jekyll — Markdown dan sayt
GitHub Pages ichida Jekyll o'rnatilgan — Markdown fayllardan avtomatik sayt (blog uchun qulay). Branch dan deploy qilganda .md fayllar HTML ga aylanadi.
Kerak bo'lmasa (oddiy HTML yoki Vite) — repozitoriy ildiziga bo'sh .nojekyll fayli qo'ying: Jekyll o'chadi va _ bilan boshlanadigan papkalar yo'qolib qolmaydi.
Zamonaviy muqobillar — Astro, VitePress, Docusaurus (hujjatlar uchun) — Actions bilan deploy qilinadi.
Cheklovlar
| Chegara | |
|---|---|
| Sayt hajmi | 1 GB |
| Oylik trafik | ~100 GB (yumshoq chegara) |
| Build lar | Soatiga ~10 ta (branch rejimida) |
| Yopiq repozitoriydan | Faqat pullik tariflarda |
| Tijoriy maqsad | Onlayn do'kon yoki SaaS uchun emas |
Portfolio, hujjat va kichik loyihalar uchun — yetarlidan ortiq. Jiddiy veb-ilovalar uchun — Vercel, Netlify, Cloudflare Pages (bular ham bepul tariflarga ega, va server funksiyalarini qo'llab-quvvatlaydi).
Nima uchun shunday?
Nima uchun GitHub bepul hosting beradi — va nima uchun faqat statik?
Statik saytlar — eng arzon va eng xavfsiz hosting turi: server faqat tayyor fayllarni beradi, hech qanday kod bajarilmaydi, baza yo'q — hujum yuzasi deyarli nol, va fayllar butun dunyo bo'ylab CDN orqali keshlanadi. GitHub uchun bu juda kam xarajat, lekin katta foyda: hujjatlar va loyiha saytlari repozitoriy yonida yashaydi, va dasturchilar platformada qoladi. Siz uchun esa — kod va sayt bitta joyda: git push qilasiz, sayt yangilanadi. Bu "Git — deploy mexanizmi" g'oyasining eng oddiy ko'rinishi.
Xulosa
Eslab qoling:
- GitHub Pages — statik saytlar uchun bepul hosting, avtomatik HTTPS
username.github.iorepo →https://username.github.io; boshqa repo →/repo-nomi/- Oddiy HTML: Settings → Pages → Deploy from branch →
main - Vite/React: Source = GitHub Actions;
upload-pages-artifact+deploy-pages - Loyiha sayti uchun
base: '/repo-nomi/' - SPA —
HashRouteryoki404.html - O'z domen: A yozuvlar (
185.199.108–111.153) + Custom domain + Enforce HTTPS .nojekyll— Jekyll ni o'chirish- Server kodi yo'q — faqat statik
Keyingi dars
41-dars: GitHub Releases — versiya chiqarish, changelog