GH GambleHub

Texnologiyalar va infratuzilma → Docker Compose va Dev-muhit

Docker Compose va Dev-muhit

1) Nima uchun Compose

Docker Compose - prod-stek nusxasini lokal/CI: ilovalar, DD, navbatlar, keshlar, teskari proksi, mok-xizmatlarga oshirishning tezkor usuli. Maqsadlar:
  • Oziq-ovqat pariteti (tasvirlar, oʻzgaruvchilar, tarmoqlar) → kamroq «men uchun ishlaydi».
  • Yangi boshlanuvchilar uchun tezkor start →’make up’va jangga.
  • Ishlab chiquvchi/filial uchun izolyatsiya qilingan stendlar → ziddiyatsiz parallel ish.
  • Haqiqiy qaramliklarda integratsiya testlari.

2) Repozitoriyning bazaviy tuzilmasi


project/
docker/
app/      # Dockerfile, скрипты web/      # Nginx/Traefik конфиги seed/      # сидеры/фикстуры compose.yaml       # общий базовый стек compose.override.yaml   # локальные оверрайды (в.gitignore)
compose.ci.yaml      # для CI
.env.example       # шаблон окружения
Makefile         # удобные цели devcontainer.json     # VS Code Dev Containers (опционально)
Tavsiyalar:
  • compose. yaml - dev/CI uchun bir xil «skelet» (servislar, tarmoqlar, jildlar) ni tavsiflaydi.
  • override - faqat lokal tuzatishlar: kataloglar mappinglari, portlar, debug-bayroqlar.
  • .env. example → ishlab chiquvchi’.env’ga nusxa olib, qiymatlarni qoʻyadi.

3) compose. yaml (misol)

yaml name: project services:
gateway:
image: traefik:v3 command:
- "--providers.docker=true"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.dev.acme.tlschallenge=true"
ports: ["80:80", "443:443"]
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro networks: [edge, core]

api:
build:
context:.
dockerfile: docker/app/Dockerfile target: dev env_file: [.env]
command:./scripts/dev-start.sh volumes:
-./:/app:cached depends_on: [db, redis, kafka]
labels:
- "traefik.http.routers.api.rule=Host(`${API_HOST}`)"
- "traefik.http.services.api.loadbalancer.server.port=8080"
networks: [core]

db:
image: postgres:16 environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASS}
POSTGRES_DB: ${DB_NAME}
volumes:
- pgdata:/var/lib/postgresql/data healthcheck: {test: ["CMD-SHELL","pg_isready -U $$POSTGRES_USER"], interval: 5s, timeout: 3s, retries: 20}
networks: [core]

redis:
image: redis:7 command: ["redis-server","--appendonly","yes"]
volumes: [ "redisdata:/data" ]
networks: [core]

kafka:
image: bitnami/kafka:3 environment:
KAFKA_ENABLE_KRAFT: "yes"
KAFKA_CFG_PROCESS_ROLES: "controller,broker"
KAFKA_CFG_NODE_ID: 1
KAFKA_CFG_LISTENERS: PLAINTEXT://:9092
KAFKA_CFG_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092 networks: [core]

mailhog:
image: mailhog/mailhog ports: ["8025:8025"]
networks: [core]

mock-psp:
image: wiremock/wiremock:3 command: ["--verbose","--global-response-templating"]
volumes: ["./docker/mocks/psp:/home/wiremock"]
labels:
- "traefik.http.routers.mockpsp.rule=Host(`${PSP_HOST}`)"
networks: [core]

volumes:
pgdata: {}
redisdata: {}

networks:
edge: {}
core: {}
Asosiy jihatlar:
  • Traefik/NGINX gateway sifatida: routing sxemasini oziq-ovqat sxemasiga yaqinlashtiradi.
  • Healthcheck va depends_on s’condition: service_healthy' (v3 da waiting skriptlari orqali) - tartibli start.
  • Persistentlik uchun volumes (BD/kesh) va kod uchun bind-mount (hot-reload).

4) Profillar va bir nechta fayllar

Profiles (’profiles: [dev, ci, extras]’) (’docker compose --profile extras up -d’) xizmatlarini oʻz ichiga oladi/chiqaradi.

