Asosiy kontentga o‘tish

Yo‘l · 37 maqola

Production Backend yo‘li

Django/DRF asoslarini bilasiz — endi uni ishonchli, xavfsiz va production'da ishlaydigan qilib qurishni o‘rganasiz. To‘qqiz qadam, hammasi bu saytdagi mavjud maqolalardan tuzilgan: birma-bir, yoki kerakli qadamdan boshlab.

1-qadam

Django/API asoslari

So'rovdan javobgacha: routing, serializatsiya, hujjatlar, fon vazifalar.

Maqola 4 daqiqa boshlang'ich

FastAPI yoki Django REST Framework: qaysi birini tanlash

Python'da API yozishni boshlaganingizda birinchi to‘xtaladigan savolingiz — qaysi tool'da yozaman. Ikkalasida ham bir xil endpoint yozib, farqini o‘z ko‘zingiz bilan ko‘ramiz va qaysi biri qaysi loyihaga mos kelishini aniqlaymiz.

Darslik 5 daqiqa boshlang'ich

DRF'da avtomatik Swagger: hujjat kodning o'zidan tug'iladi

«Qanday endpoint'lar bor, nima yuboraman, nima keladi?» — frontend jamoasining abadiy savoli. drf-spectacular bilan API hujjati koddan avtomatik yasaladi va kod o'zgarsa hujjat ham o'zi yangilanadi. Netflix-uslub API misolida sozlaymiz.

Darslik 4 daqiqa boshlang'ich

CORS: brauzer aslida nimadan himoya qilyapti

CORS xatosi deyarli har bir dasturchining jig‘iga tekkan, lekin ko‘pchilik uni noto‘g‘ri tushunadi va StackOverflow'dan «allow all» ni ko‘chirib, o‘ziga eshik ochib qo‘yadi. Same-Origin Policy, preflight so‘rov va Django'da to‘g‘ri sozlashni tartib bilan ko‘ramiz.

2-qadam

Ma'lumotlar bazasi

Sxema, migratsiya va indeks — kod yozishdan oldingi qaror.

Darslik 7 daqiqa boshlang'ich

SQLModel: bitta klass — ham jadval, ham sxema

FastAPI loyihasida odatda ikki xil klass yoziladi: bazaga SQLAlchemy modeli, so'rov-javobga Pydantic sxemasi. SQLModel shu ikkalasini bitta klassga jamlaydi. Doctolib loyihasidagi misollar bilan noldan boshlab ko'ramiz.

Darslik 5 daqiqa boshlang'ich

Alembic: ishlab turgan bazani buzmasdan o'zgartirish

Modelga yangi maydon qo'shdingiz — bazada esa uni hech kim yaratmaydi. Django'da migrate bor edi, FastAPI dunyosida bu ishni Alembic qiladi. Sozlash, avtomatik migratsiya yaratish va uni ehtiyotkorlik bilan qo'llashni birma-bir ko'ramiz.

Darslik 4 daqiqa o'rta

PostgreSQL indekslari: qachon tezlik beradi, qachon zarar qiladi

Indeks qidiruvni tezlashtiradi, lekin har yozuvni sekinlashtiradi — bu tekin kelmaydi. EXPLAIN bilan sekin so‘rovni o‘z ko‘zingiz bilan ko‘rasiz, indeks qo‘shib farqni o‘lchaysiz va nega har ustunga indeks qo‘yish yomon g‘oya ekanini tushunasiz.

3-qadam

Testing

Kod ishlashini emas, ishlashda davom etishini isbotlash.

Darslik 6 daqiqa boshlang'ich

pytest-django: birinchi testni yozamiz

Kod ishlayaptimi — brauzerda bosib ko'rish bilan tekshirib yurgan bo'lsangiz, bu maqola siz uchun. pytest-django'ni sozlaymiz, birinchi testni yozamiz va «o'zgartirishdan qo'rqmaslik» degan tuyg'u qayerdan kelishini ko'ramiz.

Darslik 7 daqiqa boshlang'ich

Unit va integration: bitta funksiyaga ikki xil test

Hamma testlarni bir xil yozish — sekin va mo'rt test to'plamiga olib boradi. Unit test kichik va chaqqon, integration test katta va ishonchli. Bitta misol ustida ikkalasini yozib, farqini va qachon qaysi biri kerakligini aniqlaymiz.

Darslik 7 daqiqa boshlang'ich

DRF API'ni APIClient bilan testlash: status, JSON va ruxsatlar

API'ni Postman'da qo'lda bosib tekshirish ham 'brauzerda bosib ko'rish'ning o'zi. DRF'ning APIClient'i bilan endpoint'larni kod orqali tekshiramiz: to'g'ri javoblar, validatsiya xatolari va kirish ruxsatlari — ToDo API misolida.

Darslik 11 daqiqa o'rta

Ishlaydigan koddan sifatli kodga

