Asoslar15 ta
- 01Birinchi deploy: nginx'ni ochishoson
Konteyner ishlayapti, lekin brauzerdan ochilmayapti. Sababini toping.
- 02Server qayta yuklansa ham tursinoson
Tunda server reboot bo'ldi — sayt ertalabgacha yotdi. Konteyner o'zi ko'tarilmagan.
- 03Baza ishga tushmayapti: muhit o'zgaruvchilarioson
Postgres parolsiz ishga tushishdan bosh tortadi. Logda hammasi yozilgan.
- 04Ilova va ma'lumotlar bazasio'rta
Baza parolsiz ishga tushmayapti, ilova esa bazadan oldin ko'tarilyapti.
- 05Ishlab chiqarishga tayyor stackqiyin
Ishlaydi — lekin server qayta yuklansa yoki cache yiqilsa, tirilmaydi.
- 06Maxfiy ma'lumotlar konfiguratsiyadao'rta
Parollar fayl ichida ochiq yozilgan va image'lar
latesttegida. - 07Faqat kerakli eshik ochiq bo'lsino'rta
Baza va cache to'g'ridan-to'g'ri internetga chiqarilgan.
- 08Bitta konteyner butun serverni yiqitmasinqiyin
Xotira chegarasi yo'q, log fayllari cheksiz o'sadi.
- 09Redis xotirani yeb qo'ymasino'rta
Cache o'sib boraveradi va bir kun RAM tugaydi. Chegara va eviction sozlang.
- 10Eng kam huquq tamoyiliqiyin
Konteynerlar root'da va yozish huquqi bilan ishlayapti.
- 11Teskari proksi ortiga yashirisho'rta
Ilova to'g'ridan-to'g'ri 80-portda o'tiribdi. Uni proksi ortiga oling.
- 12Nol to'xtovli yangilanishqiyin
Deploy paytida sayt bir necha soniya yiqilyapti. Sababi konfiguratsiyada.
- 13Sirlar fayldan chiqsino'rta
Parollar compose faylida ochiq yozilgan — ya'ni ular repozitoriyada.
- 14Konteynerni qulflashqiyin
Konteyner root'da, to'liq huquq bilan va yoziladigan fayl tizimi bilan ishlayapti.
- 15Tarmoqni bo'lib tashlashqiyin
Uchala servis ham tashqariga ochiq. Faqat proksi ko'rinishi kerak edi.
Portlar va tarmoq14 ta
- 16Port ochiq, lekin sahifa kelmayaptioson
Node ilovasi 3000-portni tinglaydi,
portsesa 80 ga bog'langan. - 17Ikki servis bitta eshikni talashyaptioson
webham,docsham 8080 ni so'rayapti — ikkinchisi ishga tushmaydi. - 18Baza butun internetga ochiqoson
5432-port host'ga chiqarilgan — skanerlar uni bir soatda topadi.
- 19Rootless Docker 80-portni bermaydio'rta
Yangi serverda Docker rootless rejimda — 1024 dan past portlar taqiqlangan.
- 20Old va orqa tarmoqni ajratisho'rta
Hamma bir tarmoqda — proksi bazaga to'g'ridan-to'g'ri ulana oladi.
- 21Bazaga internet kerak emaso'rta
Baza va worker tashqariga chiqa oladi — ma'lumot o'g'irlash uchun ideal yo'l.
- 22Admin panel faqat serverning o'zidano'rta
9000-portdagi boshqaruv paneli butun dunyoga ochiq. Uni loopback'ga bog'lang.
- 23Traefik dashboard'i ochiq qolgano'rta
80 va 443 kerak, 8080-dagi dashboard esa hammaga ko'rinib turibdi.
- 24Worker'ga port kerak emasoson
Navbatni o'qiydigan jarayon 9001-portda ochiq. Hech kim unga so'rov yubormaydi.
- 25Tarmoq ishlatilgan, lekin e'lon qilinmaganoson
service refers to undefined network ichki — bir bo'lim yetishmayapti.
- 26Bir harf — va api bazani topolmayaptioson
could not translate host name "db" — ikkalasi bir tarmoqda emas.
- 27Redis parolsiz va internetga ochiqo'rta
6379 tashqarida — Redis parolsiz bo'lsa, bu har kimga ochiq ma'lumotlar bazasi.
- 28Uch qatlamli tarmoqqiyin
Proksi, ilova, ma'lumot — har biri o'z qatlamida. Hozir hammasi bir joyda.
- 29HTTPS uchun 443 ham kerakoson
Caddy sertifikatni o'zi oladi — lekin 443 yopiq bo'lsa, buni qilolmaydi.
Ma'lumotlar bazasi16 ta
- 30MySQL parolsiz ko'tarilmaydioson
Database is uninitialized and password option is not specified — MySQL ham Postgres kabi.
- 31Har
docker compose downda baza bo'shaydiosonMariaDB ma'lumotlari konteyner ichida — konteyner ketsa, ular ham ketadi.
- 32Baza ishga tushdi — lekin hali tayyor emaso'rta
apibirinchi soniyada connection refused oladi va yiqiladi. Konteyner ≠ tayyor jarayon. - 33MySQL tayyorligini
mysqladmin pingbilan bilisho'rtaHealthcheck bor, lekin
test: true— u hech qachon yiqilmaydi, demak hech narsani tekshirmaydi. - 34Redis restart'dan keyin bo'sho'rta
Sessiyalar Redis'da — har deploy'da hamma foydalanuvchi chiqib ketadi.
- 35Redis'ga parol qo'yisho'rta
Redis parolsiz — tarmoqdagi har kim
FLUSHALLyubora oladi. - 36
postgres:latestbir kun yangi major versiyaga sakraydiosonMajor versiya o'zgarsa, eski ma'lumot papkasi bilan yangi Postgres ishga tushmaydi.
- 37Baza serverni yeb qo'ydio'rta
Katta so'rov paytida Postgres 6GB oldi va
apiOOM bo'ldi. Chegara yo'q edi. - 38Baza paroli
.envfaylidano'rtaParol compose faylida — u git'da.
.envesa.gitignoreda. - 39Zaxira nusxa — alohida, bir martalik servisqiyin
backuprestart: alwaysbilan har 10 soniyadapg_dumpqilyapti va bazani bo'g'yapti. - 40Migratsiya tugamasdan API ko'tarilmasino'rta
API eski sxema bilan ishga tushib, column does not exist xatolarini yog'dirmoqda.
- 41Ikki xato bitta bazadaoson
Tegsiz image va ochiq 5432 — eng ko'p uchraydigan juftlik.
- 42O'qish replikasiqiyin
Hisobotlar asosiy bazani sekinlashtiryapti. Replika qo'shing — to'g'ri tartibda.
- 43Birinchi ishga tushish 40 soniya oladio'rta
Yangi serverda healthcheck 3 marta yiqilib, konteyner unhealthy bo'lib qoldi.
- 44Baza reboot'dan keyin turmadioson
Server yangilanib qayta yuklandi —
apiturdi,dbyo'q. Bir qator yetishmaydi. - 45Postgres + Redis + API — to'g'ri yig'ilganqiyin
Uchta servis bor, lekin tartib, tarmoq, volume — hech biri to'g'ri emas.
Sirlar va konfiguratsiya14 ta
- 46Parol compose faylidaoson
POSTGRES_PASSWORD: admin123— bu fayl repozitoriyada, demak parol ham. - 47SECRET_KEY hammaga ma'lumoson
Sessiya imzosi faylda — uni bilgan har kim istalgan foydalanuvchi bo'la oladi.
- 48O'n ikki o'zgaruvchi — bitta fayloson
environment:ostida 12 qator. Ular.envda bo'lishi vaenv_filebilan kelishi kerak. - 49DEBUG=1 ishlab chiqarishdaoson
500 xato sahifasi butun konfiguratsiyani — parollar bilan — ko'rsatyapti.
- 50Node ilovasi development rejimidaoson
Express batafsil xatolarni ko'rsatyapti va inspector porti ochiq.
- 51Token buyruq satridao'rta
--token abc123—docker psqilgan har kim uni ko'radi. - 52Sir fayl orqali: compose
secretsqiyinMuhit o'zgaruvchisi
docker inspectda ko'rinadi.secretsesa faylga o'rnatiladi. - 53Konfiguratsiya faqat o'qish uchuno'rta
Konteyner buzilsa, hujumchi nginx konfiguratsiyasini o'zgartira oladi.
- 54Loglar UTC da, hisobotlar Toshkentdaoson
Kechki 23:30 dagi hodisa ertalabki hisobotga tushmadi — konteynerlar UTC da.
- 55SMTP paroli va manzilio'rta
Xat yuborish ishlamayapti: host noto'g'ri, parol esa faylda ochiq.
- 56API va worker bir xil sirlarni oladio'rta
Parol ikki joyda ikki xil yozilgan — worker eski parol bilan ulanolmayapti.
- 57Redis paroli ikki tomonda hamo'rta
Cache parol so'rayapti, api esa parolsiz ulanmoqchi. Ikkalasi bir manbadan olsin.
- 58MySQL paroli
secretsorqaliqiyinPostgres kabi MySQL ham
_FILEvariantlarini tushunadi. - 59Audit: faylda birorta sir qolmasinqiyin
Uch servis, beshta sir, bitta DEBUG — hammasi ochiq. Tozalang.
Chidamlilik16 ta
- 60Uchta servis, bitta restartoson
Faqat
apida restart bor. Reboot'dan keyin u yolg'iz turibdi. - 61API osilib qoldi — Docker esa uni sog'lom deb o'ylaydio'rta
Jarayon tirik, lekin so'rovlarga javob bermaydi. Healthcheck busiz farqni bilmaydi.
- 62JVM 45 soniya isiydi, healthcheck 30 da yiqiladio'rta
Har deploy'da konteyner ishga tushmasdan unhealthy bo'lib o'ldirilyapti.
- 63Bog'liqlik zanjiri: db → api → workerqiyin
Hammasi bir vaqtda ishga tushyapti va birinchi 20 soniya xato bilan to'la.
- 64Deploy paytida so'rovlar uzilib qolyaptio'rta
Docker SIGTERM yuboradi, 10 soniyadan keyin SIGKILL. Uzun so'rovlar yakunlanmaydi.
- 65Worker zombi jarayonlar bilan to'lib ketdio'rta
psda yuzlab<defunct>. Ilova PID 1 — u zombilarni yig'ishni bilmaydi. - 66Xotira chegarasi hammagaoson
Chegarasiz konteyner yiqilganda o'zi emas, qo'shnisi o'ladi.
- 67Bitta xato — 30 000 jarayono'rta
Worker'dagi bug cheksiz fork qildi va host'da yangi jarayon ochib bo'lmay qoldi.
- 68Hisobot generatori hamma yadroni band qildio'rta
Oylik hisobot ishlaganda API 5 soniya javob beradi. CPU ham cheklanadi.
- 69Disk to'ldi: 40GB logoson
/var/lib/docker/containersostida bitta 40GB-json.log. Chegara yo'q edi. - 70
--scale api=3ishlamayaptiqiyinConflict: container name already in use va port is already allocated. Ikki xato, bitta sabab.
- 71Redis tirikligini tekshirishoson
redis-cli pingPONGqaytarsa — tirik. Shuni healthcheck qiling. - 72Migratsiya yiqilsa — qayta urinsin, muvaffaqiyatda — to'xtasino'rta
restart: alwaystugagan migratsiyani ham qayta ishga tushiradi.on-failurekerak. - 73Cache yiqilsa API yiqilmasino'rta
API cache'siz ham ishlay oladi — lekin bazasiz emas. Bog'liqlik shartlari farq qilsin.
- 74Cron konteyner ichidao'rta
Rejalashtirilgan vazifalar uchun alohida servis —
crondold planda, init bilan. - 75Chidamlilik: to'liq ro'yxatqiyin
Uch servis, har biriga: restart, healthcheck, xotira, log. Hech biri yo'q.
Xavfsizlik16 ta
- 76Konteyner ichida root — host'da ham deyarli rootoson
Ilova root'da ishlayapti. Bitta zaiflik — va hujumchi root.
- 77Fayl tizimini muzlatisho'rta
Hujumchi konteynerga skript yozib qo'ydi. Yoziladigan joy bo'lmasa — yozolmaydi.
- 78Kerak bo'lmagan yadro huquqlarini tashlasho'rta
Docker standart holatda 14 ta capability beradi. Ilovaga birortasi kerak emas.
- 79setuid orqali root bo'lishni yopisho'rta
Image'da
su,sudokabi setuid binarlar bor.no-new-privilegesularni zararsiz qiladi. - 80
privileged: true— nega bu yerda?osonKimdir ishlamayapti deb
privilegedqo'shgan. U hamma izolyatsiyani o'chiradi. - 81docker.sock ulangan — bu host'ga root kirisho'rta
/var/run/docker.sockni ulagan konteyner host'da istalgan konteynerni ishga tushira oladi. - 82
network_mode: host— tarmoq izolyatsiyasi yo'qosonKonteyner host'ning barcha portlarini ko'radi va o'zi ham host'da tinglaydi.
- 83
SYS_ADMIN— deyarli rooto'rtacap_add: [SYS_ADMIN]mount, namespace, va yana o'nlab operatsiyani ochadi. - 84Uchta
latest— uchta sirpanchiq zaminosonBugun ishlagan stack ertaga boshqa image'lar bilan ko'tariladi.
- 85Fork va huquq — ikkalasi ham cheklansino'rta
Hujumchi konteynerda shell oldi. Endi u nima qila oladi — shuni kamaytiring.
- 86nginx root'sizqiyin
nginx 80 ni bind qilish uchun root'da ishga tushadi. Uni 8080 ga ko'chirib, root'ni olib tashlang.
- 87Adminer ishlab chiqarishda qolib ketganoson
Baza boshqaruv paneli 8081 da, parolsiz. Ishlab chiqishdan qolgan.
- 88Host'ning
/etcsi konteynerdaosonSertifikatlar kerak edi deb
/etc:/etculangan. Endi konteyner/etc/shadowni o'qiydi. - 89Bitta servis, to'liq qulfqiyin
Hardening ro'yxatining hammasi bitta servisda.
- 90Sir va huquq — bitta auditdaqiyin
Parol faylda, DEBUG yoqiq, root'da, hamma huquq bilan.
- 91Worker: hech kim ko'rmaydi, lekin baribir qulflango'rta
Worker tashqariga ochiq emas — lekin navbatdan zararli vazifa kelishi mumkin.
Teskari proksi14 ta
- 92API to'g'ridan-to'g'ri internetdaoson
Ilova 80-portda o'zi turibdi. TLS yo'q, rate limit yo'q, kesh yo'q.
- 93Caddy sertifikatlarni har restart'da qayta oladioson
Let's Encrypt limitiga urildi — sertifikatlar volume'da saqlanmagan.
- 94Proksi konfiguratsiyasi yoziladigano'rta
nginx buzilsa, hujumchi
conf.dga o'z serverini yozadi. - 95Har deploy'da 30 soniya 502o'rta
Proksi API tayyor bo'lmasdan ishga tushib, 502 Bad Gateway qaytaryapti.
- 96Traefik: ochiq portlar va yopiq dashboardo'rta
Traefik 80/443 da ishlashi, dashboard esa faqat
127.0.0.1da bo'lishi kerak. - 97Ikki ilova, bitta kirish nuqtasio'rta
shopvablogalohida portlarda. Bitta proksi ikkalasini domen bo'yicha ajratsin. - 98Proksi loglari — eng tez o'sadigan fayloson
Har so'rov bir qator log. Kuniga million so'rov — cheklovsiz bu 200MB.
- 99Proksiga ham chegaraoson
DDoS paytida nginx 4GB oldi. Chegara bo'lganda u o'zi yiqiladi, server emas.
- 100Statik sayt httpd bilanoson
HTML fayllar host papkasida — konteynerga bind qilib qo'yilgan.
- 101Proksi — ikki dunyo chegarasidaqiyin
Proksi tashqi va ichki tarmoq o'rtasida turadi. Ilova faqat ichkarida.
- 102Proksining o'zi ham tekshirilsino'rta
nginx ishga tushdi, lekin konfiguratsiya xato — 500 qaytaryapti. Hech kim bilmaydi.
- 103
nginx:latest— va bir kuni konfiguratsiya sintaksisi o'zgardiosonnginx 1.25 → 1.27 da eskirgan direktiva xatoga aylandi. Proksi ko'tarilmadi.
- 104Proksi: root'siz, yuqori portda, muzlatilganqiyin
nginx'ning to'liq qulflangan varianti.
- 105Deploy'da ulanishlar uzilmasino'rta
Proksi va API — ikkalasi ham ochiq ulanishlarni yakunlab olishi kerak.
Ilova xizmatlari14 ta
- 106Loglar 30 soniya kechikib chiqyaptioson
Python stdout'ni buferlaydi.
docker logsda hech narsa yo'q — keyin birdan hammasi. - 107Bitta worker,
--reloadbilan, prod'dao'rtaAPI bir vaqtda bitta so'rovga xizmat qiladi va har fayl o'zgarishida qayta yuklanadi.
- 108Node:
npm run devprod'daosonnodemon fayl kuzatyapti, source map'lar ochiq,
NODE_ENVyo'q. - 109Ilova
127.0.0.1da tinglayapti — konteynerdan tashqarida ko'rinmaydiosonPort ochiq, lekin connection refused. Ilova faqat konteyner ichidagi loopback'da.
- 110Worker navbat tayyor bo'lmasdan boshlayaptio'rta
Birinchi 5 soniyada worker Connection refused bilan yiqiladi va restart yo'q.
- 111Migratsiya → API → workerqiyin
To'g'ri tartib: baza sog'lom → migratsiya tugadi → API → worker.
- 112API uchun byudjetoson
Xotira, jarayonlar — ikkalasi ham cheklansin.
- 113Prod'da
LOG_LEVEL=debug— soatiga gigabaytosonDebug loglari har so'rovning tanasini yozyapti. Ichida parollar ham bor.
- 114SIGTERM ilovaga yetib bormayaptio'rta
Loglar
| teeorqali o'tkazilgan — shell PID 1 bo'lib qoldi va SIGTERM ilovaga yetmaydi. Docker 10 soniya kutib SIGKILL beradi. - 115Node ilovasi uchun healthchecko'rta
Alpine image'da
curlyo'q,wgetbor. Ishga tushishga 20 soniya kerak. - 116API: root'siz, muzlatilgan,
.envbilanqiyinHardening va konfiguratsiya birga.
- 117v1 va v2 yonma-yono'rta
Yangi versiya chiqdi, eskisi hali kerak. Ikkalasi proksi ortida, ikkalasi yopiq.
- 118Uchta worker, bitta navbatqiyin
Navbat o'sib ketdi. Worker'ni 3 nusxaga ko'paytiring — to'g'ri.
- 119Tungi hisobot: bir marta, cheklangan, navbatdao'rta
Hisobot servisi doim ishlab turibdi va bazani bo'g'yapti.
Nosozlikni topish15 ta
- 120
port:— bitta harf kamosonBitta harf xato — va
docker compose uphech narsani ishga tushirmaydi. - 121
enviroment:— va baza parolsizosonImlo xatosi — compose noma'lum kalitni ko'rib, faylni umuman ishga tushirmaydi.
- 122
depend_on:— tartib yo'qosondepends_ono'rnigadepend_on— compose bunday kalitni bilmaydi va faylni rad etadi. - 123
unless_stopped— pastki chiziq emas, defisosoninvalid restart policy — Docker qiymatni tanimadi va konteyner ko'tarilmadi.
- 124
nginx:1.27-alpne— manifest unknownosonBir harf tushib qolgan. Registry bunday teg yo'q deydi.
- 125undefined volume pgdataoson
Servis volume'ni ishlatyapti, lekin u yuqori darajada e'lon qilinmagan.
- 126Healthcheck bor —
testyo'qo'rtaintervalvaretriesyozilgan, tekshiruvning o'zi esa yo'q. Compose xato beradi. - 127Bo'shliq — YAML'da bu sintaksisoson
mapping values are not allowed here —
portsimagebilan bir darajada emas. - 128
ports: "8080:80"— ro'yxat emasosonports must be a list — bitta port bo'lsa ham ro'yxat kerak.
- 129Ro'yxat ichida
KEY: value— buKEY=valueemaso'rtaenvironmentro'yxat shaklida, lekin elementlar mapping. Postgres parolni ko'rmayapti. - 130Ikki marta
8080— ikkinchisi yiqiladiosonport is already allocated —
apivadocsbir xil host port. - 131container name "/api" is already in useo'rta
replicas: 2vacontainer_namebirga bo'lolmaydi. - 132
services:yo'q — hamma narsa ildizdao'rta'web' is not a valid top-level key — servislar
services:ostida bo'lishi shart. - 133Tab belgisi — YAML uni qabul qilmaydioson
found character '\t' that cannot start any token — muharrir tab qo'ygan.
- 134
condition: healthy— bunday qiymat yo'qo'rtaShart nomi noto'g'ri. To'g'risi:
service_healthy.
To'liq stacklar18 ta
- 135Blog: proksi + ilova + bazao'rta
Uch servis ishlayapti, lekin tartib, port va volume yo'q.
- 136Do'kon: proksi, API, worker, baza, cacheqiyin
Besh servis. Sirlar ochiq, portlar ochiq, tartib yo'q.
- 137Node + Postgres + Redisqiyin
Node ilovasi 3000 da, proksi ortida, ikkita ma'lumot servisi bilan.
- 138Python + MySQLo'rta
Flask ilovasi MySQL bilan — parol, healthcheck, volume, tartib.
- 139Statik frontend + API — bitta proksio'rta
Frontend httpd'da, API Python'da. Proksi ikkalasini bitta domenda beradi.
- 140Eski ilova: httpd + MariaDBo'rta
Meros qolgan stack. Uni buzmasdan xavfsizroq qiling.
- 141Navbat: API yozadi, uchta worker o'qiydiqiyin
Worker'lar ko'paytirilishi, cache'ni kutishi va cheklangan bo'lishi kerak.
- 142Staging faylini prod'ga tayyorlashqiyin
Adminer, DEBUG,
latest, ochiq portlar — staging'da mayli, prod'da yo'q. - 143To'rt servis, to'rt healthcheck, bitta zanjirqiyin
db → api → worker → scheduler. Har biri avvalgisining sog'lomligini kutadi.
- 144Xavfsiz stack: uch servis, hammasi qulflanganqiyin
Proksi, API, baza — har biri root'siz, huquqsiz, ichki tarmoqda.
- 145To'rt servisga resurs byudjetio'rta
8GB server. Har servisga xotira, CPU, jarayon, log chegarasi.
- 146Sirlar stack'i: fayl orqali va
.envorqaliqiyinBaza
secretsbilan, ilovalarenv_filebilan. Faylda birorta parol yo'q. - 147Nol to'xtovli yangilanish, to'liqqiyin
Nusxalar, healthcheck, yumshoq to'xtash, proksi — hammasi birga.
- 148Baza, migratsiya, zaxira, APIqiyin
To'rtta servis, ikkitasi bir martalik. Tartib va restart siyosatlari farq qiladi.
- 149Caddy + Node + Postgreso'rta
Caddy TLS ni o'zi oladi. Unga 80/443 va
/datavolume kerak; ilova ortida. - 150Traefik oldida ikki ilovaqiyin
Traefik marshrutlaydi; dashboard faqat localhost; ilovalar yopiq va bir tarmoqda.
- 151Kuzatuv: loglar, healthcheck, chegaralaro'rta
Kuzatuv tizimi yo'q — hech bo'lmaganda Docker'ning o'zi biladiganini sozlang.
- 152Yakuniy: hamma narsa bitta fayldaqiyin
Beshta servis. Tarmoq, sirlar, chidamlilik, xavfsizlik — o'n beshdan ortiq tekshiruv.