Bir nechta fayllar:
  • `docker compose -f compose. yaml -f compose. dev. yaml up’- konfiguratsiyalarni quyish.
Namunaviy toʻplami:
  • `compose. yaml’- bazaviy.
  • `compose. dev. yaml’- bind-mountlar, debag, ficheflaglar.
  • `compose. extras. yaml’- instrumental (Grafana, pgAdmin, Kafdrop).
  • `compose. ci. yaml’- «grafiksiz bosh», bind-mountsiz.

5) O’zgaruvchilar, sirlar va sozlamalar

.env - o’zgaruvchanlarning umumiy manbai: xostlar, test ma’lumotlari, bayroqlar.

Dev sirlarini ochiq saqlamaymiz; foydalanamiz:
  • mahalliy dummy-sirlar (qulflash kalitlari),
  • o’ta sezgir uchun skinny-Vault/SOPS bilan integratsiya qilish.
  • Printsip: minimal zarur ma’lumotlar. PAN/PII - tokenlar/fiksturalar.

6) Yig’ilishlar va tezlik

6. 1 Multi-stage + BuildKit

Dockerfile’base’,’dev’,’prod’maqsadlarida; bogʻliqlik uchun umumiy cache-layer.
BuildKit qoʻshish:’DOCKER _ BUILDKIT = 1’(yoki konfigada).
Kesh:’--mount = type = cache, target =/root/.cache/...’uchun pip/npm/maven.

6. 2 Tezkor sikl

Bind-mount кода + hot-reload (nodemon, uvicorn --reload, Spring Devtools).
Alohida target dev, faqat kerakli target.
Makefile цели: `make up`, `make down`, `make logs`, `make rebuild`, `make seed`.

Makefile misoli:
make
ENV?= dev up:
docker compose --profile $(ENV) up -d down:
docker compose down -v logs:
docker compose logs -f --tail=200 rebuild:
DOCKER_BUILDKIT=1 docker compose build --pull --no-cache api seed:
docker compose run --rm api./scripts/seed.sh migrate:
docker compose run --rm api./scripts/migrate.sh test:
docker compose -f compose.yaml -f compose.ci.yaml run --rm api./scripts/test.sh

7) DB, migratsiya, siding

Migratsiyalar (Flyway/Liquibase/Alembic/Prisma)’db’(healthcheck kutish) boshlanganidan keyin xuk-skript tomonidan ishga tushiriladi.
Siding: fiksturali alohida’seed’konteyneri; takroriy va idempotent.
Maʼlumot snapshotlari: tom’pgdata’’reset-db’skripti bilan qayta/qayta tiklanishi mumkin. sh`.


8) Brokerlar, keshlar, CDC

Kafka/Rabbit/Redpanda - nasldagi kabi (minimal konfiglar).
Realistik uchun kiritilgan AOF bilan Redis.
CDC-konnektorlar (ixtiyoriy): Debezium analitikaning integratsiyalashgan testlari uchun alohida xizmatda.


9) Tashqi yetkazib beruvchilarning moxlari

REST uchun WireMock/Prism, murakkab skriptlar uchun MockServer.
Xatlar uchun Mailhog/SMTP4Dev.
Bulutli storlar va S3 mosligi uchun Localstack/MinIO.
Siyosat: barcha tashqi PSP/KYC/KMS - «Internetga» emas, balki kontraktlar bo’yicha mok-hub (OpenAPI) orqali.


10) Teskari proksi va TLS

Traefik/NGINX lokal domenlar (’.test’,’.local’) bo’yicha xizmatlarni tarqatadi:
  • `api. local. test`, `mockpsp. local. test`.
  • TLS: mkcert - HSTS/secure-cookies sertifikatini olish uchun.
  • Sticky sessiyalarini faqat bu haqiqatan ham muhim boʻlgan holatlar uchun yoqing.

11) Ishlab chiquvchi profillar: Node/Python/Java

Node: mount’node _ modules’install tezlashtirish uchun kesh (volume) sifatida;’CHOKIDAR _ USEPOLLING = 1’Windows/WSL uchun.
Python: `pip cache` как volume, `watchfiles`/`uvicorn --reload`.
Java: JRebel/Devtools,’mvn -T 1C -o’+ bogʻliqlik qatlami.


12) Testlar va sifat

Integratsiya testlarini Compose:’docker compose run test’tarmog’i ichida o’tkazamiz.
Testcontainers (JVM/Node/Python/.NET uchun) - to’liq steksiz unit integratsiyasi uchun yaxshi variant.
CIdagi mok-hub → gate bilan kontrakt-testlar.
Linterlar/Pre-commit: takrorlash uchun konteynerda ishga tushirish.


13) Devcontainers va «IDE-kod sifatida»