Oldingi qismda chek yasaydigan dastur yozdik va u ishladi. Endi esa boshqa savol: **u har doim to'g'ri ishlaydimi?** Tekshirib ko'rsak, ba'zi holatlarda chekdagi qatorlarni qo'shganda bir summa chiqadi, pastdagi `JAMI` esa boshqa sonni ko'rsatadi. Bu qismda shu muammo va yana beshta kamchilikni topamiz, tuzatamiz va keyin qaytib chiqmasligi uchun testlar yozamiz.

4-qadam

Deployment

Kod noutbukdan serverga qanday yetib boradi.

Darslik 4 daqiqa boshlang'ich

Docker Compose: «menda ishlayapti-ku» muammosini butunlay yopish

Jamoadagi eng ko‘p eshitiladigan ibora — «menda ishlayapti-ku». Docker Compose butun development muhitini bitta faylga yozadi. Postgres va Redis'ni bir buyruq bilan ko‘taramiz va yo‘l-yo‘lakay uchraydigan tuzoqlarni ko‘ramiz.

Darslik 5 daqiqa o'rta

Docker'siz production deploy: uv, gunicorn, systemd va nginx

Hamma joyda «deploy demak Docker» deb o‘rgatishadi, lekin qo‘lingizda 1GB xotirali arzon VPS bo‘lsa, Docker ortiqcha yuk bo‘lishi mumkin. Shu sayt aynan Docker'siz ishlaydi — to‘liq retseptni boshidan oxirigacha ko‘rsataman.

Darslik 6 daqiqa boshlang'ich

Yangi VPS qo'lga tegdi: birinchi soatda qilinadigan ishlar

Server sotib oldingiz, qo'lingizda root parol bor. Loyihani yuklashdan oldin qilinishi shart bo'lgan ishlar bor: alohida foydalanuvchi, SSH kalit, parolni o'chirish, firewall va swap. Shu birinchi soatni bosqichma-bosqich o'tamiz.

5-qadam

Linux / nginx / systemd

Serverni tushunish: ruxsatlar, reverse proxy, xizmat sifatida ishga tushirish.

Darslik 5 daqiqa boshlang'ich

SSH kalitlar va fayl ruxsatlari: serverdagi birinchi darslar

Yangi serverga parol bilan kirib, bir necha soatdan keyin loglarga qarasangiz, dunyoning har burchagidan kelgan minglab urinishni ko‘rasiz. Nega SSH kalit paroldan xavfsizroq, chmod raqamlari nimani anglatadi va SSH kalitingizni nega ba'zan rad etadi.

Darslik 6 daqiqa o'rta

Nginx amaliyotda: reverse proxy, statika va kelajakdagi 502 lar

Gunicorn 127.0.0.1'da ishlab turibdi, endi uni dunyoga chiqarish kerak. Nginx'ni reverse proxy qilib sozlaymiz: to'g'ri header'lar, statikani tez berish, WebSocket'ni o'tkazish va 502 chiqqanda qayerga qarashni bilish.

Maqola 3 daqiqa boshlang'ich

HTTPS va TLS: brauzerdagi qulf ortida nima yashiringan

Har kuni ko‘ramiz, lekin kamdan-kam o‘ylaymiz: manzil qatoridagi qulf belgisi aslida nimani kafolatlaydi? TLS handshake, sertifikatlar va nega HTTPS shunchaki «shifrlash»dan ko‘ra kengroq narsa ekanini soddalab ko‘ramiz.

Darslik 6 daqiqa o'rta

systemd'ni chuqurroq: web-ilovani xizmatga aylantirish

Botni xizmat qilishni o'rgangan edik, endi web-ilova navbati. Gunicorn'li Django saytini systemd ostiga olamiz: bazaga bog'liqlik, graceful reload, xotira chegarasi va sandbox himoyalari — shu saytning o'zida ishlab turgan sozlamalar asosida.

Darslik 6 daqiqa o'rta

systemd timer va avtomatik backup: tiklanmagan zaxira — zaxira emas

Cron o'rniga systemd timer: loglari jurnal ichida, o'tkazib yuborilgan ishga tushishlarni quvib yetadi va sinash oson. Shu tool bilan bazani har kuni avtomatik zaxiralaymiz, eski nusxalarni tozalaymiz va eng muhimi — tiklashni ham sinaymiz.

Darslik 5 daqiqa o'rta

Server o'chib yonsa nima tirik qoladi? Reboot'ga chidamlilik auditi

Reboot vaqtini siz tanlamaysiz — kernel yangilanishi, provayder ishlari yoki oddiy elektr muammosi uni sizsiz qiladi. Serverni tekshirib chiqamiz: nimalar o'zi qaytadi, nimalar jim o'lib qoladi, va buni qanday oldindan bilish mumkin.

6-qadam

CI/CD

git push'dan production'gacha qo'l tegmasin.

Darslik 6 daqiqa o'rta

push → test → deploy: shu saytning o'zi qanday chiqib turibdi

Hozir o'qiyotgan maqolangiz serverga qo'lda yuklanmagan: men push qildim, GitHub Actions testlarni o'tkazdi, o'zi deploy qildi, hatto Telegram kanalga e'lonni ham o'zi yubordi. Shu pipeline'ni boshidan oxirigacha ochib beraman — real fayllar bilan.

Maqola 3 daqiqa o'rta