`devcontainer. json’rasm tasvirini (CLI, SDK, linters) qayd etadi, loyihani montaj qiladi,’postCreateCommand’ni haydaydi.
Foyda: bir xil vositalar, xostni «to’kib tashlamang», yangi mashina - bir necha daqiqada tayyor.


14) Gigandagi xavfsizlik

Ilovalarda root yoʻq;’readOnlyRootFilesystem’iloji boricha.
Jangovar kalitlar/sirlar yo’q, hatto vaqtinchalik.
Logi - PII/PANsiz; formatter darajasida niqoblash.
Portlar va tarmoqlarni ajratish: tashqi kirish faqat gateway orqali.


15) FinOps/lokal ishlash

Resurslarni cheklang:’deploy. resources. limits’(Compose qisman o’qiydi, lekin fanga yordam beradi).
Fan-autni kamaytiring (andoza xizmatlar kamroq; extras - profillar).
Paket menejerlari uchun BuildKit va volume-keshlar.


16) CI с Compose

Xuddi shu’compose’dan foydalaning. yaml` + `compose. ci. yaml’bind-mountsiz.
Bogʻliqlik keshlari - job/qatlamlar orasidagi attachable volumes kabi.
Parallel joblar:’name:’Komposeda stendlar toʻqnashmasligi uchun har xil (yoki shoxobcha boʻyicha prefiks).


17) Trablshuting

’docker compose ps ’/’ logs -f ’/’ exec’ - bazaviy diagnostika.
Kompose tarmog’idagi DNS’ni tekshiring.
Agar bind-mount macOS/Windows -’: cached ’/’: delegated’yoki Mutagen/virtiofsda «sekinlashsa».
Healthcheck «yashil», lekin «o’lgan» xizmati: appka’readiness’va migratsiya tartibini tekshiring.


18) Joriy etish chek-varaqasi

1. Kompose tarkibidagi asosiy stek (gateway, api, db, cache, queue). yaml.
2. Lokal tuzatishlar - override (v.gitignore) da.
3..env. example to’liq va dolzarbdir;’make bootstrap’uni’.env’ga ko’chiradi.
4. Healthchecks va DB/migratsiyani kutish skripti.
5. Tashqi provayderlar uchun WireMock/Localstack/MinIO.
6. ’make seed/migrate’ buyruqlari sifatida siding va migratsiya.
7. BuildKit + multi-stage, giyohvandlik keshlari.
8. Tezda boshlash uchun Devcontainers/Makefile.
9. Asboblar uchun’extras’profillari (Grafana/pgAdmin/Kafdrop).
10. CI bir xil compose (+ ci-overrayd) dan foydalanadi.


19) Anti-patternlar

«Monster-compose» 40 ta xizmatga ega, har doim ishga tushirilgan: profillarni yoqing.
Ishlab chiquvchilar o’rtasida ziddiyatli portlar.
Git yoki’.envdagi sirlar/kalitlar. example`.
Testlar uchun «Internet» ga bog’liqlik (real PSP/KYC).
Healthcheck/kutish yo’qligi - migratsiya va start poygalari.
Siding yo’qligi → flaky integratsiya testlari.


20) Jami

Kompose - bu ishlab chiqish tezligining dvigateli: bitta fayl sizning xizmat olamingizni tasvirlaydi va profillar/overradlar moslashuvchanlikni beradi. Oziq-ovqat bilan paritetni saqlang, siding va migratsiyani avtomatlashtiring, moki va TLSni «jangda bo’lgani kabi» saqlang, BuildKit’ning yig’ilishini tezlashtiring - va siz iGaming/fintech oziq-ovqat stsenariylarini ishlash, sinovdan o’tkazish va xavfsiz ravishda takrorlash uchun qulay bo’lgan mahalliy muhitga ega bo’lasiz.

Contact

Biz bilan bog‘laning

Har qanday savol yoki yordam bo‘yicha bizga murojaat qiling.Doimo yordam berishga tayyormiz.

Integratsiyani boshlash

Email — majburiy. Telegram yoki WhatsApp — ixtiyoriy.

Ismingiz ixtiyoriy
Email ixtiyoriy
Mavzu ixtiyoriy
Xabar ixtiyoriy
Telegram ixtiyoriy
@
Agar Telegram qoldirilgan bo‘lsa — javob Email bilan birga o‘sha yerga ham yuboriladi.
WhatsApp ixtiyoriy
Format: mamlakat kodi va raqam (masalan, +998XXXXXXXX).

Yuborish orqali ma'lumotlaringiz qayta ishlanishiga rozilik bildirasiz.