Bu sayt qanday qurilgan: nega React emas, Django va HTMX

Dasturchining shaxsiy sayti deyarli har doim React'da quriladi — bu bugungi standart. Men aksincha yo‘l tutdim: Django monolit, HTMX va git'da yashaydigan markdown fayllar. Nega shunday qilganimni va bu qaror nimaga asoslanganini aytib beraman.

7-qadam

Debugging va incidentlar

Nosozlik chiqqanda to'g'ri savolni topish tezlikning o'zi.

Darslik 4 daqiqa o'rta

«Sayt yotibdi!» — journalctl bilan sababni besh daqiqada topish

Xizmat yiqilganda taxmin bilan emas, loglar bilan ishlanadi. journalctl'ning kundalik ishda kerak bo'ladigan qismini o'rganamiz: to'g'ri savol berish, vaqt bo'yicha toraytirish, yashirin restart-halqalarni ushlash va jurnal diskni yeb qo'ymasligini ta'minlash.

Tahlil 3 daqiqa boshlang'ich

Server o‘ldimi yoki tarmoq? Uch soatlik vahimadan chiqqan saboq

«Server yotdi» degan uch soatlik vahima aslida mintaqaviy internet-marshrut uzilishi bo‘lib chiqdi — server esa butun shu vaqt davomida sog‘ turgan edi. Bir noto‘g‘ri savol qanday qilib bir necha soatni yeb qo‘yishi va to‘g‘ri savol 30 soniyada javob berishi haqida.

8-qadam

Performance

Sekinlashgan API'ni tashxis qilish va tuzatish.

Darslik 4 daqiqa o'rta

Django ORM'da N+1: sahifa nega birdan sekinlashib qoladi

Lokalda uchib turgan sahifa serverda sudralib qoladi, chunki ORM har bir yozuv uchun bazaga alohida borib keladi. N+1 qanday tug‘iladi, uni qanday ushlash va select_related bilan prefetch_related orasidagi farq nimada.

Darslik 4 daqiqa o'rta

Redis bilan keshlash: tezlik yasash va eskirgan ma'lumot tuzog‘i

Bir xil ma'lumot qayta-qayta bazadan so‘ralsa, uni Redis'da saqlab, bazani tinch qoldirsa bo‘ladi. Cache-aside naqshini yozamiz, TTL bilan tanishamiz va keshlashning eng qiyin qismi — invalidatsiyani o‘z misolimizda ko‘ramiz.

Maqola 3 daqiqa o'rta

Xatoni ham keshlab qo‘yish: shu saytda bo‘lgan real tuzoq

Bosh sahifadagi loyihalar soni bir kun ichida eskirib qotib qoldi — lokalda esa hammasi joyida. Sababi men bilib turib qazigan chuqur edi: xato natijani ham muvaffaqiyat bilan bir xil muddatga keshlab qo‘yganman. Tashxis va yechim.

9-qadam

Basic backend security

Kod xavfsiz yozilishi — audit emas, odat bo'lishi kerak.

Darslik 3 daqiqa boshlang'ich

Django sozlamalarini .env bilan boshqarish

settings.py ichida parol saqlash — klassik xato, chunki u kod bilan birga git'ga, git bilan birga GitHub'ga tushadi. Sozlamalarni muhitga chiqaramiz, settings'ni dev va prod'ga bo‘lamiz va nega bu xavfsizlik masalasi ekanini ko‘ramiz.

Darslik 4 daqiqa o'rta

Token, parol, kalit: sirlar qayerda yashaydi va qayerda o'ladi

GitHub'ga tushib qolgan bot tokeni bir necha daqiqada topiladi — buni skanerlash botlari tinimsiz qilib turadi. Sirlarni to'g'ri saqlash tartibini quramiz: .env fayllar, ruxsatlar, sizib chiqqandagi harakatlar rejasi va commit'dan oldingi himoya.

Darslik 6 daqiqa o'rta

JWT autentifikatsiya: xavfsiz ishlatish qoidalari

Darsda JWT mavzusiga kelganimizda talabalarning ko‘pchiligi token shifrlangan deb o‘ylaydi. Aslida uning ichini istalgan odam ochib o‘qiydi. Shu farqdan kelib chiqadigan xatolar va ularning oldini olish yo‘llari.

Tahlil 5 daqiqa o'rta

SQL injection'ni o‘z ko‘zingiz bilan ko‘ring va yoping

Eng qadimiy zaifliklardan biri, lekin hali ham ishlab turibdi. Kichik zaif ilova yozamiz, uni o‘zimiz buzamiz, keyin bitta o‘zgarish bilan yopamiz — hammasini o‘z kompyuteringizda takrorlab ko‘rasiz.

Tadqiqot 4 daqiqa o'rta

OWASP Top 10: backend dasturchi uchun tirik qo‘llanma

Web-xavfsizlikdagi eng nufuzli ro‘yxatni quruq ta'riflar bilan emas, har biri qanday ko‘rinishda uchrashi va nima bilan yopilishi tomonidan ko‘rib chiqamiz. Eng ko‘p uchraydigan zaiflikni esa kod bilan ochib beraman.